Merge "(Automated Tests) Passing on Ubuntu 20.04" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-DebugRendering.cpp
1 /*
2  * Copyright (c) 2021 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 #include <unistd.h>
18
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
21 #include <dali-toolkit/internal/visuals/wireframe/wireframe-visual.h>
22 #include <dali-toolkit/internal/visuals/visual-base-impl.h>
23 #include <dali-toolkit/internal/visuals/text/text-visual.h>
24
25 #include <dali-toolkit/dali-toolkit.h>
26
27 #include <toolkit-environment-variable.h> // for setting environment variable: DALI_DEBUG_RENDERING
28
29 #if defined(ELDBUS_ENABLED)
30 #include <automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/dbus-wrapper.h>
31 #endif
32
33 #include "dummy-control.h"
34
35 using namespace Dali;
36 using namespace Dali::Toolkit;
37
38 namespace
39 {
40 const char* TEST_IMAGE_FILE_NAME =  "image_01.jpg";
41 const char* TEST_NPATCH_FILE_NAME =  "image_01.9.jpg";
42 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
43 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
44
45 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
46
47 void TestDebugVisual( Integration::Scene scene,  Visual::Base& visual, Visual::Type actualType, Vector2 expectedNaturalSize )
48 {
49   {
50     auto& impl = GetImplementation( visual );
51     DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( impl ) );
52   }
53
54   Vector2 naturalSize;
55   visual.GetNaturalSize( naturalSize );
56   DALI_TEST_EQUALS( naturalSize, expectedNaturalSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
57
58   Property::Map propertyMap;
59   visual.CreatePropertyMap( propertyMap );
60   Property::Value* typeValue = propertyMap.Find( Toolkit::Visual::Property::TYPE,  Property::INTEGER );
61   if ( typeValue )
62   {
63     DALI_TEST_CHECK( typeValue->Get<int>() == actualType );
64   }
65
66   DummyControl actor = DummyControl::New();
67   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
68   dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
69   scene.Add( actor );
70
71   DALI_TEST_EQUALS( actor.GetRendererCount(), 1, TEST_LOCATION );
72   if( actor.GetRendererCount() > 0 )
73   {
74     Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
75     DALI_TEST_CHECK( geometry.GetType() == Geometry::LINES );
76   }
77 }
78 }
79
80 void dali_debug_rendering_startup(void)
81 {
82   test_return_value = TET_UNDEF;
83 #if defined(ELDBUS_ENABLED)
84   DBusWrapper::Install(std::unique_ptr<DBusWrapper>(new TestDBusWrapper));
85 #endif
86 }
87
88 void dali_debug_rendering_cleanup(void)
89 {
90   test_return_value = TET_PASS;
91 }
92
93 int UtcDaliDebugRenderingGetVisual1(void)
94 {
95   EnvironmentVariable::SetTestingEnvironmentVariable(true);
96   ToolkitTestApplication application;
97   tet_infoline( "UtcDaliDebugRenderingGetVisual1:  Request visual with a Property::Map" );
98
99   VisualFactory factory = VisualFactory::Get();
100   DALI_TEST_CHECK( factory );
101
102   // Test that color visual is replaced with debug visual
103   Property::Map propertyMap1;
104   propertyMap1.Insert(Visual::Property::TYPE,  Visual::COLOR);
105   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
106   Visual::Base colorVisual = factory.CreateVisual(propertyMap1);
107   DALI_TEST_CHECK( colorVisual );
108   TestDebugVisual( application.GetScene(),  colorVisual, Visual::COLOR, Vector2::ZERO );
109
110   // Test that border visual is replaced with debug visual
111   Property::Map propertyMap2;
112   propertyMap2.Insert(Visual::Property::TYPE,  Visual::BORDER);
113   propertyMap2.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
114   propertyMap2.Insert(BorderVisual::Property::SIZE,  2.f);
115   Visual::Base borderVisual = factory.CreateVisual(propertyMap2);
116   DALI_TEST_CHECK( borderVisual );
117   TestDebugVisual( application.GetScene(),  borderVisual, Visual::BORDER, Vector2::ZERO );
118
119   // Test that gradient visual is replaced with debug visual
120   Property::Map propertyMap3;
121   propertyMap3.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
122   Vector2 start(-1.f, -1.f);
123   Vector2 end(1.f, 1.f);
124   propertyMap3.Insert(GradientVisual::Property::START_POSITION, start);
125   propertyMap3.Insert(GradientVisual::Property::END_POSITION, end);
126   propertyMap3.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
127   Property::Array stopOffsets;
128   stopOffsets.PushBack( 0.2f );
129   stopOffsets.PushBack( 0.8f );
130   propertyMap3.Insert(GradientVisual::Property::STOP_OFFSET, stopOffsets);
131   Property::Array stopColors;
132   stopColors.PushBack( Color::RED );
133   stopColors.PushBack( Color::GREEN );
134   propertyMap3.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
135   Visual::Base gradientVisual = factory.CreateVisual(propertyMap3);
136   DALI_TEST_CHECK( gradientVisual );
137   TestDebugVisual( application.GetScene(),  gradientVisual, Visual::GRADIENT, Vector2::ZERO );
138
139   // Test that image visual is replaced with debug visual
140   Property::Map propertyMap4;
141   propertyMap4.Insert( Toolkit::Visual::Property::TYPE,  Visual::IMAGE );
142   propertyMap4.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
143   propertyMap4.Insert( ImageVisual::Property::DESIRED_WIDTH,  50.f );
144   propertyMap4.Insert( ImageVisual::Property::DESIRED_HEIGHT,  100.f );
145   Visual::Base imageVisual = factory.CreateVisual( propertyMap4 );
146   DALI_TEST_CHECK( imageVisual );
147   TestDebugVisual( application.GetScene(),  imageVisual, Visual::IMAGE, Vector2( 50.f, 100.f ) );
148
149   // Test that SVG visual is replaced with debug visual
150   // TEST_SVG_FILE:
151   //  <svg width="100" height="100">
152   //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
153   //  </svg>
154   Property::Map propertyMap5;
155   propertyMap5.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
156   propertyMap5.Insert( ImageVisual::Property::URL,  TEST_SVG_FILE_NAME );
157   Visual::Base svgVisual = factory.CreateVisual( propertyMap5 );
158   DALI_TEST_CHECK( svgVisual );
159   TestDebugVisual( application.GetScene(),  svgVisual, Visual::SVG, Vector2(100.f, 100.f) );
160
161   // Test that AnimatedImageVisual is replaced with debug visual
162   // TEST_GIF_FILE: anim.gif
163   // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
164   Property::Map propertyMap6;
165   propertyMap6.Insert( Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE );
166   propertyMap6.Insert( ImageVisual::Property::URL,  TEST_GIF_FILE_NAME );
167   Visual::Base animatedImageVisual = factory.CreateVisual( propertyMap6 );
168   DALI_TEST_CHECK( animatedImageVisual );
169   TestDebugVisual( application.GetScene(),  animatedImageVisual, Visual::ANIMATED_IMAGE, Vector2(50.f, 50.f) );
170
171   // Test that text visual is replaced with debug visual
172
173   // Load some fonts to get the same metrics on different platforms.
174   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
175   fontClient.SetDpi( 96u, 96u );
176
177   char* pathNamePtr = get_current_dir_name();
178   const std::string pathName( pathNamePtr );
179   free( pathNamePtr );
180
181   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
182
183   Property::Map propertyMap7;
184   propertyMap7.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
185   propertyMap7.Insert( TextVisual::Property::ENABLE_MARKUP, true );
186   propertyMap7.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
187   propertyMap7.Insert( TextVisual::Property::MULTI_LINE, true );
188
189   Visual::Base textVisual = factory.CreateVisual( propertyMap7 );
190   DALI_TEST_CHECK( textVisual );
191   {
192     auto&& impl = GetImplementation( textVisual );
193     DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( impl ) );
194   }
195
196   Vector2 naturalSize;
197   textVisual.GetNaturalSize( naturalSize );
198   DALI_TEST_EQUALS( naturalSize, Vector2( 82.f, 20.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
199
200   const float height = textVisual.GetHeightForWidth( 40.f );
201   DALI_TEST_EQUALS( height, 60.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
202
203   // Test that NPatchVisual is replaced with debug visual
204   // TEST_NPATCH_FILE_NAME: image_01.9.jpg
205   Property::Map propertyMap8;
206   propertyMap8.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
207   propertyMap8.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
208   Visual::Base nPatchVisual = factory.CreateVisual( propertyMap8 );
209   DALI_TEST_CHECK( nPatchVisual );
210   TestDebugVisual( application.GetScene(),  nPatchVisual, Visual::N_PATCH, Vector2::ZERO );
211
212   EnvironmentVariable::SetTestingEnvironmentVariable(false);
213   END_TEST;
214 }
215
216 int UtcDaliDebugRenderingGetVisual2(void)
217 {
218   EnvironmentVariable::SetTestingEnvironmentVariable(true);
219   ToolkitTestApplication application;
220   tet_infoline( "UtcDaliDebugRenderingGetVisual2: Request visual with various parameters" );
221
222   VisualFactory factory = VisualFactory::Get();
223   DALI_TEST_CHECK( factory );
224
225   // Test that color visual is replaced with debug visual
226   Dali::Property::Map map;
227   map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
228   map[ ColorVisual::Property::MIX_COLOR ] = Color::CYAN;
229
230   Visual::Base colorVisual = factory.CreateVisual( map);
231   DALI_TEST_CHECK( colorVisual );
232   TestDebugVisual( application.GetScene(),  colorVisual, Visual::COLOR, Vector2::ZERO );
233
234   // Test that border visual is replaced with debug visual
235   map.Clear();
236   map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
237   map[ BorderVisual::Property::COLOR  ] = Color::GREEN;
238   map[ BorderVisual::Property::SIZE   ] = 2.f;
239   Visual::Base borderVisual = factory.CreateVisual( map );
240   DALI_TEST_CHECK( borderVisual );
241   TestDebugVisual( application.GetScene(),  borderVisual, Visual::BORDER, Vector2::ZERO );
242
243   // Test that image visual is replaced with debug visual
244   map.Clear();
245   map[ Toolkit::Visual::Property::TYPE ] = Visual::IMAGE;
246   map[ ImageVisual::Property::URL ] = TEST_IMAGE_FILE_NAME;
247   Visual::Base imageVisual = factory.CreateVisual( map );
248   DALI_TEST_CHECK( imageVisual );
249   TestDebugVisual( application.GetScene(),  imageVisual, Visual::IMAGE, Vector2(64.0f, 64.0f /* Broken Image Size */ ));
250
251   // Test that n patch visual is replaced with debug visual
252   Visual::Base nPatchVisual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
253   DALI_TEST_CHECK( nPatchVisual );
254   TestDebugVisual( application.GetScene(),  nPatchVisual, Visual::N_PATCH, Vector2::ZERO );
255
256   EnvironmentVariable::SetTestingEnvironmentVariable(false);
257   END_TEST;
258 }
259
260 int UtcDaliDebugRenderingGetVisualObject01(void)
261 {
262   EnvironmentVariable::SetTestingEnvironmentVariable( true );
263   ToolkitTestApplication application;
264
265   VisualFactory factory = VisualFactory::Get();
266   DALI_TEST_CHECK( factory );
267
268   tet_infoline( "Create a TextVisual when debugging is enabled, thus creating a proxy Wireframe Visual" );
269
270   Dali::Property::Map map;
271   map[ Toolkit::Visual::Property::TYPE ] = Visual::TEXT;
272   map[ TextVisual::Property::TEXT ] = "Hello";
273
274   Visual::Base textVisual = factory.CreateVisual( map);
275   DALI_TEST_CHECK( textVisual );
276
277   tet_infoline( "Check that GetVisualObject returns the actual TextVisual" );
278   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( textVisual ).GetVisualObject();
279   DALI_TEST_CHECK( dynamic_cast< Toolkit::Internal::TextVisual* >( &visualImpl ) );
280
281   tet_infoline( "Compare the returned TextVisual with the visual implementation, should differ" );
282   DALI_TEST_CHECK( textVisual.GetObjectPtr() != &visualImpl );
283
284   END_TEST;
285 }
286
287 int UtcDaliDebugRenderingGetVisualObject02(void)
288 {
289   ToolkitTestApplication application;
290
291   VisualFactory factory = VisualFactory::Get();
292   DALI_TEST_CHECK( factory );
293
294   tet_infoline( "Create a TextVisual without debugging enabled, thus no proxy Wireframe Visual" );
295
296   Dali::Property::Map map;
297   map[ Toolkit::Visual::Property::TYPE ] = Visual::TEXT;
298   map[ TextVisual::Property::TEXT ] = "Hello";
299
300   Visual::Base textVisual = factory.CreateVisual( map);
301   DALI_TEST_CHECK( textVisual );
302
303   tet_infoline( "Check that GetVisualObject returns the actual TextVisual" );
304   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( textVisual ).GetVisualObject();
305   DALI_TEST_CHECK( dynamic_cast< Toolkit::Internal::TextVisual* >( &visualImpl ) );
306
307   tet_infoline( "Compare the returned TextVisual with the visual implementation, should be the same" );
308   DALI_TEST_CHECK( textVisual.GetObjectPtr() == &visualImpl );
309
310   END_TEST;
311 }
312
313 int UtcDaliDebugRenderingGetVisualObject03(void)
314 {
315   ToolkitTestApplication application;
316
317   VisualFactory factory = VisualFactory::Get();
318   DALI_TEST_CHECK( factory );
319
320   tet_infoline( "Create a WireframeVisual without debugging enabled, thus no proxy Wireframe Visual either" );
321
322   Dali::Property::Map map;
323   map[ Toolkit::Visual::Property::TYPE ] = Visual::WIREFRAME;
324
325   Visual::Base textVisual = factory.CreateVisual( map);
326   DALI_TEST_CHECK( textVisual );
327
328   tet_infoline( "Check that GetVisualObject returns the WireframeVisual" );
329   Toolkit::Internal::Visual::Base& visualImpl = GetImplementation( textVisual ).GetVisualObject();
330   DALI_TEST_CHECK( dynamic_cast< Toolkit::Internal::WireframeVisual* >( &visualImpl ) );
331
332   tet_infoline( "Compare the returned Visual with the visual implementation, should be the same" );
333   DALI_TEST_CHECK( textVisual.GetObjectPtr() == &visualImpl );
334
335   END_TEST;
336 }
337
338 int UtcDaliDebugRenderingRenderText(void)
339 {
340   EnvironmentVariable::SetTestingEnvironmentVariable( true );
341   ToolkitTestApplication application;
342   tet_infoline( "Ensure we can render text when in debug mode" );
343
344   try
345   {
346     Toolkit::TextLabel label = TextLabel::New( "Hello" );
347     application.GetScene().Add( label );
348     DALI_TEST_CHECK( true );
349   } catch( ... )
350   {
351     DALI_TEST_CHECK( false );
352   }
353
354   END_TEST;
355 }