ImageVisual Load policy
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-VideoView.cpp
1 /*
2  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 #include <iostream>
19 #include <stdlib.h>
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>
23
24 using namespace Dali;
25 using namespace Dali::Toolkit;
26
27 namespace
28 {
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" );
33
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
39   \n
40   void main()\n
41   {\n
42     mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n
43     vertexPosition.xyz *= uSize;\n
44     vertexPosition = uMvpMatrix * vertexPosition;\n
45     \n
46     vTexCoord = aPosition + vec2(0.5);\n
47     gl_Position = vertexPosition;\n
48   }\n
49 );
50
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
55   \n
56   void main()\n
57   {\n
58     gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n
59   }\n
60 );
61
62 }
63
64 void video_view_startup(void)
65 {
66   test_return_value = TET_UNDEF;
67 }
68
69 void video_view_cleanup(void)
70 {
71   test_return_value = TET_PASS;
72 }
73
74 // Negative test case for a method
75 int UtcDaliVideoViewUninitialized(void)
76 {
77   ToolkitTestApplication application;
78   tet_infoline(" UtcDaliVideoViewUninitialized");
79
80   Toolkit::VideoView view;
81
82   try
83   {
84     // New() must be called to create a VideoView or it wont be valid.
85     Actor a = Actor::New();
86     view.Add( a );
87     DALI_TEST_CHECK( false );
88   }
89   catch (Dali::DaliException& e)
90   {
91     // Tests that a negative test of an assertion succeeds
92     DALI_TEST_PRINT_ASSERT( e );
93     DALI_TEST_CHECK(!view);
94   }
95   END_TEST;
96 }
97
98 // Positive test case for a method
99 int UtcDaliVideoViewNew(void)
100 {
101   ToolkitTestApplication application;
102   tet_infoline(" UtcDaliVideoViewNew");
103
104   Toolkit::VideoView view = Toolkit::VideoView::New();
105   DALI_TEST_CHECK( view );
106
107   Toolkit::VideoView view2 = Toolkit::VideoView::New( "" );
108   DALI_TEST_CHECK( view2 );
109   END_TEST;
110 }
111
112 // Positive test case for a method
113 int UtcDaliVideoViewDownCast(void)
114 {
115   ToolkitTestApplication application;
116   tet_infoline(" UtcDaliVideoViewDownCast");
117
118   Toolkit::VideoView view = Toolkit::VideoView::New();
119   BaseHandle handle(view);
120
121   Toolkit::VideoView view2 = Toolkit::VideoView::DownCast( handle );
122   DALI_TEST_CHECK( view );
123   DALI_TEST_CHECK( view2 );
124   DALI_TEST_CHECK( view == view2 );
125   END_TEST;
126 }
127
128 // Positive test case for a method
129 int UtcDaliVideoViewProperty1(void)
130 {
131   ToolkitTestApplication application;
132   tet_infoline(" UtcDaliVideoViewProperty1");
133
134   Toolkit::VideoView view = Toolkit::VideoView::New();
135   DALI_TEST_CHECK( view );
136
137   std::string file;
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 );
142   END_TEST;
143 }
144
145 // Positive test case for a method
146 int UtcDaliVideoViewProperty1b(void)
147 {
148   ToolkitTestApplication application;
149   tet_infoline(" UtcDaliVideoViewProperty1");
150
151   Toolkit::VideoView view = Toolkit::VideoView::New();
152   DALI_TEST_CHECK( view );
153   Stage stage = Stage::GetCurrent();
154
155   std::string file;
156   Property::Map map;
157
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" )
162                     .Add("width", 100)
163                     .Add("height", 100) );
164
165   stage.Add( view );
166
167   Property::Value val = view.GetProperty( VideoView::Property::VIDEO );
168   Property::Map* resultMap = val.GetMap();
169
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 );
174
175   stage.Remove( view );
176
177   END_TEST;
178 }
179
180 int UtcDaliVideoViewProperty2(void)
181 {
182   ToolkitTestApplication application;
183   tet_infoline(" UtcDaliVideoViewProperty2");
184
185   Toolkit::VideoView view = Toolkit::VideoView::New();
186   DALI_TEST_CHECK( view );
187
188   bool looping;
189   Property::Value val = view.GetProperty( VideoView::Property::LOOPING );
190   DALI_TEST_CHECK( val.Get( looping ) );
191   DALI_TEST_CHECK( !looping );
192
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 );
197   END_TEST;
198 }
199
200 int UtcDaliVideoViewProperty3(void)
201 {
202   ToolkitTestApplication application;
203   tet_infoline(" UtcDaliVideoViewProperty3");
204
205   Toolkit::VideoView view = Toolkit::VideoView::New();
206   DALI_TEST_CHECK( view );
207
208   bool muted;
209   Property::Value val = view.GetProperty( VideoView::Property::MUTED );
210   DALI_TEST_CHECK( val.Get( muted ) );
211   DALI_TEST_CHECK( !muted );
212
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 );
217
218   END_TEST;
219 }
220
221 int UtcDaliVideoViewProperty4(void)
222 {
223   ToolkitTestApplication application;
224   tet_infoline(" UtcDaliVideoViewProperty4");
225
226   Toolkit::VideoView view = Toolkit::VideoView::New();
227   DALI_TEST_CHECK( view );
228
229   float left, right;
230   left = right = 0.f;
231
232   Property::Map map;
233   map.Insert( VOLUME_LEFT, 0.5f );
234   map.Insert( VOLUME_RIGHT, 0.5f );
235
236   view.SetProperty( VideoView::Property::VOLUME, map );
237   Property::Value val = view.GetProperty( VideoView::Property::VOLUME );
238
239   Property::Map map2;
240   DALI_TEST_CHECK( val.Get( map2 ) );
241
242   Property::Value* volumeLeft = map2.Find( VOLUME_LEFT );
243   Property::Value* volumeRight = map2.Find( VOLUME_RIGHT );
244
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 );
249
250   END_TEST;
251 }
252
253 int UtcDaliVideoViewCopyAndAssignment(void)
254 {
255   ToolkitTestApplication application;
256
257   VideoView view = Toolkit::VideoView::New();
258   DALI_TEST_CHECK( view );
259
260   VideoView copy( view );
261   DALI_TEST_CHECK( view == copy );
262
263   VideoView assign;
264   DALI_TEST_CHECK( !assign );
265
266   assign = copy;
267   DALI_TEST_CHECK( assign == view );
268
269   END_TEST;
270 }
271
272 int UtcDaliVideoViewTypeRegistry(void)
273 {
274   ToolkitTestApplication application;
275
276   TypeRegistry typeRegistry = TypeRegistry::Get();
277   DALI_TEST_CHECK( typeRegistry );
278
279   TypeInfo typeInfo = typeRegistry.GetTypeInfo( "VideoView" );
280   DALI_TEST_CHECK( typeInfo );
281
282   BaseHandle handle = typeInfo.CreateInstance();
283   DALI_TEST_CHECK( handle );
284
285   VideoView view = VideoView::DownCast( handle );
286   DALI_TEST_CHECK( view );
287
288   END_TEST;
289 }
290
291 int UtcDaliVideoViewMethodsForCoverage(void)
292 {
293   ToolkitTestApplication application;
294
295   VideoView videoView = VideoView::New();
296   DALI_TEST_CHECK( videoView );
297
298   videoView.Play();
299   videoView.Pause();
300   videoView.Stop();
301   videoView.Forward(10);
302   videoView.Backward(10);
303   VideoView::VideoViewSignalType& signal = videoView.FinishedSignal();
304   DALI_TEST_EQUALS( 0, signal.GetConnectionCount(), TEST_LOCATION );
305
306   END_TEST;
307 }
308
309 int UtcDaliVideoViewMethodsForRenderType(void)
310 {
311   ToolkitTestApplication application;
312   VideoView videoView = VideoView::New();
313   DALI_TEST_CHECK( videoView );
314
315   Property::Map windowSurfaceTarget;
316   Property::Map nativeImageTarget;
317
318   windowSurfaceTarget.Insert( RENDERING_TYPE, "windowSurfaceTarget" );
319   nativeImageTarget.Insert( RENDERING_TYPE, "nativeImageTarget" );
320
321   Property::Map map;
322   Property::Value value;
323   videoView.SetProperty( VideoView::Property::VIDEO, windowSurfaceTarget );
324
325   value = videoView.GetProperty( VideoView::Property::VIDEO );
326   DALI_TEST_CHECK( value.Get( map ) );
327
328   Property::Value* type = map.Find( RENDERING_TYPE );
329   DALI_TEST_CHECK( type );
330   DALI_TEST_EQUALS( "windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION );
331
332   videoView.SetProperty( VideoView::Property::VIDEO, nativeImageTarget );
333
334   value = videoView.GetProperty( VideoView::Property::VIDEO );
335   DALI_TEST_CHECK( value.Get( map ) );
336   type = map.Find( RENDERING_TYPE );
337
338   DALI_TEST_CHECK( type );
339   DALI_TEST_EQUALS( "nativeImageTarget", type->Get<std::string>(), TEST_LOCATION );
340
341   END_TEST;
342 }
343
344 int UtcDaliVideoViewCustomShaderForCoverage(void)
345 {
346   ToolkitTestApplication application;
347   VideoView videoView = VideoView::New();
348   DALI_TEST_CHECK( videoView );
349
350   Stage::GetCurrent().Add( videoView );
351   videoView.SetProperty( VideoView::Property::VIDEO, "testvideo" );
352
353   Property::Map customShader;
354   customShader.Insert( "vertexShader", VERTEX_SHADER );
355   customShader.Insert( "fragmentShader", FRAGMENT_SHADER );
356
357   Property::Map map;
358   map.Insert( "shader", customShader );
359
360   videoView.SetProperty( VideoView::Property::VIDEO, map );
361
362   Property::Map map2;
363   Property::Value value = videoView.GetProperty( VideoView::Property::VIDEO );
364
365   DALI_TEST_CHECK( !value.Get( map2 ) );
366   END_TEST;
367 }
368
369 int UtcDaliVideoViewMethodsForCoverage2(void)
370 {
371   ToolkitTestApplication application;
372   VideoView videoView = VideoView::New();
373   DALI_TEST_CHECK( videoView );
374
375   Property::Map windowSurfaceTarget;
376
377   windowSurfaceTarget.Insert( RENDERING_TYPE, "windowSurfaceTarget" );
378
379   Stage::GetCurrent().Add( videoView );
380
381   application.SendNotification();
382   application.Render();
383
384   Property::Map map;
385   Property::Value value;
386   videoView.SetProperty( VideoView::Property::VIDEO, windowSurfaceTarget );
387
388   value = videoView.GetProperty( VideoView::Property::VIDEO );
389   DALI_TEST_CHECK( value.Get( map ) );
390
391   Property::Value* type = map.Find( RENDERING_TYPE );
392   DALI_TEST_CHECK( type );
393   DALI_TEST_EQUALS( "windowSurfaceTarget", type->Get<std::string>(), TEST_LOCATION );
394
395   Vector3 vector(100.0f, 100.0f, 0.0f);
396
397   DALI_TEST_CHECK(vector != videoView.GetCurrentSize());
398   videoView.SetSize( vector );
399
400   application.SendNotification();
401   application.Render();
402
403   // Check the size in the new frame
404   DALI_TEST_CHECK(vector == videoView.GetCurrentSize());
405
406   END_TEST;
407 }
408
409 int UtcDaliVideoViewPropertyUnderlay(void)
410 {
411   ToolkitTestApplication application;
412   ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
413
414   VideoView view = VideoView::New();
415   DALI_TEST_CHECK( view );
416
417   Stage::GetCurrent().Add( view );
418   view.Play();
419
420   application.SendNotification();
421   application.Render();
422
423   bool isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
424   DALI_TEST_CHECK( isUnderlay );
425
426   view.Play();
427   view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
428   isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
429   DALI_TEST_CHECK( !isUnderlay );
430
431   view.Play();
432   view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, true );
433   isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
434   DALI_TEST_CHECK( isUnderlay );
435
436   // If platform api doesn't provide any API or feature for decoded images of video,
437   // UNDERLAY should be true
438   ToolkitApplication::DECODED_IMAGES_SUPPORTED = false;
439
440   view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
441   isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
442   DALI_TEST_CHECK( isUnderlay );
443
444   // For coverage
445   ToolkitApplication::DECODED_IMAGES_SUPPORTED = true;
446
447   view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, true );
448   view.SetProperty( Toolkit::VideoView::Property::UNDERLAY, false );
449   isUnderlay = view.GetProperty( Toolkit::VideoView::Property::UNDERLAY ).Get< bool >();
450   DALI_TEST_CHECK( !isUnderlay );
451
452   view.Stop();
453
454   END_TEST;
455 }