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