2 * Copyright (c) 2022 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.
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <toolkit-timer.h>
25 #include <toolkit-vector-animation-renderer.h>
26 #include "dummy-control.h"
28 #include <dali-toolkit/dali-toolkit.h>
30 #include <dali-toolkit/devel-api/controls/control-devel.h>
31 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
32 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-actions-devel.h>
33 #include <dali-toolkit/devel-api/visuals/animated-vector-image-visual-signals-devel.h>
34 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
35 #include <dali-toolkit/devel-api/visuals/visual-actions-devel.h>
36 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
37 #include <dali/devel-api/adaptor-framework/window-devel.h>
38 #include <dali/devel-api/rendering/renderer-devel.h>
41 using namespace Dali::Toolkit;
43 void dali_animated_vector_image_visual_startup(void)
45 test_return_value = TET_UNDEF;
48 void dali_animated_vector_image_visual_cleanup(void)
50 test_return_value = TET_PASS;
55 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
56 const char* TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP = "framedrop.json";
57 const char* TEST_VECTOR_IMAGE_INVALID_FILE_NAME = "invalid.json";
59 bool gAnimationFinishedSignalFired = false;
61 void VisualEventSignal(Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId)
63 if(visualIndex == DummyControl::Property::TEST_VISUAL && signalId == DevelAnimatedVectorImageVisual::Signal::ANIMATION_FINISHED)
65 gAnimationFinishedSignalFired = true;
71 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual01(void)
73 ToolkitTestApplication application;
74 tet_infoline("UtcDaliVisualFactoryGetAnimatedVectorImageVisual01: Request animated vector image visual with a json url");
76 VisualFactory factory = VisualFactory::Get();
77 Visual::Base visual = factory.CreateVisual(TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions());
78 DALI_TEST_CHECK(visual);
80 DummyControl actor = DummyControl::New(true);
81 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
82 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
83 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
84 application.GetScene().Add(actor);
86 application.SendNotification();
89 // Trigger count is 2 - load & render a frame
90 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
92 // renderer is added to actor
93 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
94 Renderer renderer = actor.GetRendererAt(0u);
95 DALI_TEST_CHECK(renderer);
97 // Test SetOffScene().
99 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
104 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual02(void)
106 ToolkitTestApplication application;
107 tet_infoline("UtcDaliVisualFactoryGetAnimatedVectorImageVisual02: Request animated vector image visual with a Property::Map");
109 Property::Map propertyMap;
110 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
111 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
113 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
114 DALI_TEST_CHECK(visual);
116 DummyControl actor = DummyControl::New(true);
117 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
118 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
119 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
120 application.GetScene().Add(actor);
122 application.SendNotification();
123 application.Render();
125 // Trigger count is 2 - load & render a frame
126 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
128 // renderer is added to actor
129 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
130 Renderer renderer = actor.GetRendererAt(0u);
131 DALI_TEST_CHECK(renderer);
134 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
139 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual03(void)
141 ToolkitTestApplication application;
142 tet_infoline("UtcDaliVisualFactoryGetAnimatedVectorImageVisual03: Request animated vector image visual with a Property::Map");
144 int startFrame = 1, endFrame = 3;
145 Property::Array playRange;
146 playRange.PushBack(startFrame);
147 playRange.PushBack(endFrame);
149 Property::Map propertyMap;
150 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
151 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
152 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
153 .Add(DevelImageVisual::Property::PLAY_RANGE, playRange)
154 .Add(DevelVisual::Property::CORNER_RADIUS, 50.0f)
155 .Add(DevelVisual::Property::BORDERLINE_WIDTH, 20.0f);
157 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
158 DALI_TEST_CHECK(visual);
160 DummyControl actor = DummyControl::New(true);
161 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
162 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
163 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
164 application.GetScene().Add(actor);
166 application.SendNotification();
167 application.Render();
169 // Trigger count is 2 - load & render a frame
170 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
172 // renderer is added to actor
173 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
174 Renderer renderer = actor.GetRendererAt(0u);
175 DALI_TEST_CHECK(renderer);
178 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
183 int UtcDaliVisualFactoryGetAnimatedVectorImageVisual04(void)
185 ToolkitTestApplication application;
186 tet_infoline("UtcDaliVisualFactoryGetAnimatedVectorImageVisual04: Request animated vector image visual with a Property::Map");
188 int startFrame = 1, endFrame = 3;
189 float cornerRadius = 22.0f;
190 float borderlineWidth = 2.0f;
191 Vector4 borderlineColor = Vector4(1.0f, 1.0f, 1.0f, 1.0f);
192 float borderlineOffset = 0.1f;
193 Property::Array playRange;
194 playRange.PushBack(startFrame);
195 playRange.PushBack(endFrame);
197 Property::Map propertyMap;
198 propertyMap.Add("visualType", DevelVisual::ANIMATED_VECTOR_IMAGE)
199 .Add("url", TEST_VECTOR_IMAGE_FILE_NAME)
201 .Add("playRange", playRange)
202 .Add("stopBehavior", DevelImageVisual::StopBehavior::FIRST_FRAME)
203 .Add("loopingMode", DevelImageVisual::LoopingMode::AUTO_REVERSE)
204 .Add("redrawInScalingDown", false)
205 .Add("cornerRadius", cornerRadius)
206 .Add("borderlineWidth", borderlineWidth)
207 .Add("borderlineColor", borderlineColor)
208 .Add("borderlineOffset", borderlineOffset);
210 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
211 DALI_TEST_CHECK(visual);
213 DummyControl actor = DummyControl::New(true);
214 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
215 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
216 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
217 application.GetScene().Add(actor);
219 application.SendNotification();
220 application.Render();
222 // Trigger count is 2 - load & render a frame
223 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
225 // renderer is added to actor
226 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
228 Renderer renderer = actor.GetRendererAt(0u);
229 DALI_TEST_CHECK(renderer);
231 Property::Map resultMap;
232 visual.CreatePropertyMap(resultMap);
234 // check the property values from the returned map from a visual
235 Property::Value* value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
236 DALI_TEST_CHECK(value);
237 DALI_TEST_CHECK(value->Get<std::string>() == TEST_VECTOR_IMAGE_FILE_NAME);
239 value = resultMap.Find(DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER);
240 DALI_TEST_CHECK(value);
241 DALI_TEST_CHECK(value->Get<int>() == 3);
243 value = resultMap.Find(DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY);
244 DALI_TEST_CHECK(value);
246 Property::Array* result = value->GetArray();
247 DALI_TEST_CHECK(result);
249 DALI_TEST_CHECK(result->GetElementAt(0).Get<int>() == startFrame);
250 DALI_TEST_CHECK(result->GetElementAt(1).Get<int>() == endFrame);
252 value = resultMap.Find(DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER);
253 DALI_TEST_CHECK(value);
254 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::StopBehavior::FIRST_FRAME);
256 value = resultMap.Find(DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER);
257 DALI_TEST_CHECK(value);
258 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::LoopingMode::AUTO_REVERSE);
260 value = resultMap.Find(DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN);
261 DALI_TEST_CHECK(value);
262 DALI_TEST_CHECK(value->Get<bool>() == false);
264 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
265 DALI_TEST_CHECK(value);
266 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius), TEST_LOCATION);
268 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy");
269 DALI_TEST_CHECK(value);
270 DALI_TEST_CHECK(value->Get<int>() == Visual::Transform::Policy::ABSOLUTE);
272 value = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
273 DALI_TEST_CHECK(value);
274 DALI_TEST_EQUALS(value->Get<float>(), borderlineWidth, TEST_LOCATION);
276 value = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
277 DALI_TEST_CHECK(value);
278 DALI_TEST_EQUALS(value->Get<Vector4>(), borderlineColor, TEST_LOCATION);
280 value = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
281 DALI_TEST_CHECK(value);
282 DALI_TEST_EQUALS(value->Get<float>(), borderlineOffset, TEST_LOCATION);
285 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
290 int UtcDaliAnimatedVectorImageVisualGetPropertyMap01(void)
292 ToolkitTestApplication application;
293 tet_infoline("UtcDaliAnimatedVectorImageVisualGetPropertyMap01");
295 int startFrame = 1, endFrame = 3;
296 Vector4 cornerRadius(50.0f, 22.0f, 0.0f, 3.0f);
297 float borderlineWidth = 2.3f;
298 Vector4 borderlineColor = Vector4(0.3f, 0.3f, 1.0f, 1.0f);
299 float borderlineOffset = 0.3f;
300 Property::Array playRange;
301 playRange.PushBack(startFrame);
302 playRange.PushBack(endFrame);
304 Property::Map propertyMap;
305 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
306 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
307 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
308 .Add(DevelImageVisual::Property::PLAY_RANGE, playRange)
309 .Add(DevelVisual::Property::CORNER_RADIUS, cornerRadius)
310 .Add(DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::RELATIVE)
311 .Add(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth)
312 .Add(DevelVisual::Property::BORDERLINE_COLOR, borderlineColor)
313 .Add(DevelVisual::Property::BORDERLINE_OFFSET, borderlineOffset);
315 // request AnimatedVectorImageVisual with a property map
316 VisualFactory factory = VisualFactory::Get();
317 Visual::Base visual = factory.CreateVisual(propertyMap);
319 DummyControl actor = DummyControl::New(true);
320 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
321 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
323 Vector2 controlSize(20.f, 30.f);
324 actor.SetProperty(Actor::Property::SIZE, controlSize);
326 application.GetScene().Add(actor);
328 application.SendNotification();
329 application.Render();
331 // Trigger count is 2 - load & render a frame
332 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
334 Property::Map resultMap;
335 resultMap = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
337 // check the property values from the returned map from a visual
338 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
339 DALI_TEST_CHECK(value);
340 DALI_TEST_CHECK(value->Get<int>() == DevelVisual::ANIMATED_VECTOR_IMAGE);
342 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
343 DALI_TEST_CHECK(value);
344 DALI_TEST_CHECK(value->Get<std::string>() == TEST_VECTOR_IMAGE_FILE_NAME);
346 value = resultMap.Find(DevelImageVisual::Property::LOOP_COUNT, Property::INTEGER);
347 DALI_TEST_CHECK(value);
348 DALI_TEST_CHECK(value->Get<int>() == 3);
350 value = resultMap.Find(DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY);
351 DALI_TEST_CHECK(value);
353 Property::Array* result = value->GetArray();
354 DALI_TEST_CHECK(result);
356 DALI_TEST_CHECK(result->GetElementAt(0).Get<int>() == startFrame);
357 DALI_TEST_CHECK(result->GetElementAt(1).Get<int>() == endFrame);
359 value = resultMap.Find(DevelImageVisual::Property::STOP_BEHAVIOR, Property::INTEGER);
360 DALI_TEST_CHECK(value);
361 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::StopBehavior::CURRENT_FRAME);
363 value = resultMap.Find(DevelImageVisual::Property::LOOPING_MODE, Property::INTEGER);
364 DALI_TEST_CHECK(value);
365 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::LoopingMode::RESTART);
367 value = resultMap.Find(DevelImageVisual::Property::CONTENT_INFO, Property::MAP);
368 DALI_TEST_CHECK(value);
370 value = resultMap.Find(DevelImageVisual::Property::REDRAW_IN_SCALING_DOWN, Property::BOOLEAN);
371 DALI_TEST_CHECK(value);
372 DALI_TEST_CHECK(value->Get<bool>() == true); // Check default value
374 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
375 DALI_TEST_CHECK(value);
376 DALI_TEST_EQUALS(value->Get<Vector4>(), cornerRadius, TEST_LOCATION);
378 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, "cornerRadiusPolicy");
379 DALI_TEST_CHECK(value);
380 DALI_TEST_CHECK(value->Get<int>() == Visual::Transform::Policy::RELATIVE);
382 value = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, "borderlineWidth");
383 DALI_TEST_CHECK(value);
384 DALI_TEST_EQUALS(value->Get<float>(), borderlineWidth, TEST_LOCATION);
386 value = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
387 DALI_TEST_CHECK(value);
388 DALI_TEST_EQUALS(value->Get<Vector4>(), borderlineColor, TEST_LOCATION);
390 value = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
391 DALI_TEST_CHECK(value);
392 DALI_TEST_EQUALS(value->Get<float>(), borderlineOffset, TEST_LOCATION);
394 // request AnimatedVectorImageVisual with an URL
395 Visual::Base visual2 = factory.CreateVisual(TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions());
398 visual2.CreatePropertyMap(resultMap);
400 // check the property values from the returned map from a visual
401 value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
402 DALI_TEST_CHECK(value);
403 DALI_TEST_CHECK(value->Get<int>() == DevelVisual::ANIMATED_VECTOR_IMAGE);
405 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
406 DALI_TEST_CHECK(value);
407 DALI_TEST_CHECK(value->Get<std::string>() == TEST_VECTOR_IMAGE_FILE_NAME);
412 int UtcDaliAnimatedVectorImageVisualPlayback(void)
414 ToolkitTestApplication application;
416 tet_infoline("UtcDaliAnimatedVectorImageVisualPlayback");
419 // request AnimatedVectorImageVisual with a property map
420 VisualFactory factory = VisualFactory::Get();
421 Visual::Base visual = factory.CreateVisual(
423 .Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
424 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME));
426 DummyControl dummyControl = DummyControl::New(true);
427 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
428 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
429 dummyControl.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
431 Property::Map attributes;
432 tet_infoline("Test Play action");
433 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
435 application.GetScene().Add(dummyControl);
436 application.SendNotification();
437 application.Render(16);
439 Property::Map map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
440 Property::Value* value = map.Find(DevelImageVisual::Property::PLAY_STATE);
441 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::PLAYING);
443 tet_infoline("Test Pause action");
444 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes);
446 application.SendNotification();
447 application.Render(16);
449 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
450 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
451 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::PAUSED);
453 tet_infoline("Test Play action");
454 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
456 application.SendNotification();
457 application.Render(16);
459 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
460 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
461 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::PLAYING);
463 tet_infoline("Test Stop action");
464 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes);
466 application.SendNotification();
467 application.Render(16);
469 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
470 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
471 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::STOPPED);
473 tet_infoline("Test Stop action again");
474 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes);
476 application.SendNotification();
477 application.Render(16);
479 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
480 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
481 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::STOPPED);
483 tet_infoline("Test Play action");
484 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
486 application.SendNotification();
487 application.Render(16);
489 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
490 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
491 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::PLAYING);
493 tet_infoline("Off stage");
494 dummyControl.Unparent();
496 application.SendNotification();
497 application.Render(16);
499 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
500 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
501 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::STOPPED);
503 tet_infoline("On stage again");
504 application.GetScene().Add(dummyControl);
506 application.SendNotification();
507 application.Render(16);
509 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
510 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
511 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::STOPPED);
513 tet_infoline("Test Play action");
514 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
516 application.SendNotification();
517 application.Render(16);
519 map = dummyControl.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
520 value = map.Find(DevelImageVisual::Property::PLAY_STATE);
521 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::PLAYING);
524 Vector3 newSize(100.0f, 100.0f, 0.0f);
525 dummyControl.SetProperty(Actor::Property::SIZE, newSize);
527 application.SendNotification();
528 application.Render(16);
530 // Size should be changed
531 Vector3 naturalSize = dummyControl.GetNaturalSize();
532 DALI_TEST_CHECK(naturalSize == newSize);
534 dummyControl.Unparent();
540 int UtcDaliAnimatedVectorImageVisualCustomShader(void)
542 ToolkitTestApplication application;
543 tet_infoline("UtcDaliAnimatedVectorImageVisualCustomShader Test custom shader");
545 VisualFactory factory = VisualFactory::Get();
546 Property::Map properties;
547 Property::Map shader;
548 const std::string vertexShader = "Foobar";
549 const std::string fragmentShader = "Foobar sampler2D Foobar";
550 shader[Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
551 shader[Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
553 properties[Visual::Property::TYPE] = Visual::IMAGE;
554 properties[Visual::Property::SHADER] = shader;
555 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
557 Visual::Base visual = factory.CreateVisual(properties);
559 // trigger creation through setting on stage
560 DummyControl dummy = DummyControl::New(true);
561 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
562 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
564 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
565 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
566 application.GetScene().Add(dummy);
568 application.SendNotification();
569 application.Render();
571 // Trigger count is 2 - load & render a frame
572 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
574 Renderer renderer = dummy.GetRendererAt(0);
575 Shader shader2 = renderer.GetShader();
576 Property::Value value = shader2.GetProperty(Shader::Property::PROGRAM);
577 Property::Map* map = value.GetMap();
578 DALI_TEST_CHECK(map);
580 std::string resultFragmentShader, resultVertexShader;
581 Property::Value* fragment = map->Find("fragment"); // fragment key name from shader-impl.cpp
582 fragment->Get(resultFragmentShader);
583 DALI_TEST_CHECK(resultFragmentShader.find(fragmentShader) != std::string::npos);
585 Property::Value* vertex = map->Find("vertex"); // vertex key name from shader-impl.cpp
586 vertex->Get(resultVertexShader);
587 DALI_TEST_CHECK(resultVertexShader.find(vertexShader) != std::string::npos);
592 int UtcDaliAnimatedVectorImageVisualNaturalSize(void)
594 ToolkitTestApplication application;
595 tet_infoline("UtcDaliAnimatedVectorImageVisualNaturalSize");
597 VisualFactory factory = VisualFactory::Get();
598 Visual::Base visual = factory.CreateVisual(TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions());
599 DALI_TEST_CHECK(visual);
601 DummyControl actor = DummyControl::New(true);
602 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
603 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
605 Vector2 controlSize(20.f, 30.f);
608 application.GetScene().Add(actor);
610 application.SendNotification();
611 application.Render();
613 // Trigger count is 1 - load
614 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
616 visual.GetNaturalSize(naturalSize);
618 DALI_TEST_EQUALS(naturalSize, Vector2(100.0f, 100.0f), TEST_LOCATION); // 100x100 is the content default size.
620 actor.SetProperty(Actor::Property::SIZE, controlSize);
622 application.SendNotification();
623 application.Render();
625 visual.GetNaturalSize(naturalSize);
627 DALI_TEST_EQUALS(naturalSize, controlSize, TEST_LOCATION);
632 int UtcDaliAnimatedVectorImageVisualLoopCount(void)
634 ToolkitTestApplication application;
635 tet_infoline("UtcDaliAnimatedVectorImageVisualLoopCount");
637 Property::Map propertyMap;
638 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
639 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
640 .Add(DevelImageVisual::Property::LOOP_COUNT, 3);
642 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
643 DALI_TEST_CHECK(visual);
645 DummyControl actor = DummyControl::New(true);
646 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
647 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
649 Vector2 controlSize(20.f, 30.f);
650 actor.SetProperty(Actor::Property::SIZE, controlSize);
652 application.GetScene().Add(actor);
654 Property::Map attributes;
655 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
657 application.SendNotification();
658 application.Render();
660 // Trigger count is 2 - load & render a frame
661 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
663 // renderer is added to actor
664 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
665 Renderer renderer = actor.GetRendererAt(0u);
666 DALI_TEST_CHECK(renderer);
671 int UtcDaliAnimatedVectorImageVisualPlayRange(void)
673 ToolkitTestApplication application;
674 tet_infoline("UtcDaliAnimatedVectorImageVisualPlayRange");
676 int startFrame = 1, endFrame = 3;
677 Property::Array array;
678 array.PushBack(endFrame);
679 array.PushBack(startFrame);
681 Property::Map propertyMap;
682 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
683 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
684 .Add(DevelImageVisual::Property::PLAY_RANGE, array);
686 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
687 DALI_TEST_CHECK(visual);
689 DummyControl actor = DummyControl::New(true);
690 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
691 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
693 Vector2 controlSize(20.f, 30.f);
694 actor.SetProperty(Actor::Property::SIZE, controlSize);
696 application.GetScene().Add(actor);
698 Property::Map attributes;
699 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
701 application.SendNotification();
702 application.Render();
704 // Trigger count is 2 - load & render a frame
705 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
707 // renderer is added to actor
708 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
709 Renderer renderer = actor.GetRendererAt(0u);
710 DALI_TEST_CHECK(renderer);
712 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
713 Property::Value* value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
715 int resultStartFrame, resultEndFrame;
716 Property::Array* result = value->GetArray();
717 result->GetElementAt(0).Get(resultStartFrame);
718 result->GetElementAt(1).Get(resultEndFrame);
720 DALI_TEST_EQUALS(startFrame, resultStartFrame, TEST_LOCATION);
721 DALI_TEST_EQUALS(endFrame, resultEndFrame, TEST_LOCATION);
723 // Set invalid play range
729 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, array);
730 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
732 // To make event trigger
733 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
735 application.SendNotification();
736 application.Render();
738 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
740 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
741 value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
743 result = value->GetArray();
744 result->GetElementAt(0).Get(resultStartFrame);
745 result->GetElementAt(1).Get(resultEndFrame);
747 DALI_TEST_EQUALS(startFrame, resultStartFrame, TEST_LOCATION); // Should not be changed
748 DALI_TEST_EQUALS(endFrame, resultEndFrame, TEST_LOCATION);
750 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, Property::Map());
752 application.SendNotification();
753 application.Render();
755 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3);
757 // To make event trigger
758 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
760 application.SendNotification();
761 application.Render();
763 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
765 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
766 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
767 DALI_TEST_EQUALS(value->Get<int>(), 3, TEST_LOCATION);
774 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, array);
775 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
777 // To make event trigger
778 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
780 application.SendNotification();
781 application.Render();
783 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
785 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
786 value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
788 result = value->GetArray();
789 result->GetElementAt(0).Get(resultStartFrame);
790 result->GetElementAt(1).Get(resultEndFrame);
792 DALI_TEST_EQUALS(0, resultStartFrame, TEST_LOCATION);
793 DALI_TEST_EQUALS(2, resultEndFrame, TEST_LOCATION);
795 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
796 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION); // CURRENT_FRAME_NUMBER should be changed also.
801 int UtcDaliAnimatedVectorImageVisualPlayRangeMarker(void)
803 ToolkitTestApplication application;
804 tet_infoline("UtcDaliAnimatedVectorImageVisualPlayRangeMarker");
806 Property::Array array;
807 array.PushBack(VECTOR_ANIMATION_MARKER_NAME_1);
809 Property::Map propertyMap;
810 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
811 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
812 .Add(DevelImageVisual::Property::PLAY_RANGE, array);
814 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
815 DALI_TEST_CHECK(visual);
817 DummyControl actor = DummyControl::New(true);
818 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
819 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
821 Vector2 controlSize(20.f, 30.f);
822 actor.SetProperty(Actor::Property::SIZE, controlSize);
824 application.GetScene().Add(actor);
826 Property::Map attributes;
827 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
829 application.SendNotification();
830 application.Render();
832 // Trigger count is 2 - load & render a frame
833 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
835 // renderer is added to actor
836 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
837 Renderer renderer = actor.GetRendererAt(0u);
838 DALI_TEST_CHECK(renderer);
840 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
841 Property::Value* value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
843 int resultStartFrame, resultEndFrame;
844 Property::Array* result = value->GetArray();
845 result->GetElementAt(0).Get(resultStartFrame);
846 result->GetElementAt(1).Get(resultEndFrame);
848 DALI_TEST_EQUALS(VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION);
849 DALI_TEST_EQUALS(VECTOR_ANIMATION_MARKER_END_FRAME_1, resultEndFrame, TEST_LOCATION);
853 array.PushBack(VECTOR_ANIMATION_MARKER_NAME_1);
854 array.PushBack(VECTOR_ANIMATION_MARKER_NAME_2);
857 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, array);
858 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
860 // To make event trigger
861 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
863 application.SendNotification();
864 application.Render();
866 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
868 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
869 value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
871 result = value->GetArray();
872 result->GetElementAt(0).Get(resultStartFrame);
873 result->GetElementAt(1).Get(resultEndFrame);
875 DALI_TEST_EQUALS(VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION);
876 DALI_TEST_EQUALS(VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION);
878 // Set invalid play range
881 array.PushBack(VECTOR_ANIMATION_MARKER_NAME_1);
884 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, array);
885 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
887 // To make event trigger
888 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
890 application.SendNotification();
891 application.Render();
893 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
895 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
896 value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
898 result = value->GetArray();
899 result->GetElementAt(0).Get(resultStartFrame);
900 result->GetElementAt(1).Get(resultEndFrame);
902 DALI_TEST_EQUALS(VECTOR_ANIMATION_MARKER_START_FRAME_1, resultStartFrame, TEST_LOCATION); // Should not be changed
903 DALI_TEST_EQUALS(VECTOR_ANIMATION_MARKER_END_FRAME_2, resultEndFrame, TEST_LOCATION);
908 int UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal(void)
910 ToolkitTestApplication application;
911 tet_infoline("UtcDaliAnimatedVectorImageVisualAnimationFinishedSignal");
913 Property::Map propertyMap;
914 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
915 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
916 .Add(DevelImageVisual::Property::LOOP_COUNT, 3);
918 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
919 DALI_TEST_CHECK(visual);
921 DummyControl actor = DummyControl::New(true);
922 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
923 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
925 DevelControl::VisualEventSignal(actor).Connect(&VisualEventSignal);
927 Vector2 controlSize(20.f, 30.f);
928 actor.SetProperty(Actor::Property::SIZE, controlSize);
930 application.GetScene().Add(actor);
932 Property::Map attributes;
933 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
935 application.SendNotification();
936 application.Render();
938 // Wait for animation finish - load, render, finish
939 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
941 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
942 Property::Value* value = map.Find(DevelImageVisual::Property::PLAY_STATE);
943 DALI_TEST_CHECK(value->Get<int>() == DevelImageVisual::PlayState::STOPPED);
945 DALI_TEST_EQUALS(gAnimationFinishedSignalFired, true, TEST_LOCATION);
950 int UtcDaliAnimatedVectorImageVisualJumpTo(void)
952 ToolkitTestApplication application;
953 tet_infoline("UtcDaliAnimatedVectorImageVisualJumpTo");
955 Property::Map propertyMap;
956 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
957 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
958 .Add(DevelImageVisual::Property::LOOP_COUNT, 3);
960 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
961 DALI_TEST_CHECK(visual);
963 tet_printf("1. Visual is created.\n");
965 DummyControl actor = DummyControl::New(true);
966 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
967 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
969 Vector2 controlSize(20.f, 30.f);
970 actor.SetProperty(Actor::Property::SIZE, controlSize);
972 application.GetScene().Add(actor);
974 application.SendNotification();
975 application.Render();
977 // Trigger count is 2 - load & render a frame
978 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
980 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 2);
982 // To make event trigger
983 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
985 application.SendNotification();
986 application.Render();
988 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
990 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
991 Property::Value* value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
992 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION);
994 tet_printf("2. The current frame number is [%d].\n", value->Get<int>());
996 Property::Array array;
1000 Property::Map attributes;
1001 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, array);
1002 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1004 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3);
1006 // To make event trigger
1007 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1009 application.SendNotification();
1010 application.Render();
1012 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1014 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1015 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1016 DALI_TEST_EQUALS(value->Get<int>(), 2, TEST_LOCATION);
1018 tet_printf("3. The current frame number is [%d].\n", value->Get<int>());
1020 // Change play range
1027 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, array);
1028 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1031 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1033 application.SendNotification();
1034 application.Render();
1036 // Wait for animation finish
1037 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1040 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3);
1042 // To make event trigger
1043 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
1045 application.SendNotification();
1046 application.Render();
1048 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1050 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1051 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1052 DALI_TEST_EQUALS(value->Get<int>(), 3, TEST_LOCATION);
1054 tet_printf("4. The current frame number is [%d].\n", value->Get<int>());
1056 // Jump to the same position
1057 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::JUMP_TO, 3);
1059 // To make event trigger
1060 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1062 application.SendNotification();
1063 application.Render();
1065 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1067 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1068 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1069 DALI_TEST_EQUALS(value->Get<int>(), 3, TEST_LOCATION);
1071 tet_printf("5. The current frame number is [%d].\n", value->Get<int>());
1076 int UtcDaliAnimatedVectorImageVisualUpdateProperty(void)
1078 ToolkitTestApplication application;
1079 tet_infoline("UtcDaliAnimatedVectorImageVisualUpdateProperty");
1081 int startFrame = 1, endFrame = 3;
1082 Property::Array playRange;
1083 playRange.PushBack(startFrame);
1084 playRange.PushBack(endFrame);
1086 Property::Map propertyMap;
1087 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1088 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
1089 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
1090 .Add(DevelImageVisual::Property::PLAY_RANGE, playRange);
1092 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1093 DALI_TEST_CHECK(visual);
1095 DummyControl actor = DummyControl::New(true);
1096 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1097 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1099 Vector2 controlSize(20.f, 30.f);
1100 actor.SetProperty(Actor::Property::SIZE, controlSize);
1102 application.GetScene().Add(actor);
1104 application.SendNotification();
1105 application.Render();
1107 // Trigger count is 2 - load & render a frame
1108 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1110 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1111 Property::Value* value = map.Find(DevelImageVisual::Property::LOOP_COUNT);
1112 DALI_TEST_EQUALS(value->Get<int>(), 3, TEST_LOCATION);
1114 value = map.Find(DevelImageVisual::Property::PLAY_RANGE, Property::ARRAY);
1115 DALI_TEST_CHECK(value);
1117 Property::Array* result = value->GetArray();
1118 DALI_TEST_CHECK(result);
1120 DALI_TEST_CHECK(result->GetElementAt(0).Get<int>() == startFrame);
1121 DALI_TEST_CHECK(result->GetElementAt(1).Get<int>() == endFrame);
1124 playRange.PushBack(0);
1125 playRange.PushBack(2);
1127 Property::Map attributes;
1128 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, playRange);
1129 attributes.Add(DevelImageVisual::Property::LOOP_COUNT, 5);
1131 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1133 // To make event trigger
1134 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
1136 application.SendNotification();
1137 application.Render();
1139 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1141 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1142 value = map.Find(DevelImageVisual::Property::LOOP_COUNT);
1143 DALI_TEST_EQUALS(value->Get<int>(), 5, TEST_LOCATION);
1145 value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
1146 result = value->GetArray();
1147 DALI_TEST_CHECK(result);
1149 DALI_TEST_CHECK(result->GetElementAt(0).Get<int>() == 0);
1150 DALI_TEST_CHECK(result->GetElementAt(1).Get<int>() == 2);
1155 playRange.PushBack(startFrame);
1156 playRange.PushBack(endFrame);
1158 attributes.Add(DevelImageVisual::Property::PLAY_RANGE, playRange);
1160 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1162 // To make event trigger
1163 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1165 application.SendNotification();
1166 application.Render();
1168 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1170 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1171 value = map.Find(DevelImageVisual::Property::PLAY_RANGE);
1173 result = value->GetArray();
1174 DALI_TEST_CHECK(result);
1176 DALI_TEST_CHECK(result->GetElementAt(0).Get<int>() == startFrame);
1177 DALI_TEST_CHECK(result->GetElementAt(1).Get<int>() == endFrame);
1179 // Play and update property
1181 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1183 application.SendNotification();
1184 application.Render();
1186 attributes.Add(DevelImageVisual::Property::LOOP_COUNT, 10);
1188 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1190 application.SendNotification();
1191 application.Render();
1193 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1194 value = map.Find(DevelImageVisual::Property::LOOP_COUNT);
1195 DALI_TEST_EQUALS(value->Get<int>(), 10, TEST_LOCATION);
1200 int UtcDaliAnimatedVectorImageVisualStopBehavior(void)
1202 ToolkitTestApplication application;
1203 tet_infoline("UtcDaliAnimatedVectorImageVisualStopBehavior");
1205 Property::Map propertyMap;
1206 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1207 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
1208 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
1209 .Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::FIRST_FRAME);
1211 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1212 DALI_TEST_CHECK(visual);
1214 DummyControl actor = DummyControl::New(true);
1215 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1216 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1218 Vector2 controlSize(20.f, 30.f);
1219 actor.SetProperty(Actor::Property::SIZE, controlSize);
1221 application.GetScene().Add(actor);
1223 Property::Map attributes;
1224 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1226 application.SendNotification();
1227 application.Render();
1229 // Trigger count is 3 - load, render, animation finished
1230 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1232 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1233 Property::Value* value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1234 DALI_TEST_EQUALS(value->Get<int>(), 0, TEST_LOCATION); // Should be the first frame
1236 // Change stop behavior
1237 attributes.Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME);
1239 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1244 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1246 application.SendNotification();
1247 application.Render();
1249 // Trigger count is 1 - animation finished
1250 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1252 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1254 Property::Value* value1 = map.Find(DevelImageVisual::Property::TOTAL_FRAME_NUMBER);
1255 int totalFrameNumber = value1->Get<int>();
1257 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1258 DALI_TEST_EQUALS(value->Get<int>(), totalFrameNumber - 1, TEST_LOCATION); // Should be the last frame
1260 // Change stop behavior
1261 attributes.Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME);
1262 attributes.Add(DevelImageVisual::Property::LOOP_COUNT, -1);
1264 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1269 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1271 application.SendNotification();
1272 application.Render();
1275 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PAUSE, attributes);
1277 // To make event trigger
1278 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
1280 application.SendNotification();
1281 application.Render();
1283 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1285 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1286 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1287 int currentFrameNumber = value->Get<int>();
1290 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::STOP, attributes);
1292 // To make event trigger
1293 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1295 application.SendNotification();
1296 application.Render();
1298 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1300 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1301 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1302 DALI_TEST_EQUALS(value->Get<int>(), currentFrameNumber, TEST_LOCATION); // Should be same with currentFrameNumber
1307 int UtcDaliAnimatedVectorImageVisualLoopingMode(void)
1309 ToolkitTestApplication application;
1310 tet_infoline("UtcDaliAnimatedVectorImageVisualLoopingMode");
1312 Property::Map propertyMap;
1313 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1314 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
1315 .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
1316 .Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME)
1317 .Add(DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::AUTO_REVERSE);
1319 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1320 DALI_TEST_CHECK(visual);
1322 DummyControl actor = DummyControl::New(true);
1323 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1324 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1326 Vector2 controlSize(20.f, 30.f);
1327 actor.SetProperty(Actor::Property::SIZE, controlSize);
1329 application.GetScene().Add(actor);
1331 Property::Map attributes;
1332 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1334 application.SendNotification();
1335 application.Render();
1337 // Trigger count is 3 - load, render, animation finished
1338 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION);
1340 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1341 Property::Value* value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1342 DALI_TEST_EQUALS(value->Get<int>(), 0, TEST_LOCATION); // Should be the first frame because of auto reverse
1344 // Change stop behavior
1345 attributes.Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::CURRENT_FRAME);
1347 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1350 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1352 application.SendNotification();
1353 application.Render();
1355 // Trigger count is 1 - animation finished
1356 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1358 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1359 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1360 DALI_TEST_EQUALS(value->Get<int>(), 0, TEST_LOCATION); // Should be the first frame
1362 // Change looping mode
1363 attributes.Add(DevelImageVisual::Property::LOOPING_MODE, DevelImageVisual::LoopingMode::RESTART);
1365 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1368 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1370 application.SendNotification();
1371 application.Render();
1373 // Trigger count is 1 - animation finished
1374 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1376 Property::Value* value1 = map.Find(DevelImageVisual::Property::TOTAL_FRAME_NUMBER);
1377 int totalFrameNumber = value1->Get<int>();
1379 map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1380 value = map.Find(DevelImageVisual::Property::CURRENT_FRAME_NUMBER);
1381 DALI_TEST_EQUALS(value->Get<int>(), totalFrameNumber - 1, TEST_LOCATION); // Should be the last frame
1386 int UtcDaliAnimatedVectorImageVisualPropertyNotification(void)
1388 ToolkitTestApplication application;
1389 tet_infoline("UtcDaliAnimatedVectorImageVisualPropertyNotification");
1391 Property::Map propertyMap;
1392 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1393 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
1395 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1396 DALI_TEST_CHECK(visual);
1398 DummyControl actor = DummyControl::New(true);
1399 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1400 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1401 actor.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
1403 application.GetScene().Add(actor);
1405 application.SendNotification();
1406 application.Render();
1408 // Trigger count is 2 - load & render a frame
1409 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1411 Renderer renderer = actor.GetRendererAt(0u);
1412 DALI_TEST_CHECK(renderer);
1414 Vector2 controlSize(20.f, 30.f);
1415 actor.SetProperty(Actor::Property::SIZE, controlSize);
1417 application.SendNotification();
1418 application.Render();
1420 application.SendNotification();
1421 application.Render();
1423 // Trigger count is 1 - render a frame
1424 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1426 auto textureSet = renderer.GetTextures();
1427 auto texture = textureSet.GetTexture(0);
1429 DALI_TEST_EQUALS(controlSize.width, texture.GetWidth(), TEST_LOCATION);
1430 DALI_TEST_EQUALS(controlSize.height, texture.GetHeight(), TEST_LOCATION);
1433 Vector3 controlScale(2.0f, 2.0f, 1.0f);
1434 actor.SetProperty(Actor::Property::SCALE, controlScale);
1436 application.SendNotification();
1437 application.Render();
1439 application.SendNotification();
1440 application.Render();
1442 // Trigger count is 1 - render a frame
1443 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1445 renderer = actor.GetRendererAt(0u);
1446 DALI_TEST_CHECK(renderer);
1448 textureSet = renderer.GetTextures();
1449 texture = textureSet.GetTexture(0);
1451 DALI_TEST_EQUALS(controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION);
1452 DALI_TEST_EQUALS(controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION);
1455 controlSize = Vector2(50.0f, 100.0f);
1456 Animation animation = Animation::New(1.0);
1457 animation.AnimateTo(Property(actor, Actor::Property::SIZE), Vector3(controlSize.x, controlSize.y, 0.0f));
1460 application.SendNotification();
1461 application.Render(1100); // After the animation
1463 application.SendNotification();
1464 application.Render();
1466 // Trigger count is 1 - render a frame
1467 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1469 renderer = actor.GetRendererAt(0u);
1470 DALI_TEST_CHECK(renderer);
1472 textureSet = renderer.GetTextures();
1473 texture = textureSet.GetTexture(0);
1475 DALI_TEST_EQUALS(controlSize.width * controlScale.width, texture.GetWidth(), TEST_LOCATION);
1476 DALI_TEST_EQUALS(controlSize.height * controlScale.height, texture.GetHeight(), TEST_LOCATION);
1481 int UtcDaliAnimatedVectorImageVisualMultipleInstances(void)
1483 ToolkitTestApplication application;
1484 tet_infoline("UtcDaliAnimatedVectorImageVisualMultipleInstances");
1486 Property::Map propertyMap;
1487 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1488 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
1490 Visual::Base visual1 = VisualFactory::Get().CreateVisual(propertyMap);
1491 DALI_TEST_CHECK(visual1);
1493 DummyControl actor1 = DummyControl::New(true);
1494 DummyControlImpl& dummyImpl1 = static_cast<DummyControlImpl&>(actor1.GetImplementation());
1495 dummyImpl1.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual1);
1497 Vector2 controlSize(20.f, 30.f);
1498 actor1.SetProperty(Actor::Property::SIZE, controlSize);
1500 application.GetScene().Add(actor1);
1502 propertyMap.Clear();
1503 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1504 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
1506 Visual::Base visual2 = VisualFactory::Get().CreateVisual(propertyMap);
1507 DALI_TEST_CHECK(visual2);
1509 DummyControl actor2 = DummyControl::New(true);
1510 DummyControlImpl& dummyImpl2 = static_cast<DummyControlImpl&>(actor2.GetImplementation());
1511 dummyImpl2.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual2);
1513 actor2.SetProperty(Actor::Property::SIZE, controlSize);
1515 application.GetScene().Add(actor2);
1517 application.SendNotification();
1518 application.Render();
1520 // Trigger count is 4 - load & render a frame for each instance
1521 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
1523 DevelControl::DoAction(actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map());
1525 // To make event trigger
1526 actor2.SetProperty(Actor::Property::SIZE, Vector2(10.0f, 10.0f));
1528 application.SendNotification();
1529 application.Render();
1531 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1533 Property::Map attributes;
1534 attributes.Add(DevelImageVisual::Property::STOP_BEHAVIOR, DevelImageVisual::StopBehavior::LAST_FRAME);
1536 DevelControl::DoAction(actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1537 DevelControl::DoAction(actor2, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelVisual::Action::UPDATE_PROPERTY, attributes);
1539 DevelControl::DoAction(actor1, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, Property::Map());
1541 // renderer is added to actor
1542 DALI_TEST_CHECK(actor1.GetRendererCount() == 1u);
1543 Renderer renderer1 = actor1.GetRendererAt(0u);
1544 DALI_TEST_CHECK(renderer1);
1546 // renderer is added to actor
1547 DALI_TEST_CHECK(actor2.GetRendererCount() == 1u);
1548 Renderer renderer2 = actor2.GetRendererAt(0u);
1549 DALI_TEST_CHECK(renderer2);
1554 int UtcDaliAnimatedVectorImageVisualControlVisibilityChanged(void)
1556 ToolkitTestApplication application;
1557 tet_infoline("UtcDaliAnimatedVectorImageVisualControlVisibilityChanged");
1559 Property::Map propertyMap;
1560 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1561 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
1563 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1564 DALI_TEST_CHECK(visual);
1566 DummyControl actor = DummyControl::New(true);
1567 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1568 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1570 Vector2 controlSize(20.f, 30.f);
1571 actor.SetProperty(Actor::Property::SIZE, controlSize);
1573 application.GetScene().Add(actor);
1575 application.SendNotification();
1576 application.Render();
1578 // Trigger count is 2 - load & render a frame
1579 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1581 Property::Map attributes;
1582 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1584 application.SendNotification();
1585 application.Render();
1587 // Check rendering behavior
1588 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
1589 Renderer renderer = actor.GetRendererAt(0u);
1590 DALI_TEST_CHECK(renderer);
1591 DALI_TEST_CHECK(renderer.GetProperty<int>(DevelRenderer::Property::RENDERING_BEHAVIOR) == DevelRenderer::Rendering::CONTINUOUSLY);
1593 actor.SetProperty(Actor::Property::VISIBLE, false);
1595 application.SendNotification();
1596 application.Render();
1598 // Check rendering behavior again
1599 DALI_TEST_CHECK(renderer.GetProperty<int>(DevelRenderer::Property::RENDERING_BEHAVIOR) == DevelRenderer::Rendering::IF_REQUIRED);
1604 int UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged(void)
1606 ToolkitTestApplication application;
1607 tet_infoline("UtcDaliAnimatedVectorImageVisualWindowVisibilityChanged");
1609 Property::Map propertyMap;
1610 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1611 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
1613 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1614 DALI_TEST_CHECK(visual);
1616 DummyControl actor = DummyControl::New(true);
1617 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1618 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1620 Vector2 controlSize(20.f, 30.f);
1621 actor.SetProperty(Actor::Property::SIZE, controlSize);
1623 application.GetScene().Add(actor);
1625 application.SendNotification();
1626 application.Render();
1628 // Trigger count is 2 - load & render a frame
1629 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1631 Property::Map attributes;
1632 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1634 application.SendNotification();
1635 application.Render();
1637 // Check rendering behavior
1638 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
1639 Renderer renderer = actor.GetRendererAt(0u);
1640 DALI_TEST_CHECK(renderer);
1641 DALI_TEST_CHECK(renderer.GetProperty<int>(DevelRenderer::Property::RENDERING_BEHAVIOR) == DevelRenderer::Rendering::CONTINUOUSLY);
1643 Window window = DevelWindow::Get(actor);
1646 application.SendNotification();
1647 application.Render();
1649 // Check rendering behavior again
1650 DALI_TEST_CHECK(renderer.GetProperty<int>(DevelRenderer::Property::RENDERING_BEHAVIOR) == DevelRenderer::Rendering::IF_REQUIRED);
1655 int UtcDaliAnimatedVectorImageVisualInvalidFile01(void)
1657 ToolkitTestApplication application;
1658 tet_infoline("Request loading with invalid file - should draw broken image");
1660 TestGlAbstraction& gl = application.GetGlAbstraction();
1661 TraceCallStack& textureTrace = gl.GetTextureTrace();
1662 textureTrace.Enable(true);
1664 Property::Map propertyMap;
1665 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1666 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1668 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1669 DALI_TEST_CHECK(visual);
1671 DummyControl actor = DummyControl::New(true);
1672 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1673 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1675 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1677 application.GetScene().Add(actor);
1679 application.SendNotification();
1680 application.Render();
1682 // Trigger count is 1 - load
1683 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1685 application.SendNotification();
1686 application.Render();
1688 // Check resource status
1689 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1690 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1692 // The broken image should be shown.
1693 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1694 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1699 int UtcDaliAnimatedVectorImageVisualInvalidFile02(void)
1701 ToolkitTestApplication application;
1702 tet_infoline("Request loading with invalid file - should draw broken image");
1704 TestGlAbstraction& gl = application.GetGlAbstraction();
1705 TraceCallStack& textureTrace = gl.GetTextureTrace();
1706 textureTrace.Enable(true);
1708 Property::Map propertyMap;
1709 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1710 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1712 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1713 DALI_TEST_CHECK(visual);
1715 DummyControl actor = DummyControl::New(true);
1716 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1717 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1719 actor.SetProperty(Actor::Property::SIZE, Vector2(20.0f, 20.0f));
1721 application.SendNotification();
1722 application.Render();
1724 // Trigger count is 1 - load
1725 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1727 // Add to the Scene after loading
1728 application.GetScene().Add(actor);
1730 application.SendNotification();
1731 application.Render();
1733 // Check resource status
1734 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1735 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1737 // The broken image should be shown.
1738 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1739 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1744 int UtcDaliAnimatedVectorImageVisualInvalidFile03(void)
1746 ToolkitTestApplication application;
1747 tet_infoline("Request loading with invalid file without size set - should draw broken image");
1749 TestGlAbstraction& gl = application.GetGlAbstraction();
1750 TraceCallStack& textureTrace = gl.GetTextureTrace();
1751 textureTrace.Enable(true);
1753 Property::Map propertyMap;
1754 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1755 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_INVALID_FILE_NAME);
1757 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1758 DALI_TEST_CHECK(visual);
1760 DummyControl actor = DummyControl::New(true);
1761 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1762 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1764 application.GetScene().Add(actor);
1766 application.SendNotification();
1767 application.Render();
1769 // Trigger count is 1 - load
1770 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1772 application.SendNotification();
1773 application.Render();
1775 // Check resource status
1776 Visual::ResourceStatus status = actor.GetVisualResourceStatus(DummyControl::Property::TEST_VISUAL);
1777 DALI_TEST_EQUALS(status, Visual::ResourceStatus::FAILED, TEST_LOCATION);
1779 // The broken image should be shown.
1780 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1781 DALI_TEST_EQUALS(textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION);
1786 int UtcDaliAnimatedVectorImageVisualFrameDrops(void)
1788 ToolkitTestApplication application;
1789 tet_infoline("UtcDaliAnimatedVectorImageVisualFrameDrops");
1791 Property::Map propertyMap;
1792 propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
1793 .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME_FRAME_DROP);
1795 Visual::Base visual = VisualFactory::Get().CreateVisual(propertyMap);
1796 DALI_TEST_CHECK(visual);
1798 DummyControl actor = DummyControl::New(true);
1799 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1800 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1802 Vector2 controlSize(20.f, 30.f);
1803 actor.SetProperty(Actor::Property::SIZE, controlSize);
1805 application.GetScene().Add(actor);
1807 application.SendNotification();
1808 application.Render();
1810 // Trigger count is 2 - load, render the first frame
1811 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1813 Property::Map map = actor.GetProperty<Property::Map>(DummyControl::Property::TEST_VISUAL);
1814 Property::Value* value = map.Find(DevelImageVisual::Property::TOTAL_FRAME_NUMBER);
1815 int totalFrameNumber = value->Get<int>();
1817 Property::Map attributes;
1818 DevelControl::DoAction(actor, DummyControl::Property::TEST_VISUAL, Dali::Toolkit::DevelAnimatedVectorImageVisual::Action::PLAY, attributes);
1820 // Make delay to drop frames
1821 Test::VectorAnimationRenderer::DelayRendering(170); // longer than 16.6 * 10frames
1823 application.SendNotification();
1824 application.Render();
1826 // Trigger count is 1 - calculating frame drops
1827 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1829 // Check dropped frame
1830 uint32_t frames = Test::VectorAnimationRenderer::GetDroppedFrames();
1831 DALI_TEST_CHECK(frames > 0);
1832 DALI_TEST_CHECK(frames <= static_cast<uint32_t>(totalFrameNumber));
1837 int UtcDaliAnimatedVectorImageVisualSize(void)
1839 ToolkitTestApplication application;
1840 tet_infoline("UtcDaliAnimatedVectorImageVisualSize");
1842 TestGlAbstraction& gl = application.GetGlAbstraction();
1843 TraceCallStack& textureTrace = gl.GetTextureTrace();
1845 VisualFactory factory = VisualFactory::Get();
1846 Visual::Base visual = factory.CreateVisual(TEST_VECTOR_IMAGE_FILE_NAME, ImageDimensions());
1847 DALI_TEST_CHECK(visual);
1849 DummyControl actor = DummyControl::New(true);
1850 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1851 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
1853 application.GetScene().Add(actor);
1855 application.SendNotification();
1857 // Trigger count is 2 - load, resource ready
1858 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
1860 textureTrace.Enable(true);
1862 application.SendNotification();
1863 application.Render();
1866 int width = 100, height = 100; // 100x100 is the content default size.
1867 std::stringstream out;
1868 out << GL_TEXTURE_2D << ", " << 0u << ", " << width << ", " << height;
1869 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str()));
1872 actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
1874 application.SendNotification();
1875 application.Render();
1877 // Trigger count is 1 - resource ready
1878 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
1880 textureTrace.Reset();
1882 application.SendNotification();
1883 application.Render();
1886 int width = 200, height = 200;
1887 std::stringstream out;
1888 out << GL_TEXTURE_2D << ", " << 0u << ", " << width << ", " << height;
1889 DALI_TEST_CHECK(textureTrace.FindMethodAndParams("TexImage2D", out.str().c_str()));