[dali_1.2.60] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit-internal / utc-Dali-DebugRendering.cpp
1 /*
2  * Copyright (c) 2017 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
23 #include <dali-toolkit/dali-toolkit.h>
24
25 #include <toolkit-environment-variable.h> // for setting environment variable: DALI_DEBUG_RENDERING
26 #include "dummy-control.h"
27
28 using namespace Dali;
29 using namespace Dali::Toolkit;
30
31 namespace
32 {
33 const char* TEST_IMAGE_FILE_NAME =  "image_01.jpg";
34 const char* TEST_NPATCH_FILE_NAME =  "image_01.9.jpg";
35 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
36 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
37
38 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
39
40 void TestDebugVisual( Visual::Base& visual, Visual::Type actualType, Vector2 expectedNaturalSize )
41 {
42   DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( GetImplementation(visual) ) );
43
44   Vector2 naturalSize;
45   visual.GetNaturalSize( naturalSize );
46   DALI_TEST_EQUALS( naturalSize, expectedNaturalSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
47
48   Property::Map propertyMap;
49   visual.CreatePropertyMap( propertyMap );
50   Property::Value* typeValue = propertyMap.Find( Toolkit::Visual::Property::TYPE,  Property::INTEGER );
51   if ( typeValue )
52   {
53     DALI_TEST_CHECK( typeValue->Get<int>() == actualType );
54   }
55
56   DummyControl actor = DummyControl::New();
57   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
58   dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
59   Stage::GetCurrent().Add( actor );
60
61   DALI_TEST_EQUALS( actor.GetRendererCount(), 1, TEST_LOCATION );
62   if( actor.GetRendererCount() > 0 )
63   {
64     Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
65     DALI_TEST_CHECK( geometry.GetType() == Geometry::LINES );
66   }
67 }
68 }
69
70 void dali_debug_rendering_startup(void)
71 {
72   test_return_value = TET_UNDEF;
73 }
74
75 void dali_debug_rendering_cleanup(void)
76 {
77   test_return_value = TET_PASS;
78 }
79
80 int UtcDaliDebugRenderingGetVisual1(void)
81 {
82   EnvironmentVariable::SetTestingEnvironmentVariable(true);
83   ToolkitTestApplication application;
84   tet_infoline( "UtcDaliDebugRenderingGetVisual1:  Request visual with a Property::Map" );
85
86   VisualFactory factory = VisualFactory::Get();
87   DALI_TEST_CHECK( factory );
88
89   // Test that color visual is replaced with debug visual
90   Property::Map propertyMap1;
91   propertyMap1.Insert(Visual::Property::TYPE,  Visual::COLOR);
92   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
93   Visual::Base colorVisual = factory.CreateVisual(propertyMap1);
94   DALI_TEST_CHECK( colorVisual );
95   TestDebugVisual( colorVisual, Visual::COLOR, Vector2::ZERO );
96
97   // Test that border visual is replaced with debug visual
98   Property::Map propertyMap2;
99   propertyMap2.Insert(Visual::Property::TYPE,  Visual::BORDER);
100   propertyMap2.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
101   propertyMap2.Insert(BorderVisual::Property::SIZE,  2.f);
102   Visual::Base borderVisual = factory.CreateVisual(propertyMap2);
103   DALI_TEST_CHECK( borderVisual );
104   TestDebugVisual( borderVisual, Visual::BORDER, Vector2::ZERO );
105
106   // Test that gradient visual is replaced with debug visual
107   Property::Map propertyMap3;
108   propertyMap3.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
109   Vector2 start(-1.f, -1.f);
110   Vector2 end(1.f, 1.f);
111   propertyMap3.Insert(GradientVisual::Property::START_POSITION, start);
112   propertyMap3.Insert(GradientVisual::Property::END_POSITION, end);
113   propertyMap3.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
114   Property::Array stopOffsets;
115   stopOffsets.PushBack( 0.2f );
116   stopOffsets.PushBack( 0.8f );
117   propertyMap3.Insert(GradientVisual::Property::STOP_OFFSET, stopOffsets);
118   Property::Array stopColors;
119   stopColors.PushBack( Color::RED );
120   stopColors.PushBack( Color::GREEN );
121   propertyMap3.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
122   Visual::Base gradientVisual = factory.CreateVisual(propertyMap3);
123   DALI_TEST_CHECK( gradientVisual );
124   TestDebugVisual( gradientVisual, Visual::GRADIENT, Vector2::ZERO );
125
126   // Test that image visual is replaced with debug visual
127   Property::Map propertyMap4;
128   propertyMap4.Insert( Toolkit::Visual::Property::TYPE,  Visual::IMAGE );
129   propertyMap4.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
130   propertyMap4.Insert( ImageVisual::Property::DESIRED_WIDTH,  50.f );
131   propertyMap4.Insert( ImageVisual::Property::DESIRED_HEIGHT,  100.f );
132   Visual::Base imageVisual = factory.CreateVisual( propertyMap4 );
133   DALI_TEST_CHECK( imageVisual );
134   TestDebugVisual( imageVisual, Visual::IMAGE, Vector2( 50.f, 100.f ) );
135
136   // Test that SVG visual is replaced with debug visual
137   // TEST_SVG_FILE:
138   //  <svg width="100" height="100">
139   //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
140   //  </svg>
141   Property::Map propertyMap5;
142   propertyMap5.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
143   propertyMap5.Insert( ImageVisual::Property::URL,  TEST_SVG_FILE_NAME );
144   Visual::Base svgVisual = factory.CreateVisual( propertyMap5 );
145   DALI_TEST_CHECK( svgVisual );
146   TestDebugVisual( svgVisual, Visual::SVG, Vector2(100.f, 100.f) );
147
148   // Test that AnimatedImageVisual is replaced with debug visual
149   // TEST_GIF_FILE: anim.gif
150   // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
151   Property::Map propertyMap6;
152   propertyMap6.Insert( Toolkit::Visual::Property::TYPE, Visual::ANIMATED_IMAGE );
153   propertyMap6.Insert( ImageVisual::Property::URL,  TEST_GIF_FILE_NAME );
154   Visual::Base animatedImageVisual = factory.CreateVisual( propertyMap6 );
155   DALI_TEST_CHECK( animatedImageVisual );
156   TestDebugVisual( animatedImageVisual, Visual::ANIMATED_IMAGE, Vector2(50.f, 50.f) );
157
158   // Test that text visual is replaced with debug visual
159
160   // Load some fonts to get the same metrics on different platforms.
161   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
162   fontClient.SetDpi( 96u, 96u );
163
164   char* pathNamePtr = get_current_dir_name();
165   const std::string pathName( pathNamePtr );
166   free( pathNamePtr );
167
168   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
169
170   Property::Map propertyMap7;
171   propertyMap7.Insert( Toolkit::Visual::Property::TYPE, Visual::TEXT );
172   propertyMap7.Insert( TextVisual::Property::ENABLE_MARKUP, true );
173   propertyMap7.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
174   propertyMap7.Insert( TextVisual::Property::MULTI_LINE, true );
175
176   Visual::Base textVisual = factory.CreateVisual( propertyMap7 );
177   DALI_TEST_CHECK( textVisual );
178   DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( GetImplementation(textVisual) ) );
179
180   Vector2 naturalSize;
181   textVisual.GetNaturalSize( naturalSize );
182   DALI_TEST_EQUALS( naturalSize, Vector2( 80.f, 20.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
183
184   const float height = textVisual.GetHeightForWidth( 40.f );
185   DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
186
187   // Test that NPatchVisual is replaced with debug visual
188   // TEST_NPATCH_FILE_NAME: image_01.9.jpg
189   Property::Map propertyMap8;
190   propertyMap8.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
191   propertyMap8.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
192   Visual::Base nPatchVisual = factory.CreateVisual( propertyMap8 );
193   DALI_TEST_CHECK( nPatchVisual );
194   TestDebugVisual( nPatchVisual, Visual::N_PATCH, Vector2::ZERO );
195
196   EnvironmentVariable::SetTestingEnvironmentVariable(false);
197   END_TEST;
198 }
199
200 int UtcDaliDebugRenderingGetVisual2(void)
201 {
202   EnvironmentVariable::SetTestingEnvironmentVariable(true);
203   ToolkitTestApplication application;
204   tet_infoline( "UtcDaliDebugRenderingGetVisual2: Request visual with various parameters" );
205
206   VisualFactory factory = VisualFactory::Get();
207   DALI_TEST_CHECK( factory );
208
209   // Test that color visual is replaced with debug visual
210   Dali::Property::Map map;
211   map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
212   map[ ColorVisual::Property::MIX_COLOR ] = Color::CYAN;
213
214   Visual::Base colorVisual = factory.CreateVisual( map);
215   DALI_TEST_CHECK( colorVisual );
216   TestDebugVisual( colorVisual, Visual::COLOR, Vector2::ZERO );
217
218   // Test that border visual is replaced with debug visual
219   map.Clear();
220   map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
221   map[ BorderVisual::Property::COLOR  ] = Color::GREEN;
222   map[ BorderVisual::Property::SIZE   ] = 2.f;
223   Visual::Base borderVisual = factory.CreateVisual( map );
224   DALI_TEST_CHECK( borderVisual );
225   TestDebugVisual( borderVisual, Visual::BORDER, Vector2::ZERO );
226
227   // Test that image visual is replaced with debug visual
228   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
229   Visual::Base imageVisual = factory.CreateVisual( image );
230   DALI_TEST_CHECK( imageVisual );
231   TestDebugVisual( imageVisual, Visual::IMAGE, Vector2::ZERO);
232
233   // Test that n patch visual is replaced with debug visual
234   Visual::Base nPatchVisual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
235   DALI_TEST_CHECK( nPatchVisual );
236   TestDebugVisual( nPatchVisual, Visual::N_PATCH, Vector2::ZERO );
237
238   EnvironmentVariable::SetTestingEnvironmentVariable(false);
239   END_TEST;
240 }