2 * Copyright (c) 2015 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/devel-api/rendering/renderer.h>
21 #include <dali/devel-api/rendering/material.h>
22 #include <dali/devel-api/rendering/shader.h>
23 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
26 using namespace Dali::Toolkit;
30 const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg";
31 const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg";
34 void dali_control_renderer_startup(void)
36 test_return_value = TET_UNDEF;
39 void dali_control_renderer_cleanup(void)
41 test_return_value = TET_PASS;
44 int UtcDaliControlRendererCopyAndAssignment(void)
46 ToolkitTestApplication application;
47 tet_infoline( "UtcDaliControlRendererCopyAndAssignment" );
49 RendererFactory factory = RendererFactory::Get();
50 Property::Map propertyMap;
51 propertyMap.Insert("renderer-type", "color-renderer");
52 propertyMap.Insert("blend-color", Color::BLUE);
53 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
55 ControlRenderer controlRendererCopy( controlRenderer );
56 DALI_TEST_CHECK(controlRenderer == controlRendererCopy);
58 ControlRenderer emptyControlRenderer;
59 ControlRenderer emptyControlRendererCopy( emptyControlRenderer );
60 DALI_TEST_CHECK(emptyControlRenderer == emptyControlRendererCopy);
62 ControlRenderer controlRendererEquals;
63 controlRendererEquals = controlRenderer;
64 DALI_TEST_CHECK(controlRenderer == controlRendererEquals);
66 ControlRenderer emptyControlRendererEquals;
67 emptyControlRendererEquals = emptyControlRenderer;
68 DALI_TEST_CHECK( emptyControlRenderer == emptyControlRendererEquals );
71 controlRenderer = controlRenderer;
72 DALI_TEST_CHECK( controlRenderer = controlRendererCopy );
77 int UtcDaliControlRendererSetDepthIndex(void)
79 ToolkitTestApplication application;
80 tet_infoline( "UtcDaliControlRendererSetDepthIndex" );
82 RendererFactory factory = RendererFactory::Get();
83 Property::Map propertyMap;
84 propertyMap.Insert("renderer-type", "color-renderer");
85 propertyMap.Insert("blend-color", Color::BLUE);
86 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
88 controlRenderer.SetDepthIndex( 1.f );
90 Actor actor = Actor::New();
91 actor.SetSize(200.f, 200.f);
92 Stage::GetCurrent().Add( actor );
93 controlRenderer.SetOnStage( actor );
95 DALI_TEST_EQUALS( actor.GetRendererAt(0u).GetDepthIndex(), 1.f, TEST_LOCATION );
97 controlRenderer.SetDepthIndex( -1.f );
98 DALI_TEST_EQUALS( actor.GetRendererAt(0u).GetDepthIndex(), -1.f, TEST_LOCATION );
103 int UtcDaliControlRendererSetOnOffStage(void)
105 ToolkitTestApplication application;
106 tet_infoline( "UtcDaliControlRendererSetDepthIndex" );
108 RendererFactory factory = RendererFactory::Get();
109 Property::Map propertyMap;
110 propertyMap.Insert("renderer-type", "color-renderer");
111 propertyMap.Insert("blend-color", Color::BLUE);
112 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
114 Actor actor = Actor::New();
115 actor.SetSize(200.f, 200.f);
116 Stage::GetCurrent().Add( actor );
118 application.SendNotification();
119 application.Render(0);
120 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
122 controlRenderer.SetOnStage( actor );
123 application.SendNotification();
124 application.Render(0);
125 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
127 controlRenderer.SetOffStage( actor );
128 application.SendNotification();
129 application.Render(0);
130 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
135 int UtcDaliControlRendererGetPropertyMap1(void)
137 ToolkitTestApplication application;
138 tet_infoline( "UtcDaliControlRendererGetPropertyMap1: ColorRenderer" );
140 RendererFactory factory = RendererFactory::Get();
141 Property::Map propertyMap;
142 propertyMap.Insert("renderer-type", "color-renderer");
143 propertyMap.Insert("blend-color", Color::BLUE);
144 ControlRenderer colorRenderer = factory.GetControlRenderer( propertyMap );
146 Property::Map resultMap;
147 colorRenderer.CreatePropertyMap( resultMap );
149 Property::Value* typeValue = resultMap.Find( "renderer-type", Property::STRING );
150 DALI_TEST_CHECK( typeValue );
151 DALI_TEST_CHECK( typeValue->Get<std::string>() == "color-renderer" );
153 Property::Value* colorValue = resultMap.Find( "blend-color", Property::VECTOR4 );
154 DALI_TEST_CHECK( colorValue );
155 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
157 // change the blend color
158 factory.ResetRenderer( colorRenderer, Color::CYAN );
159 colorRenderer.CreatePropertyMap( resultMap );
161 colorValue = resultMap.Find( "blend-color", Property::VECTOR4 );
162 DALI_TEST_CHECK( colorValue );
163 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
168 int UtcDaliControlRendererGetPropertyMap2(void)
170 ToolkitTestApplication application;
171 tet_infoline( "UtcDaliControlRendererGetPropertyMap2: BorderRenderer" );
173 RendererFactory factory = RendererFactory::Get();
174 Property::Map propertyMap;
175 propertyMap.Insert("renderer-type", "border-renderer");
176 propertyMap.Insert("border-color", Color::BLUE);
177 propertyMap.Insert("border-size", 5.f);
178 ControlRenderer borderRenderer = factory.GetControlRenderer( propertyMap );
180 Property::Map resultMap;
181 borderRenderer.CreatePropertyMap( resultMap );
183 // check the property values from the returned map from control renderer
184 Property::Value* typeValue = resultMap.Find( "renderer-type", Property::STRING );
185 DALI_TEST_CHECK( typeValue );
186 DALI_TEST_CHECK( typeValue->Get<std::string>() == "border-renderer" );
188 Property::Value* colorValue = resultMap.Find( "border-color", Property::VECTOR4 );
189 DALI_TEST_CHECK( colorValue );
190 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
192 Property::Value* sizeValue = resultMap.Find( "border-size", Property::FLOAT );
193 DALI_TEST_CHECK( sizeValue );
194 DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
196 borderRenderer = factory.GetControlRenderer( 10.f, Color::CYAN );
197 borderRenderer.CreatePropertyMap( resultMap );
199 typeValue = resultMap.Find( "renderer-type", Property::STRING );
200 DALI_TEST_CHECK( typeValue );
201 DALI_TEST_CHECK( typeValue->Get<std::string>() == "border-renderer" );
203 colorValue = resultMap.Find( "border-color", Property::VECTOR4 );
204 DALI_TEST_CHECK( colorValue );
205 DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
207 colorValue = resultMap.Find( "border-size", Property::FLOAT );
208 DALI_TEST_CHECK( colorValue );
209 DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
214 int UtcDaliControlRendererGetPropertyMap3(void)
216 ToolkitTestApplication application;
217 tet_infoline( "UtcDaliControlRendererGetPropertyMap3: linear GradientRenderer" );
219 RendererFactory factory = RendererFactory::Get();
220 DALI_TEST_CHECK( factory );
222 Property::Map propertyMap;
223 propertyMap.Insert("renderer-type", "gradient-renderer");
225 Vector2 start(-1.f, -1.f);
226 Vector2 end(1.f, 1.f);
227 propertyMap.Insert("gradient-start-position", start);
228 propertyMap.Insert("gradient-end-position", end);
229 propertyMap.Insert("gradient-spread-method", "repeat");
231 propertyMap.Insert("gradient-stop-offset", Vector2(0.2f, 0.8f));
233 Property::Array stopColors;
234 stopColors.PushBack( Color::RED );
235 stopColors.PushBack( Color::GREEN );
236 propertyMap.Insert("gradient-stop-color", stopColors);
238 ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap);
240 Property::Map resultMap;
241 gradientRenderer.CreatePropertyMap( resultMap );
243 // check the property values from the returned map from control renderer
244 Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
245 DALI_TEST_CHECK( value );
246 DALI_TEST_CHECK( value->Get<std::string>() == "gradient-renderer" );
248 value = resultMap.Find( "gradient-units", Property::STRING );
249 DALI_TEST_CHECK( value );
250 DALI_TEST_CHECK( value->Get<std::string>() == "object-bounding-box" );
252 value = resultMap.Find( "gradient-spread-method", Property::STRING );
253 DALI_TEST_CHECK( value );
254 DALI_TEST_CHECK( value->Get<std::string>() == "repeat" );
256 value = resultMap.Find( "gradient-start-position", Property::VECTOR2 );
257 DALI_TEST_CHECK( value );
258 DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
260 value = resultMap.Find( "gradient-end-position", Property::VECTOR2 );
261 DALI_TEST_CHECK( value );
262 DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
264 value = resultMap.Find( "gradient-stop-offset", Property::ARRAY );
265 DALI_TEST_CHECK( value );
266 Property::Array* offsetArray = value->GetArray();
267 DALI_TEST_CHECK( offsetArray->Count() == 2 );
268 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
269 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
271 value = resultMap.Find( "gradient-stop-color", Property::ARRAY );
272 DALI_TEST_CHECK( value );
273 Property::Array* colorArray = value->GetArray();
274 DALI_TEST_CHECK( colorArray->Count() == 2 );
275 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
276 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
281 int UtcDaliControlRendererGetPropertyMap4(void)
283 ToolkitTestApplication application;
284 tet_infoline( "UtcDaliControlRendererGetPropertyMap4: radial GradientRenderer" );
286 RendererFactory factory = RendererFactory::Get();
287 DALI_TEST_CHECK( factory );
289 Property::Map propertyMap;
290 propertyMap.Insert("renderer-type", "gradient-renderer");
292 Vector2 center(100.f, 100.f);
293 float radius = 100.f;
294 propertyMap.Insert("gradient-units", "user-space");
295 propertyMap.Insert("gradient-center", center);
296 propertyMap.Insert("gradient-radius", radius);
297 propertyMap.Insert("gradient-stop-offset", Vector3(0.1f, 0.3f, 1.1f));
299 Property::Array stopColors;
300 stopColors.PushBack( Color::RED );
301 stopColors.PushBack( Color::BLACK );
302 stopColors.PushBack( Color::GREEN );
303 propertyMap.Insert("gradient-stop-color", stopColors);
305 ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap);
306 DALI_TEST_CHECK( gradientRenderer );
308 Property::Map resultMap;
309 gradientRenderer.CreatePropertyMap( resultMap );
311 // check the property values from the returned map from control renderer
312 Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
313 DALI_TEST_CHECK( value );
314 DALI_TEST_CHECK( value->Get<std::string>() == "gradient-renderer" );
316 value = resultMap.Find( "gradient-units", Property::STRING );
317 DALI_TEST_CHECK( value );
318 DALI_TEST_CHECK( value->Get<std::string>() == "user-space" );
320 value = resultMap.Find( "gradient-spread-method", Property::STRING );
321 DALI_TEST_CHECK( value );
322 DALI_TEST_CHECK( value->Get<std::string>() == "pad" );
324 value = resultMap.Find( "gradient-center", Property::VECTOR2 );
325 DALI_TEST_CHECK( value );
326 DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
328 value = resultMap.Find( "gradient-radius", Property::FLOAT );
329 DALI_TEST_CHECK( value );
330 DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
332 value = resultMap.Find( "gradient-stop-offset", Property::ARRAY );
333 DALI_TEST_CHECK( value );
334 Property::Array* offsetArray = value->GetArray();
335 DALI_TEST_CHECK( offsetArray->Count() == 3 );
336 DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
337 DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
338 // any stop value will be clamped to [0.0, 1.0];
339 DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
341 value = resultMap.Find( "gradient-stop-color", Property::ARRAY );
342 DALI_TEST_CHECK( value );
343 Property::Array* colorArray = value->GetArray();
344 DALI_TEST_CHECK( colorArray->Count() == 3 );
345 DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
346 DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
347 DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
352 int UtcDaliControlRendererGetPropertyMap5(void)
354 ToolkitTestApplication application;
355 tet_infoline( "UtcDaliControlRendererGetPropertyMap5: ImageRenderer" );
357 RendererFactory factory = RendererFactory::Get();
358 Property::Map propertyMap;
359 propertyMap.Insert( "renderer-type", "image-renderer" );
360 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
361 propertyMap.Insert( "image-desired-width", 20 );
362 propertyMap.Insert( "image-desired-height", 30 );
363 propertyMap.Insert( "image-fitting-mode", "fit-height" );
364 propertyMap.Insert( "image-sampling-mode", "box-then-nearest" );
366 ControlRenderer imageRenderer = factory.GetControlRenderer(propertyMap);
367 DALI_TEST_CHECK( imageRenderer );
369 Property::Map resultMap;
370 imageRenderer.CreatePropertyMap( resultMap );
372 // check the property values from the returned map from control renderer
373 Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
374 DALI_TEST_CHECK( value );
375 DALI_TEST_CHECK( value->Get<std::string>() == "image-renderer" );
377 value = resultMap.Find( "image-url", Property::STRING );
378 DALI_TEST_CHECK( value );
379 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
381 value = resultMap.Find( "image-fitting-mode", Property::STRING );
382 DALI_TEST_CHECK( value );
383 DALI_TEST_CHECK( value->Get<std::string>() == "fit-height" );
385 value = resultMap.Find( "image-sampling-mode", Property::STRING );
386 DALI_TEST_CHECK( value );
387 DALI_TEST_CHECK( value->Get<std::string>() == "box-then-nearest" );
389 value = resultMap.Find( "image-desired-width", Property::INTEGER );
390 DALI_TEST_CHECK( value );
391 DALI_TEST_CHECK( value->Get<int>() == 20 );
393 value = resultMap.Find( "image-desired-height", Property::INTEGER );
394 DALI_TEST_CHECK( value );
395 DALI_TEST_CHECK( value->Get<int>() == 30 );
397 // Get an image renderer with an image handle, and test the default property values
398 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
399 imageRenderer = factory.GetControlRenderer(image);
400 imageRenderer.CreatePropertyMap( resultMap );
402 value = resultMap.Find( "renderer-type", Property::STRING );
403 DALI_TEST_CHECK( value );
404 DALI_TEST_CHECK( value->Get<std::string>() == "image-renderer" );
406 value = resultMap.Find( "image-url", Property::STRING );
407 DALI_TEST_CHECK( value );
408 DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
410 value = resultMap.Find( "image-fitting-mode", Property::STRING );
411 DALI_TEST_CHECK( value );
412 DALI_TEST_CHECK( value->Get<std::string>() == "shrink-to-fit" );
414 value = resultMap.Find( "image-sampling-mode", Property::STRING );
415 DALI_TEST_CHECK( value );
416 DALI_TEST_CHECK( value->Get<std::string>() == "box" );
418 value = resultMap.Find( "image-desired-width", Property::INTEGER );
419 DALI_TEST_CHECK( value );
420 DALI_TEST_CHECK( value->Get<int>() == 100 );
422 value = resultMap.Find( "image-desired-height", Property::INTEGER );
423 DALI_TEST_CHECK( value );
424 DALI_TEST_CHECK( value->Get<int>() == 200 );
429 int UtcDaliControlRendererGetPropertyMap6(void)
431 ToolkitTestApplication application;
432 tet_infoline( "UtcDaliControlRendererGetPropertyMap6: NPatchRenderer" );
434 RendererFactory factory = RendererFactory::Get();
435 Property::Map propertyMap;
436 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
437 propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
438 propertyMap.Insert( "border-only", true );
439 ControlRenderer nPatchRenderer = factory.GetControlRenderer( propertyMap );
441 Property::Map resultMap;
442 nPatchRenderer.CreatePropertyMap( resultMap );
444 // check the property values from the returned map from control renderer
445 Property::Value* value = resultMap.Find( "renderer-type", Property::STRING );
446 DALI_TEST_CHECK( value );
447 DALI_TEST_CHECK( value->Get<std::string>() == "n-patch-renderer" );
449 value = resultMap.Find( "image-url", Property::STRING );
450 DALI_TEST_CHECK( value );
451 DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
453 value = resultMap.Find( "border-only", Property::BOOLEAN );
454 DALI_TEST_CHECK( value );
455 DALI_TEST_CHECK( value->Get<bool>() );