2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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>
23 #include <dali-toolkit/dali-toolkit.h>
25 #include <toolkit-environment-variable.h> // for setting environment variable: DALI_DEBUG_RENDERING
26 #include "dummy-control.h"
29 using namespace Dali::Toolkit;
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";
38 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
40 void TestDebugVisual( Visual::Base& visual, Visual::Type actualType, Vector2 expectedNaturalSize )
42 DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( GetImplementation(visual) ) );
45 visual.GetNaturalSize( naturalSize );
46 DALI_TEST_EQUALS( naturalSize, expectedNaturalSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
48 Property::Map propertyMap;
49 visual.CreatePropertyMap( propertyMap );
50 Property::Value* typeValue = propertyMap.Find( Toolkit::Visual::Property::TYPE, Property::INTEGER );
53 DALI_TEST_CHECK( typeValue->Get<int>() == actualType );
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 );
61 DALI_TEST_EQUALS( actor.GetRendererCount(), 1, TEST_LOCATION );
62 if( actor.GetRendererCount() > 0 )
64 Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
65 DALI_TEST_CHECK( geometry.GetType() == Geometry::LINES );
70 void dali_debug_rendering_startup(void)
72 test_return_value = TET_UNDEF;
75 void dali_debug_rendering_cleanup(void)
77 test_return_value = TET_PASS;
80 int UtcDaliDebugRenderingGetVisual1(void)
82 EnvironmentVariable::SetTestingEnvironmentVariable(true);
83 ToolkitTestApplication application;
84 tet_infoline( "UtcDaliDebugRenderingGetVisual1: Request visual with a Property::Map" );
86 VisualFactory factory = VisualFactory::Get();
87 DALI_TEST_CHECK( factory );
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 );
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 );
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 );
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 ) );
136 // Test that SVG visual is replaced with debug visual
138 // <svg width="100" height="100">
139 // <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
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) );
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) );
158 // Test that text visual is replaced with debug visual
160 // Load some fonts to get the same metrics on different platforms.
161 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
162 fontClient.SetDpi( 96u, 96u );
164 char* pathNamePtr = get_current_dir_name();
165 const std::string pathName( pathNamePtr );
168 fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
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 );
176 Visual::Base textVisual = factory.CreateVisual( propertyMap7 );
177 DALI_TEST_CHECK( textVisual );
178 DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( GetImplementation(textVisual) ) );
181 textVisual.GetNaturalSize( naturalSize );
182 DALI_TEST_EQUALS( naturalSize, Vector2( 80.f, 20.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
184 const float height = textVisual.GetHeightForWidth( 40.f );
185 DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
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 );
196 EnvironmentVariable::SetTestingEnvironmentVariable(false);
200 int UtcDaliDebugRenderingGetVisual2(void)
202 EnvironmentVariable::SetTestingEnvironmentVariable(true);
203 ToolkitTestApplication application;
204 tet_infoline( "UtcDaliDebugRenderingGetVisual2: Request visual with various parameters" );
206 VisualFactory factory = VisualFactory::Get();
207 DALI_TEST_CHECK( factory );
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;
214 Visual::Base colorVisual = factory.CreateVisual( map);
215 DALI_TEST_CHECK( colorVisual );
216 TestDebugVisual( colorVisual, Visual::COLOR, Vector2::ZERO );
218 // Test that border visual is replaced with debug visual
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 );
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);
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 );
238 EnvironmentVariable::SetTestingEnvironmentVariable(false);