Merge "Removed unnecessary try-catch from Control base class" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Visuals-internal.cpp
1 /*
2  * Copyright (c) 2018 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
20 #include <stdlib.h>
21
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <toolkit-text-utils.h>
25 #include <toolkit-event-thread-callback.h>
26 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
27 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
28 #include <dali-toolkit/internal/visuals/color/color-visual.h>
29 #include <dali-toolkit/internal/visuals/npatch-loader.h>
30 #include <dummy-visual.h>
31 #include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
32
33 using namespace Dali;
34 using namespace Toolkit;
35
36 namespace
37 {
38
39 const char* TEST_VECTOR_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR  "/insta_camera.json";
40
41 }
42
43 int UtcDaliVisualAction(void)
44 {
45   ToolkitTestApplication application;
46   tet_infoline( "Register an ImageVisual and and perform an Action on Visual directly" );
47   Vector2 controlSize( 20.f, 30.f );
48
49   //Created DummyVisual
50   Property::Map settings;
51   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
52
53   DummyControl dummyControl = DummyControl::New( true );
54   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
55
56   tet_infoline( "Register visual and stage control" );
57
58   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( dummyVisualPtr.Get() );
59   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
60   dummyControl.SetSize(200.f, 200.f);
61   Stage::GetCurrent().Add( dummyControl );
62
63   application.SendNotification();
64   application.Render();
65
66   tet_infoline( "Check action counter is 0 before DoAction" );
67   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
68
69   tet_infoline( "Perform TEST_ACTION action on Visual. Should increase the action counter" );
70
71   Property::Map attributes;
72   Toolkit::Internal::Visual::Base& internalVisualBase =  GetImplementation( visualBaseHandle );
73   internalVisualBase.DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
74   application.SendNotification();
75   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 1, TEST_LOCATION );
76
77   END_TEST;
78 }
79
80 int UtcDaliVisualActionNotImplemented(void)
81 {
82   ToolkitTestApplication application;
83   tet_infoline( "Register an ImageVisual and and perform an Action on a Visual which does not support any Actions" );
84   Vector2 controlSize( 20.f, 30.f );
85
86   //Created DummyVisual
87   Property::Map settings;
88   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New( settings );
89
90   DummyControl dummyControl = DummyControl::New( true );
91   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
92
93   tet_infoline( "Register visual and stage control" );
94
95   VisualFactory factory = VisualFactory::Get();
96   Property::Map propertyMap;
97   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
98   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
99   Visual::Base visual = factory.CreateVisual( propertyMap );
100
101   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
102   dummyControl.SetSize(200.f, 200.f);
103   Stage::GetCurrent().Add( dummyControl );
104
105   application.SendNotification();
106   application.Render();
107
108   tet_infoline( "Check action counter is 0 before DoAction" );
109   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
110
111   tet_infoline( "Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter" );
112   Property::Map attributes;
113   GetImplementation( visual ).DoAction( Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes );
114   application.SendNotification();
115   DALI_TEST_EQUALS( dummyVisualPtr->GetActionCounter() , 0, TEST_LOCATION );
116
117   END_TEST;
118 }
119
120 int UtcDaliVisualSetProperties(void)
121 {
122   ToolkitTestApplication application;
123   tet_infoline( "Register a visual and SetProperties" );
124
125   Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
126
127   //Created ColorVisual
128   Property::Map propertyMap1;
129   propertyMap1.Insert(Visual::Property::TYPE,  Visual::COLOR);
130   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::RED);
131   Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New( *factoryCache, propertyMap1 );
132
133   DummyControl dummyControl = DummyControl::New( true );
134   Impl::DummyControl& dummyImpl = static_cast< Impl::DummyControl& >( dummyControl.GetImplementation() );
135
136   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base( colorVisualPtr.Get() );
137   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visualBaseHandle );
138   dummyControl.SetSize( 200.f, 200.f );
139   Stage::GetCurrent().Add( dummyControl );
140
141   application.SendNotification();
142   application.Render();
143
144   Property::Map propertyMap;
145   propertyMap.Insert( Visual::Property::MIX_COLOR,  Color::BLUE );
146
147   colorVisualPtr->SetProperties( propertyMap );
148   application.SendNotification();
149   application.Render();
150
151   Property::Map resultMap;
152   visualBaseHandle.CreatePropertyMap( resultMap );
153
154   Property::Value* colorValue = resultMap.Find( Visual::Property::MIX_COLOR,  Property::VECTOR4 );
155   DALI_TEST_CHECK( colorValue );
156   DALI_TEST_CHECK( colorValue->Get< Vector4 >() == Color::BLUE );
157
158   delete factoryCache;
159
160   END_TEST;
161 }
162
163 int UtcDaliNPatchBufferGetRedOffsetAndMask(void)
164 {
165   TestApplication application;
166
167   tet_infoline("UtcDaliNPatchBufferGetRedOffsetAndMask");
168
169   int byteOffset = 0;
170   int bitMask = 0;
171
172   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::A8, byteOffset, bitMask );
173   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
174   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::L8, byteOffset, bitMask );
175   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
176   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::LA88, byteOffset, bitMask );
177   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
178
179   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB888, byteOffset, bitMask );
180   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xff );
181   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB8888, byteOffset, bitMask );
182   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xff );
183   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGBA8888, byteOffset, bitMask );
184   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xff );
185
186   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGR8888, byteOffset, bitMask );
187   DALI_TEST_CHECK( byteOffset == 2 && bitMask == 0xff );
188   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGRA8888, byteOffset, bitMask );
189   DALI_TEST_CHECK( byteOffset == 2 && bitMask == 0xff );
190
191   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB565, byteOffset, bitMask );
192   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xf8 );
193
194   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGR565, byteOffset, bitMask );
195   DALI_TEST_CHECK( byteOffset == 1 && bitMask == 0x1f );
196
197   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGBA4444, byteOffset, bitMask );
198   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xf0 );
199
200   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGRA4444, byteOffset, bitMask );
201   DALI_TEST_CHECK( byteOffset == 1 && bitMask == 0xf0 );
202
203   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGBA5551, byteOffset, bitMask );
204   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0xf8 );
205
206   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::BGRA5551, byteOffset, bitMask );
207   DALI_TEST_CHECK( byteOffset == 1 && bitMask == 0x1e );
208
209   // Compressed formats are not supported
210   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::INVALID, byteOffset, bitMask );
211   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
212   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_R11_EAC, byteOffset, bitMask );
213   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
214   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SIGNED_R11_EAC, byteOffset, bitMask );
215   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
216   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RG11_EAC, byteOffset, bitMask );
217   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
218   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SIGNED_RG11_EAC, byteOffset, bitMask );
219   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
220   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB8_ETC2, byteOffset, bitMask );
221   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
222   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ETC2, byteOffset, bitMask );
223   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
224   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB8_ETC1, byteOffset, bitMask );
225   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
226   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB_PVRTC_4BPPV1, byteOffset, bitMask );
227   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
228   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2, byteOffset, bitMask );
229   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
230   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, byteOffset, bitMask );
231   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
232   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA8_ETC2_EAC, byteOffset, bitMask );
233   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
234   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ETC2_EAC, byteOffset, bitMask );
235   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
236   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_4x4_KHR, byteOffset, bitMask );
237   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
238   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_5x4_KHR, byteOffset, bitMask );
239   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
240   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_5x5_KHR, byteOffset, bitMask );
241   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
242   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_6x5_KHR, byteOffset, bitMask );
243   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
244   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_6x6_KHR, byteOffset, bitMask );
245   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
246   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_8x5_KHR, byteOffset, bitMask );
247   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
248   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_8x6_KHR, byteOffset, bitMask );
249   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
250   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_8x8_KHR, byteOffset, bitMask );
251   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
252   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x5_KHR, byteOffset, bitMask );
253   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
254   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x6_KHR, byteOffset, bitMask );
255   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
256   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x8_KHR, byteOffset, bitMask );
257   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
258   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_10x10_KHR, byteOffset, bitMask );
259   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
260   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_12x10_KHR, byteOffset, bitMask );
261   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
262   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_RGBA_ASTC_12x12_KHR, byteOffset, bitMask );
263   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
264   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, byteOffset, bitMask );
265   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
266   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, byteOffset, bitMask );
267   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
268   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, byteOffset, bitMask );
269   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
270   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, byteOffset, bitMask );
271   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
272   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, byteOffset, bitMask );
273   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
274   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, byteOffset, bitMask );
275   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
276   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, byteOffset, bitMask );
277   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
278   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, byteOffset, bitMask );
279   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
280   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, byteOffset, bitMask );
281   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
282   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, byteOffset, bitMask );
283   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
284   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, byteOffset, bitMask );
285   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
286   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, byteOffset, bitMask );
287   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
288   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, byteOffset, bitMask );
289   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
290   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, byteOffset, bitMask );
291   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
292
293   // Not supported
294   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB16F, byteOffset, bitMask );
295   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
296   Toolkit::Internal::NPatchBuffer::GetRedOffsetAndMask( Pixel::RGB32F, byteOffset, bitMask );
297   DALI_TEST_CHECK( byteOffset == 0 && bitMask == 0 );
298
299   END_TEST;
300 }
301
302 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
303 {
304   ToolkitTestApplication application;
305   tet_infoline( "UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap" );
306
307   Property::Map propertyMap;
308   propertyMap.Add( Toolkit::Visual::Property::TYPE,  DevelVisual::ANIMATED_VECTOR_IMAGE )
309              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  );
310
311   // request AnimatedVectorImageVisual with a property map
312   VisualFactory factory = VisualFactory::Get();
313   Visual::Base visual = factory.CreateVisual( propertyMap );
314   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
315
316   Property::Map resultMap;
317   visualImpl.CreateInstancePropertyMap( resultMap );
318
319   // check the property values from the returned map from a visual
320   DALI_TEST_CHECK( resultMap.Empty() );   // Now the map is empty
321
322   END_TEST;
323 }
324
325 int UtcDaliAnimatedVectorImageVisualSetProperties(void)
326 {
327   ToolkitTestApplication application;
328   tet_infoline( "UtcDaliAnimatedVectorImageVisualSetProperties" );
329
330   Property::Map propertyMap;
331   propertyMap.Add( Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE )
332              .Add( ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME  )
333              .Add( DevelImageVisual::Property::LOOP_COUNT, 3  )
334              .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.2f, 0.8f )  );
335
336   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
337   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( visual );
338   DALI_TEST_CHECK( visual );
339
340   DummyControl actor = DummyControl::New( true );
341   DummyControlImpl& dummyImpl = static_cast< DummyControlImpl& >( actor.GetImplementation() );
342   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
343   actor.SetSize( 200.0f, 200.0f );
344   Stage::GetCurrent().Add( actor );
345
346   application.SendNotification();
347   application.Render();
348
349   // Wait for resource ready event callback
350   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
351
352   // renderer is added to actor
353   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
354   Renderer renderer = actor.GetRendererAt( 0u );
355   DALI_TEST_CHECK( renderer );
356
357   Property::Map propertyMap1;
358   propertyMap1.Add( DevelImageVisual::Property::LOOP_COUNT, 1  )
359               .Add( DevelImageVisual::Property::PLAY_RANGE, Vector2( 0.4f, 0.6f )  );
360
361   visualImpl.SetProperties( propertyMap1 );
362
363   application.SendNotification();
364   application.Render();
365
366   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
367   renderer = actor.GetRendererAt( 0u );
368   DALI_TEST_CHECK( renderer );
369
370   actor.Unparent( );
371   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
372
373   END_TEST;
374 }