Merge "(Vector) Support SYNCHRONOUS_LOADING" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-Visuals-internal.cpp
1 /*
2  * Copyright (c) 2022 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-event-thread-callback.h>
25 #include <toolkit-text-utils.h>
26
27 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
28 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
29 #include <dali-toolkit/internal/visuals/color/color-visual.h>
30 #include <dali-toolkit/internal/visuals/npatch/npatch-visual.h>
31 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
32
33 #include <../dali-toolkit/dali-toolkit-test-utils/dummy-control.h>
34 #include <dummy-visual.h>
35
36 using namespace Dali;
37 using namespace Toolkit;
38
39 namespace
40 {
41 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
42
43 }
44
45 int UtcDaliVisualAction(void)
46 {
47   ToolkitTestApplication application;
48   tet_infoline("Register an ImageVisual and and perform an Action on Visual directly");
49   Vector2 controlSize(20.f, 30.f);
50
51   //Created DummyVisual
52   Property::Map                     settings;
53   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
54
55   DummyControl        dummyControl = DummyControl::New(true);
56   Impl::DummyControl& dummyImpl    = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
57
58   tet_infoline("Register visual and stage control");
59
60   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(dummyVisualPtr.Get());
61   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
62   dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
63   application.GetScene().Add(dummyControl);
64
65   application.SendNotification();
66   application.Render();
67
68   tet_infoline("Check action counter is 0 before DoAction");
69   DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
70
71   tet_infoline("Perform TEST_ACTION action on Visual. Should increase the action counter");
72
73   Property::Map                    attributes;
74   Toolkit::Internal::Visual::Base& internalVisualBase = GetImplementation(visualBaseHandle);
75   internalVisualBase.DoAction(Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
76   application.SendNotification();
77   DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 1, TEST_LOCATION);
78
79   END_TEST;
80 }
81
82 int UtcDaliVisualActionNotImplemented(void)
83 {
84   ToolkitTestApplication application;
85   tet_infoline("Register an ImageVisual and and perform an Action on a Visual which does not support any Actions");
86   Vector2 controlSize(20.f, 30.f);
87
88   //Created DummyVisual
89   Property::Map                     settings;
90   Toolkit::Internal::DummyVisualPtr dummyVisualPtr = Toolkit::Internal::DummyVisual::New(settings);
91
92   DummyControl        dummyControl = DummyControl::New(true);
93   Impl::DummyControl& dummyImpl    = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
94
95   tet_infoline("Register visual and stage control");
96
97   VisualFactory factory = VisualFactory::Get();
98   Property::Map propertyMap;
99   propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
100   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
101   Visual::Base visual = factory.CreateVisual(propertyMap);
102
103   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
104   dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
105   application.GetScene().Add(dummyControl);
106
107   application.SendNotification();
108   application.Render();
109
110   tet_infoline("Check action counter is 0 before DoAction");
111   DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
112
113   tet_infoline("Perform TEST_ACTION action on Color Visual which does not support it.. Should not increment the action counter");
114   Property::Map attributes;
115   GetImplementation(visual).DoAction(Dali::Toolkit::Internal::DummyVisual::TEST_ACTION, attributes);
116   application.SendNotification();
117   DALI_TEST_EQUALS(dummyVisualPtr->GetActionCounter(), 0, TEST_LOCATION);
118
119   END_TEST;
120 }
121
122 int UtcDaliVisualSetProperties(void)
123 {
124   ToolkitTestApplication application;
125   tet_infoline("Register a visual and SetProperties");
126
127   Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
128
129   //Created ColorVisual
130   Property::Map propertyMap1;
131   propertyMap1.Insert(Visual::Property::TYPE, Visual::COLOR);
132   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
133   Toolkit::Internal::ColorVisualPtr colorVisualPtr = Toolkit::Internal::ColorVisual::New(*factoryCache, propertyMap1);
134
135   DummyControl        dummyControl = DummyControl::New(true);
136   Impl::DummyControl& dummyImpl    = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
137
138   Toolkit::Visual::Base visualBaseHandle = Toolkit::Visual::Base(colorVisualPtr.Get());
139   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visualBaseHandle);
140   dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
141   application.GetScene().Add(dummyControl);
142
143   application.SendNotification();
144   application.Render();
145
146   Property::Map propertyMap;
147   propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
148
149   colorVisualPtr->SetProperties(propertyMap);
150   application.SendNotification();
151   application.Render();
152
153   Property::Map resultMap;
154   visualBaseHandle.CreatePropertyMap(resultMap);
155
156   Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
157   DALI_TEST_CHECK(colorValue);
158   DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::BLUE);
159
160   delete factoryCache;
161
162   END_TEST;
163 }
164
165 int UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap(void)
166 {
167   ToolkitTestApplication application;
168   tet_infoline("UtcDaliAnimatedVectorImageVisualCreateInstancePropertyMap");
169
170   Property::Map propertyMap;
171   propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
172     .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
173
174   // request AnimatedVectorImageVisual with a property map
175   VisualFactory                    factory    = VisualFactory::Get();
176   Visual::Base                     visual     = factory.CreateVisual(propertyMap);
177   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
178
179   Property::Map resultMap;
180   visualImpl.CreateInstancePropertyMap(resultMap);
181
182   // check the property values from the returned map from a visual
183   DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
184
185   END_TEST;
186 }
187
188 int UtcDaliAnimatedVectorImageVisualSetProperties(void)
189 {
190   ToolkitTestApplication application;
191   tet_infoline("UtcDaliAnimatedVectorImageVisualSetProperties");
192
193   Property::Map propertyMap;
194   propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_VECTOR_IMAGE)
195     .Add(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME)
196     .Add(DevelImageVisual::Property::LOOP_COUNT, 3)
197     .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.2f, 0.8f))
198     .Add(ImageVisual::Property::SYNCHRONOUS_LOADING, false);
199
200   Visual::Base                     visual     = VisualFactory::Get().CreateVisual(propertyMap);
201   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
202   DALI_TEST_CHECK(visual);
203
204   DummyControl      actor     = DummyControl::New(true);
205   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
206   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
207   actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
208   application.GetScene().Add(actor);
209
210   application.SendNotification();
211   application.Render();
212
213   // Trigger count is 2 - load, resource ready
214   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
215
216   // renderer is added to actor
217   DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
218   Renderer renderer = actor.GetRendererAt(0u);
219   DALI_TEST_CHECK(renderer);
220
221   Property::Map propertyMap1;
222   propertyMap1.Add(DevelImageVisual::Property::LOOP_COUNT, 1)
223     .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.4f, 0.6f));
224
225   visualImpl.SetProperties(propertyMap1);
226
227   application.SendNotification();
228   application.Render();
229
230   DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
231   renderer = actor.GetRendererAt(0u);
232   DALI_TEST_CHECK(renderer);
233
234   actor.Unparent();
235   DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
236
237   END_TEST;
238 }
239
240 int UtcDaliArcVisualCreateInstancePropertyMap(void)
241 {
242   ToolkitTestApplication application;
243   tet_infoline("UtcDaliArcVisualCreateInstancePropertyMap");
244
245   Property::Map propertyMap;
246   propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
247     .Add(DevelArcVisual::Property::THICKNESS, 20.0f);
248
249   // request ArcVisual with a property map
250   VisualFactory                    factory    = VisualFactory::Get();
251   Visual::Base                     visual     = factory.CreateVisual(propertyMap);
252   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
253
254   Property::Map resultMap;
255   visualImpl.CreateInstancePropertyMap(resultMap);
256
257   // check the property values from the returned map from a visual
258   DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
259
260   END_TEST;
261 }
262 int UtcDaliVisualUpdateBrokenImageRenderer(void)
263 {
264   ToolkitTestApplication application;
265   tet_infoline("UpdateBrokenImageRenderer Test");
266
267   Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
268
269   std::string defaultBrokenImageUrl = "not-9patch.png";
270
271   // Set default broken image
272   factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
273
274   //Created dummy renderer
275   Geometry geometry = factoryCache->GetGeometry(Toolkit::Internal::VisualFactoryCache::QUAD_GEOMETRY);
276   Shader   shader   = Shader::New("foo", "bar");
277   Renderer renderer = Renderer::New(geometry, shader);
278
279   DALI_TEST_CHECK(renderer);
280
281   // renderer doesn't changed.
282   factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, true);
283   Shader testShader1 = renderer.GetShader();
284
285   // Get default image renderer.
286   factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
287   Shader testShader2 = renderer.GetShader();
288
289   // Get default image renderer but nine patch.
290   // Note : This API behavior can be changed. (DALi don't consider about default BrokenImageUrl is failed.
291   defaultBrokenImageUrl = "yes-9patch.9.png";
292   factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
293   factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
294   Shader testShader3 = renderer.GetShader();
295
296   DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
297   DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
298   DALI_TEST_CHECK(testShader2 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
299   DALI_TEST_CHECK(testShader3 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
300
301   delete factoryCache;
302
303   END_TEST;
304 }