2 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali-toolkit/public-api/controls/video-view/video-view.h>
25 using namespace Dali::Toolkit;
29 const char* const TEST_FILE( "test.mp4" );
30 const char* const VOLUME_LEFT( "volumeLeft" );
31 const char* const VOLUME_RIGHT( "volumeRight" );
32 const char* const RENDERING_TYPE( "renderingTarget" );
34 const char* VERTEX_SHADER = DALI_COMPOSE_SHADER(
35 attribute mediump vec2 aPosition;\n
36 varying mediump vec2 vTexCoord;\n
37 uniform mediump mat4 uMvpMatrix;\n
38 uniform mediump vec3 uSize;\n
42 mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n
43 vertexPosition.xyz *= uSize;\n
44 vertexPosition = uMvpMatrix * vertexPosition;\n
46 vTexCoord = aPosition + vec2(0.5);\n
47 gl_Position = vertexPosition;\n
51 const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER(
52 varying mediump vec2 vTexCoord;\n
53 uniform sampler2D sTexture;\n
54 uniform lowp vec4 uColor;\n
58 gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n
64 void video_view_startup(void)
66 test_return_value = TET_UNDEF;
69 void video_view_cleanup(void)
71 test_return_value = TET_PASS;
74 // Negative test case for a method
75 int UtcDaliVideoViewUninitialized(void)
77 ToolkitTestApplication application;
78 tet_infoline(" UtcDaliVideoViewUninitialized");
80 Toolkit::VideoView view;
84 // New() must be called to create a VideoView or it wont be valid.
85 Actor a = Actor::New();
87 DALI_TEST_CHECK( false );
89 catch (Dali::DaliException& e)
91 // Tests that a negative test of an assertion succeeds
92 DALI_TEST_PRINT_ASSERT( e );
93 DALI_TEST_CHECK(!view);
98 // Positive test case for a method
99 int UtcDaliVideoViewNew(void)
101 ToolkitTestApplication application;
102 tet_infoline(" UtcDaliVideoViewNew");
104 Toolkit::VideoView view = Toolkit::VideoView::New();
105 DALI_TEST_CHECK( view );
107 Toolkit::VideoView view2 = Toolkit::VideoView::New( "" );
108 DALI_TEST_CHECK( view2 );
112 // Positive test case for a method
113 int UtcDaliVideoViewDownCast(void)
115 ToolkitTestApplication application;
116 tet_infoline(" UtcDaliVideoViewDownCast");
118 Toolkit::VideoView view = Toolkit::VideoView::New();
119 BaseHandle handle(view);
121 Toolkit::VideoView view2 = Toolkit::VideoView::DownCast( handle );
122 DALI_TEST_CHECK( view );
123 DALI_TEST_CHECK( view2 );
124 DALI_TEST_CHECK( view == view2 );
128 // Positive test case for a method
129 int UtcDaliVideoViewProperty1(void)
131 ToolkitTestApplication application;
132 tet_infoline(" UtcDaliVideoViewProperty1");
134 Toolkit::VideoView view = Toolkit::VideoView::New();
135 DALI_TEST_CHECK( view );
138 view.SetProperty( VideoView::Property::VIDEO, TEST_FILE );
139 Property::Value val = view.GetProperty( VideoView::Property::VIDEO );
140 DALI_TEST_CHECK( val.Get( file ) );
141 DALI_TEST_CHECK( file == TEST_FILE );
145 // Positive test case for a method
146 int UtcDaliVideoViewProperty1b(void)
148 ToolkitTestApplication application;
149 tet_infoline(" UtcDaliVideoViewProperty1");
151 Toolkit::VideoView view = Toolkit::VideoView::New();
152 DALI_TEST_CHECK( view );
153 Stage stage = Stage::GetCurrent();
158 view.SetProperty( VideoView::Property::VIDEO, Property::Map()
159 .Add("rendererType", "IMAGE")
160 .Add("url", "video.mpg") // Note, videoView doesn't use this url
161 .Add("RENDERING_TARGET", "windowSurfaceTarget" )
163 .Add("height", 100) );
167 Property::Value val = view.GetProperty( VideoView::Property::VIDEO );
168 Property::Map* resultMap = val.GetMap();
170 DALI_TEST_CHECK( resultMap );
171 Property::Value* value = resultMap->Find("url");
172 DALI_TEST_CHECK( value );
173 DALI_TEST_EQUALS( value->Get<std::string>(), "video.mpg", TEST_LOCATION );
175 stage.Remove( view );
180 int UtcDaliVideoViewProperty2(void)
182 ToolkitTestApplication application;
183 tet_infoline(" UtcDaliVideoViewProperty2");
185 Toolkit::VideoView view = Toolkit::VideoView::New();
186 DALI_TEST_CHECK( view );
189 Property::Value val = view.GetProperty( VideoView::Property::LOOPING );
190 DALI_TEST_CHECK( val.Get( looping ) );
191 DALI_TEST_CHECK( !looping );
193 view.SetProperty( VideoView::Property::LOOPING, true );
194 val = view.GetProperty( VideoView::Property::LOOPING );
195 DALI_TEST_CHECK( val.Get( looping ) );
196 DALI_TEST_CHECK( looping );
200 int UtcDaliVideoViewProperty3(void)
202 ToolkitTestApplication application;
203 tet_infoline(" UtcDaliVideoViewProperty3");
205 Toolkit::VideoView view = Toolkit::VideoView::New();
206 DALI_TEST_CHECK( view );
209 Property::Value val = view.GetProperty( VideoView::Property::MUTED );
210 DALI_TEST_CHECK( val.Get( muted ) );
211 DALI_TEST_CHECK( !muted );
213 view.SetProperty( VideoView::Property::MUTED, true );
214 val = view.GetProperty( VideoView::Property::MUTED );
215 DALI_TEST_CHECK( val.Get( muted ) );
216 DALI_TEST_CHECK( muted );
221 int UtcDaliVideoViewProperty4(void)
223 ToolkitTestApplication application;
224 tet_infoline(" UtcDaliVideoViewProperty4");
226 Toolkit::VideoView view = Toolkit::VideoView::New();
227 DALI_TEST_CHECK( view );
233 map.Insert( VOLUME_LEFT, 0.5f );
234 map.Insert( VOLUME_RIGHT, 0.5f );
236 view.SetProperty( VideoView::Property::VOLUME, map );
237 Property::Value val = view.GetProperty( VideoView::Property::VOLUME );
240 DALI_TEST_CHECK( val.Get( map2 ) );
242 Property::Value* volumeLeft = map2.Find( VOLUME_LEFT );
243 Property::Value* volumeRight = map2.Find( VOLUME_RIGHT );
245 DALI_TEST_CHECK( volumeLeft && volumeLeft->Get( left ) );
246 DALI_TEST_CHECK( volumeRight && volumeRight->Get( right ) );
247 DALI_TEST_CHECK( left == 0.5f );
248 DALI_TEST_CHECK( right == 0.5f );
253 int UtcDaliVideoViewCopyAndAssignment(void)
255 ToolkitTestApplication application;
257 VideoView view = Toolkit::VideoView::New();
258 DALI_TEST_CHECK( view );
260 VideoView copy( view );
261 DALI_TEST_CHECK( view == copy );
264 DALI_TEST_CHECK( !assign );
267 DALI_TEST_CHECK( assign == view );
272 int UtcDaliVideoViewTypeRegistry(void)
274 ToolkitTestApplication application;
276 TypeRegistry typeRegistry = TypeRegistry::Get();
277 DALI_TEST_CHECK( typeRegistry );
279 TypeInfo typeInfo = typeRegistry.GetTypeInfo( "VideoView" );
280 DALI_TEST_CHECK( typeInfo );
282 BaseHandle handle = typeInfo.CreateInstance();
283 DALI_TEST_CHECK( handle );
285 VideoView view = VideoView::DownCast( handle );
286 DALI_TEST_CHECK( view );
291 int UtcDaliVideoViewMethodsForCoverage(void)
293 ToolkitTestApplication application;
295 VideoView videoView = VideoView::New();
296 DALI_TEST_CHECK( videoView );
301 videoView.Forward(10);
302 videoView.Backward(10);
303 VideoView::VideoViewSignalType& signal = videoView.FinishedSignal();
304 DALI_TEST_EQUALS( 0, signal.GetConnectionCount(), TEST_LOCATION );
309 int UtcDaliVideoViewMethodsForRenderType(void)
311 ToolkitTestApplication application;
312 VideoView videoView = VideoView::New();
313 DALI_TEST_CHECK( videoView );
315 Property::Map windowSurfaceTarget;
316 Property::Map nativeImageTarget;
318 windowSurfaceTarget.Insert( RENDERING_TYPE, "windowSurfaceTarget" );
319 nativeImageTarget.Insert( RENDERING_TYPE, "nativeImageTarget" );
322 Property::Value value;
323 videoView.SetProperty( VideoView::Property::VIDEO, windowSurfaceTarget );
325 value = videoView.GetProperty( VideoView::Property::VIDEO );
326 DALI_TEST_CHECK( value.Get( map ) );
328 Property::Value* type = map.Find( RENDERING_TYPE );
329 DALI_TEST_CHECK( type );
330 DALI_TEST_EQUALS( "windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION );
332 videoView.SetProperty( VideoView::Property::VIDEO, nativeImageTarget );
334 value = videoView.GetProperty( VideoView::Property::VIDEO );
335 DALI_TEST_CHECK( value.Get( map ) );
336 type = map.Find( RENDERING_TYPE );
338 DALI_TEST_CHECK( type );
339 DALI_TEST_EQUALS( "nativeImageTarget", type->Get<std::string>(), TEST_LOCATION );
344 int UtcDaliVideoViewCustomShaderForCoverage(void)
346 ToolkitTestApplication application;
347 VideoView videoView = VideoView::New();
348 DALI_TEST_CHECK( videoView );
350 Stage::GetCurrent().Add( videoView );
351 videoView.SetProperty( VideoView::Property::VIDEO, "testvideo" );
353 Property::Map customShader;
354 customShader.Insert( "vertexShader", VERTEX_SHADER );
355 customShader.Insert( "fragmentShader", FRAGMENT_SHADER );
358 map.Insert( "shader", customShader );
360 videoView.SetProperty( VideoView::Property::VIDEO, map );
363 Property::Value value = videoView.GetProperty( VideoView::Property::VIDEO );
365 DALI_TEST_CHECK( !value.Get( map2 ) );
369 int UtcDaliVideoViewMethodsForCoverage2(void)
371 ToolkitTestApplication application;
372 VideoView videoView = VideoView::New();
373 DALI_TEST_CHECK( videoView );
375 Property::Map windowSurfaceTarget;
377 windowSurfaceTarget.Insert( RENDERING_TYPE, "windowSurfaceTarget" );
379 Stage::GetCurrent().Add( videoView );
381 application.SendNotification();
382 application.Render();
385 Property::Value value;
386 videoView.SetProperty( VideoView::Property::VIDEO, windowSurfaceTarget );
388 value = videoView.GetProperty( VideoView::Property::VIDEO );
389 DALI_TEST_CHECK( value.Get( map ) );
391 Property::Value* type = map.Find( RENDERING_TYPE );
392 DALI_TEST_CHECK( type );
393 DALI_TEST_EQUALS( "windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION );
395 Vector3 vector(100.0f, 100.0f, 0.0f);
397 DALI_TEST_CHECK(vector != videoView.GetCurrentSize());
398 videoView.SetSize( vector );
400 application.SendNotification();
401 application.Render();
403 // Check the size in the new frame
404 DALI_TEST_CHECK(vector == videoView.GetCurrentSize());
409 int UtcDaliVideoViewPropertyUnderlay(void)
411 ToolkitTestApplication application;
412 tet_infoline("UtcDaliVideoViewPropertyUnderlay");
413 ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
415 VideoView view = VideoView::New();
416 DALI_TEST_CHECK( view );
418 Stage::GetCurrent().Add( view );
421 application.SendNotification();
422 application.Render();
424 bool isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
425 DALI_TEST_CHECK( isUnderlay );
428 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
429 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
430 DALI_TEST_CHECK( !isUnderlay );
433 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, true );
434 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
435 DALI_TEST_CHECK( isUnderlay );
437 // If platform api doesn't provide any API or feature for decoded images of video,
438 // UNDERLAY should be true
439 ToolkitApplication::DECODED_IMAGES_SUPPORTED = false;
441 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
442 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
443 DALI_TEST_CHECK( isUnderlay );
446 ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
448 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, true );
449 view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
450 isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
451 DALI_TEST_CHECK( !isUnderlay );
458 int UtcDaliVideoViewPropertyPlayPosition(void)
460 ToolkitTestApplication application;
461 tet_infoline("UtcDaliVideoViewPropertyPlayPosition");
463 VideoView view = VideoView::New();
464 DALI_TEST_CHECK( view );
466 Stage::GetCurrent().Add( view );
469 application.SendNotification();
470 application.Render();
472 int playPos = view.GetProperty( Toolkit::VideoView::Property::PLAY_POSITION ).Get< int >();
473 DALI_TEST_CHECK( playPos == 0 );
475 view.SetProperty( Toolkit::VideoView::Property::PLAY_POSITION, 10 );
476 playPos = view.GetProperty( Toolkit::VideoView::Property::PLAY_POSITION ).Get< int >();
477 // Actually setting play position will be async
478 // Actual platform result may be different.
479 DALI_TEST_CHECK( playPos == 10 );
485 int UtcDaliVideoViewNew2(void)
487 ToolkitTestApplication application;
488 tet_infoline("UtcDaliVideoViewNew2");
490 VideoView view = VideoView::New( true );
491 DALI_TEST_CHECK( view );
493 Stage::GetCurrent().Add( view );
496 application.SendNotification();
497 application.Render();
499 VideoView view2 = VideoView::New( "", false );
500 DALI_TEST_CHECK( view2 );
502 Stage::GetCurrent().Add( view2 );
505 application.SendNotification();
506 application.Render();
511 int UtcDaliVideoViewPropertyDisplayMode(void)
513 ToolkitTestApplication application;
514 tet_infoline("UtcDaliVideoViewPropertyDisplayMode");
516 VideoView view = VideoView::New();
517 DALI_TEST_CHECK( view );
519 Stage::GetCurrent().Add( view );
522 application.SendNotification();
523 application.Render();
525 view.SetProperty( Toolkit::VideoView::Property::DISPLAY_MODE, Toolkit::VideoView::DisplayMode::DST_ROI );
526 int displayMode = view.GetProperty( Toolkit::VideoView::Property::DISPLAY_MODE ).Get< int >();
527 DALI_TEST_CHECK( displayMode == Toolkit::VideoView::DisplayMode::DST_ROI );