[dali_2.1.31] Merge branch '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
199   Visual::Base                     visual     = VisualFactory::Get().CreateVisual(propertyMap);
200   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
201   DALI_TEST_CHECK(visual);
202
203   DummyControl      actor     = DummyControl::New(true);
204   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
205   dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
206   actor.SetProperty(Actor::Property::SIZE, Vector2(200.0f, 200.0f));
207   application.GetScene().Add(actor);
208
209   application.SendNotification();
210   application.Render();
211
212   // Trigger count is 2 - load, resource ready
213   DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
214
215   // renderer is added to actor
216   DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
217   Renderer renderer = actor.GetRendererAt(0u);
218   DALI_TEST_CHECK(renderer);
219
220   Property::Map propertyMap1;
221   propertyMap1.Add(DevelImageVisual::Property::LOOP_COUNT, 1)
222     .Add(DevelImageVisual::Property::PLAY_RANGE, Vector2(0.4f, 0.6f));
223
224   visualImpl.SetProperties(propertyMap1);
225
226   application.SendNotification();
227   application.Render();
228
229   DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
230   renderer = actor.GetRendererAt(0u);
231   DALI_TEST_CHECK(renderer);
232
233   actor.Unparent();
234   DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
235
236   END_TEST;
237 }
238
239 int UtcDaliArcVisualCreateInstancePropertyMap(void)
240 {
241   ToolkitTestApplication application;
242   tet_infoline("UtcDaliArcVisualCreateInstancePropertyMap");
243
244   Property::Map propertyMap;
245   propertyMap.Add(Toolkit::Visual::Property::TYPE, DevelVisual::ARC)
246     .Add(DevelArcVisual::Property::THICKNESS, 20.0f);
247
248   // request ArcVisual with a property map
249   VisualFactory                    factory    = VisualFactory::Get();
250   Visual::Base                     visual     = factory.CreateVisual(propertyMap);
251   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation(visual);
252
253   Property::Map resultMap;
254   visualImpl.CreateInstancePropertyMap(resultMap);
255
256   // check the property values from the returned map from a visual
257   DALI_TEST_CHECK(resultMap.Empty()); // Now the map is empty
258
259   END_TEST;
260 }
261 int UtcDaliVisualUpdateBrokenImageRenderer(void)
262 {
263   ToolkitTestApplication application;
264   tet_infoline("UpdateBrokenImageRenderer Test");
265
266   Toolkit::Internal::VisualFactoryCache* factoryCache = new Toolkit::Internal::VisualFactoryCache(false);
267
268   std::string defaultBrokenImageUrl = "not-9patch.png";
269
270   // Set default broken image
271   factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
272
273   //Created dummy renderer
274   Geometry geometry = factoryCache->GetGeometry(Toolkit::Internal::VisualFactoryCache::QUAD_GEOMETRY);
275   Shader   shader   = Shader::New("foo", "bar");
276   Renderer renderer = Renderer::New(geometry, shader);
277
278   DALI_TEST_CHECK(renderer);
279
280   // renderer doesn't changed.
281   factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, true);
282   Shader testShader1 = renderer.GetShader();
283
284   // Get default image renderer.
285   factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
286   Shader testShader2 = renderer.GetShader();
287
288   // Get default image renderer but nine patch.
289   // Note : This API behavior can be changed. (DALi don't consider about default BrokenImageUrl is failed.
290   defaultBrokenImageUrl = "yes-9patch.9.png";
291   factoryCache->SetBrokenImageUrl(defaultBrokenImageUrl, std::vector<std::string>());
292   factoryCache->UpdateBrokenImageRenderer(renderer, Vector2::ZERO, false);
293   Shader testShader3 = renderer.GetShader();
294
295   DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
296   DALI_TEST_CHECK(testShader1 != factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
297   DALI_TEST_CHECK(testShader2 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::IMAGE_SHADER));
298   DALI_TEST_CHECK(testShader3 == factoryCache->GetShader(Toolkit::Internal::VisualFactoryCache::NINE_PATCH_SHADER));
299
300   delete factoryCache;
301
302   END_TEST;
303 }