ef9dab836de1358d0fb51c098c08c838119cafd4
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Visual.cpp
1 /*
2  * Copyright (c) 2016 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 <iostream>
18 #include <stdlib.h>
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <dali/public-api/rendering/renderer.h>
21 #include <dali/public-api/rendering/texture-set.h>
22 #include <dali/public-api/rendering/shader.h>
23 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
24 #include <dali-toolkit/dali-toolkit.h>
25
26 using namespace Dali;
27 using namespace Dali::Toolkit;
28
29 namespace
30 {
31 const char* TEST_IMAGE_FILE_NAME =  "gallery_image_01.jpg";
32 const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
33 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
34 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
35 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
36 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
37 }
38
39 void dali_visual_startup(void)
40 {
41   test_return_value = TET_UNDEF;
42 }
43
44 void dali_visual_cleanup(void)
45 {
46   test_return_value = TET_PASS;
47 }
48
49 int UtcDaliVisualCopyAndAssignment(void)
50 {
51   ToolkitTestApplication application;
52   tet_infoline( "UtcDaliVisualCopyAndAssignment" );
53
54   VisualFactory factory = VisualFactory::Get();
55   Property::Map propertyMap;
56   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
57   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
58   Visual::Base visual = factory.CreateVisual( propertyMap );
59
60   Visual::Base visualCopy( visual );
61   DALI_TEST_CHECK(visual == visualCopy);
62
63   Visual::Base emptyVisual;
64   Visual::Base emptyVisualCopy( emptyVisual );
65   DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
66
67   Visual::Base visualEquals;
68   visualEquals = visual;
69   DALI_TEST_CHECK(visual == visualEquals);
70
71   Visual::Base emptyVisualEquals;
72   emptyVisualEquals = emptyVisual;
73   DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
74
75   //self assignment
76   visual = visual;
77   DALI_TEST_CHECK( visual = visualCopy );
78
79   END_TEST;
80 }
81
82 int UtcDaliVisualSetGetDepthIndex(void)
83 {
84   ToolkitTestApplication application;
85   tet_infoline( "UtcDaliVisualSetDepthIndex" );
86
87   VisualFactory factory = VisualFactory::Get();
88   Property::Map propertyMap;
89   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
90   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
91   Visual::Base visual = factory.CreateVisual( propertyMap );
92
93   visual.SetDepthIndex( 1.f );
94
95   Actor actor = Actor::New();
96   actor.SetSize(200.f, 200.f);
97   Stage::GetCurrent().Add( actor );
98   visual.SetOnStage( actor );
99
100   int depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
101   DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
102   DALI_TEST_EQUALS( visual.GetDepthIndex(), 1.f, TEST_LOCATION );
103
104   visual.SetDepthIndex( -1.f );
105   depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
106   DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
107   DALI_TEST_EQUALS( visual.GetDepthIndex(), -1.f, TEST_LOCATION );
108
109   END_TEST;
110 }
111
112 int UtcDaliVisualSize(void)
113 {
114   ToolkitTestApplication application;
115   tet_infoline( "UtcDaliVisualGetNaturalSize" );
116
117   VisualFactory factory = VisualFactory::Get();
118   Vector2 visualSize( 20.f, 30.f );
119   Vector2 naturalSize;
120
121   // color colorVisual
122   Dali::Property::Map map;
123   map[ Visual::Property::TYPE ] = Visual::COLOR;
124   map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
125   Visual::Base colorVisual = factory.CreateVisual( map );
126   colorVisual.SetSize( visualSize );
127   DALI_TEST_EQUALS( colorVisual.GetSize(), visualSize, TEST_LOCATION );
128   colorVisual.GetNaturalSize(naturalSize);
129   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
130
131   // image visual
132   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
133   Visual::Base imageVisual = factory.CreateVisual( image );
134   imageVisual.SetSize( visualSize );
135   DALI_TEST_EQUALS( imageVisual.GetSize(), visualSize, TEST_LOCATION );
136   imageVisual.GetNaturalSize(naturalSize);
137   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
138
139   // n patch visual
140   TestPlatformAbstraction& platform = application.GetPlatform();
141   Vector2 testSize(80.f, 160.f);
142   platform.SetClosestImageSize(testSize);
143   image = ResourceImage::New(TEST_NPATCH_FILE_NAME);
144   Visual::Base nPatchVisual = factory.CreateVisual( image );
145   nPatchVisual.SetSize( visualSize );
146   DALI_TEST_EQUALS( nPatchVisual.GetSize(), visualSize, TEST_LOCATION );
147   nPatchVisual.GetNaturalSize(naturalSize);
148   DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION );
149
150   // border visual
151   float borderSize = 5.f;
152   map.Clear();
153   map[ Visual::Property::TYPE ] = Visual::BORDER;
154   map[ BorderVisual::Property::COLOR  ] = Color::RED;
155   map[ BorderVisual::Property::SIZE   ] = borderSize;
156   Visual::Base borderVisual = factory.CreateVisual( map );
157   borderVisual.SetSize( visualSize );
158   DALI_TEST_EQUALS( borderVisual.GetSize(), visualSize, TEST_LOCATION );
159   borderVisual.GetNaturalSize(naturalSize);
160   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
161
162   // gradient gradientVisual
163   Property::Map propertyMap;
164   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
165   Vector2 start(-1.f, -1.f);
166   Vector2 end(1.f, 1.f);
167   propertyMap.Insert(GradientVisual::Property::START_POSITION,   start);
168   propertyMap.Insert(GradientVisual::Property::END_POSITION,   end);
169   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.f, 1.f));
170   Property::Array stopColors;
171   stopColors.PushBack( Color::RED );
172   stopColors.PushBack( Color::GREEN );
173   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
174   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
175   gradientVisual.SetSize( visualSize );
176   DALI_TEST_EQUALS( gradientVisual.GetSize(), visualSize, TEST_LOCATION );
177   gradientVisual.GetNaturalSize(naturalSize);
178   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
179
180   // svg visual
181   Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
182   svgVisual.SetSize( visualSize );
183   DALI_TEST_EQUALS( svgVisual.GetSize(), visualSize, TEST_LOCATION );
184   svgVisual.GetNaturalSize(naturalSize);
185   // TEST_SVG_FILE:
186   //  <svg width="100" height="100">
187   //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
188   //  </svg>
189   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
190
191   // Batch Image visual
192   propertyMap.Clear();
193   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
194   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
195   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
196   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
197   batchImageVisual.SetSize( visualSize );
198   DALI_TEST_EQUALS( batchImageVisual.GetSize(), visualSize, TEST_LOCATION );
199   batchImageVisual.GetNaturalSize( naturalSize );
200   DALI_TEST_EQUALS( naturalSize, Vector2( 80.0f, 160.0f ), TEST_LOCATION );
201
202   END_TEST;
203 }
204
205 int UtcDaliVisualSetOnOffStage(void)
206 {
207   ToolkitTestApplication application;
208   tet_infoline( "UtcDaliVisualSetDepthIndex" );
209
210   VisualFactory factory = VisualFactory::Get();
211   Property::Map propertyMap;
212   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
213   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
214   Visual::Base visual = factory.CreateVisual( propertyMap );
215
216   Actor actor = Actor::New();
217   actor.SetSize(200.f, 200.f);
218   Stage::GetCurrent().Add( actor );
219
220   application.SendNotification();
221   application.Render(0);
222   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
223
224   visual.SetOnStage( actor );
225   application.SendNotification();
226   application.Render(0);
227   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
228
229   visual.SetOffStage( actor );
230   application.SendNotification();
231   application.Render(0);
232   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
233
234   END_TEST;
235 }
236
237 int UtcDaliVisualRemoveAndReset(void)
238 {
239   ToolkitTestApplication application;
240   tet_infoline( "intUtcDaliVisualRemoveAndReset" );
241
242   VisualFactory factory = VisualFactory::Get();
243
244   Actor actor = Actor::New();
245   actor.SetSize(200.f, 200.f);
246   Stage::GetCurrent().Add( actor );
247
248   Visual::Base imageVisual;
249   // test calling RemoveAndReset with an empty handle
250   try
251   {
252     imageVisual.RemoveAndReset( actor );
253     tet_result(TET_PASS);
254   }
255   catch (DaliException& exception)
256   {
257     tet_result(TET_FAIL);
258   }
259
260   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
261   imageVisual = factory.CreateVisual(image);
262   DALI_TEST_CHECK( imageVisual );
263
264   imageVisual.SetOnStage( actor );
265   application.SendNotification();
266   application.Render(0);
267   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
268
269   imageVisual.RemoveAndReset( actor );
270   application.SendNotification();
271   application.Render(0);
272   DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); // visual is removed from actor
273   DALI_TEST_CHECK( !imageVisual ); // visual is reset
274
275   END_TEST;
276 }
277
278 int UtcDaliVisualGetPropertyMap1(void)
279 {
280   ToolkitTestApplication application;
281   tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual" );
282
283   VisualFactory factory = VisualFactory::Get();
284   Property::Map propertyMap;
285   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
286   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
287   Visual::Base colorVisual = factory.CreateVisual( propertyMap );
288
289   Property::Map resultMap;
290   colorVisual.CreatePropertyMap( resultMap );
291
292   Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
293   DALI_TEST_CHECK( typeValue );
294   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
295
296   Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
297   DALI_TEST_CHECK( colorValue );
298   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
299
300   // change the blend color
301   Actor actor;
302   colorVisual.RemoveAndReset( actor );
303   propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
304   colorVisual = factory.CreateVisual( propertyMap  );
305   colorVisual.CreatePropertyMap( resultMap );
306
307   colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
308   DALI_TEST_CHECK( colorValue );
309   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
310
311   END_TEST;
312 }
313
314 int UtcDaliVisualGetPropertyMap2(void)
315 {
316   ToolkitTestApplication application;
317   tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
318
319   VisualFactory factory = VisualFactory::Get();
320   Property::Map propertyMap;
321   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
322   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
323   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
324   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
325
326   Property::Map resultMap;
327   borderVisual.CreatePropertyMap( resultMap );
328
329   // check the property values from the returned map from visual
330   Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
331   DALI_TEST_CHECK( typeValue );
332   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
333
334   Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
335   DALI_TEST_CHECK( colorValue );
336   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
337
338   Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
339   DALI_TEST_CHECK( sizeValue );
340   DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
341
342   Property::Map propertyMap1;
343   propertyMap1[ Visual::Property::TYPE ] = Visual::BORDER;
344   propertyMap1[ BorderVisual::Property::COLOR  ] = Color::CYAN;
345   propertyMap1[ BorderVisual::Property::SIZE   ] = 10.0f;
346   borderVisual = factory.CreateVisual( propertyMap1 );
347   borderVisual.CreatePropertyMap( resultMap );
348
349   typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
350   DALI_TEST_CHECK( typeValue );
351   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
352
353   colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
354   DALI_TEST_CHECK( colorValue );
355   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
356
357   colorValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
358   DALI_TEST_CHECK( colorValue );
359   DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
360
361   END_TEST;
362 }
363
364 int UtcDaliVisualGetPropertyMap3(void)
365 {
366   ToolkitTestApplication application;
367   tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
368
369   VisualFactory factory = VisualFactory::Get();
370   DALI_TEST_CHECK( factory );
371
372   Property::Map propertyMap;
373   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
374
375   Vector2 start(-1.f, -1.f);
376   Vector2 end(1.f, 1.f);
377   propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
378   propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
379   propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
380
381   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.2f, 0.8f));
382
383   Property::Array stopColors;
384   stopColors.PushBack( Color::RED );
385   stopColors.PushBack( Color::GREEN );
386   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
387
388   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
389
390   Property::Map resultMap;
391   gradientVisual.CreatePropertyMap( resultMap );
392
393   // check the property values from the returned map from visual
394   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
395   DALI_TEST_CHECK( value );
396   DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
397
398   value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
399   DALI_TEST_CHECK( value );
400   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
401
402   value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
403   DALI_TEST_CHECK( value );
404   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
405
406   value = resultMap.Find( GradientVisual::Property::START_POSITION,   Property::VECTOR2 );
407   DALI_TEST_CHECK( value );
408   DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
409
410   value = resultMap.Find( GradientVisual::Property::END_POSITION,   Property::VECTOR2 );
411   DALI_TEST_CHECK( value );
412   DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
413
414   value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
415   DALI_TEST_CHECK( value );
416   Property::Array* offsetArray = value->GetArray();
417   DALI_TEST_CHECK( offsetArray->Count() == 2 );
418   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
419   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
420
421   value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
422   DALI_TEST_CHECK( value );
423   Property::Array* colorArray = value->GetArray();
424   DALI_TEST_CHECK( colorArray->Count() == 2 );
425   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
426   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
427
428   END_TEST;
429 }
430
431 int UtcDaliVisualGetPropertyMap4(void)
432 {
433   ToolkitTestApplication application;
434   tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
435
436   VisualFactory factory = VisualFactory::Get();
437   DALI_TEST_CHECK( factory );
438
439   Property::Map propertyMap;
440   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
441
442   Vector2 center(100.f, 100.f);
443   float radius = 100.f;
444   propertyMap.Insert(GradientVisual::Property::UNITS,  GradientVisual::Units::USER_SPACE);
445   propertyMap.Insert(GradientVisual::Property::CENTER,  center);
446   propertyMap.Insert(GradientVisual::Property::RADIUS,  radius);
447   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector3(0.1f, 0.3f, 1.1f));
448
449   Property::Array stopColors;
450   stopColors.PushBack( Color::RED );
451   stopColors.PushBack( Color::BLACK );
452   stopColors.PushBack( Color::GREEN );
453   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
454
455   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
456   DALI_TEST_CHECK( gradientVisual );
457
458   Property::Map resultMap;
459   gradientVisual.CreatePropertyMap( resultMap );
460
461   // check the property values from the returned map from visual
462   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
463   DALI_TEST_CHECK( value );
464   DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
465
466   value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
467   DALI_TEST_CHECK( value );
468   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
469
470   value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
471   DALI_TEST_CHECK( value );
472   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
473
474   value = resultMap.Find( GradientVisual::Property::CENTER,  Property::VECTOR2 );
475   DALI_TEST_CHECK( value );
476   DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
477
478   value = resultMap.Find( GradientVisual::Property::RADIUS,  Property::FLOAT );
479   DALI_TEST_CHECK( value );
480   DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
481
482   value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
483   DALI_TEST_CHECK( value );
484   Property::Array* offsetArray = value->GetArray();
485   DALI_TEST_CHECK( offsetArray->Count() == 3 );
486   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
487   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
488   // any stop value will be clamped to [0.0, 1.0];
489   DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
490
491   value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
492   DALI_TEST_CHECK( value );
493   Property::Array* colorArray = value->GetArray();
494   DALI_TEST_CHECK( colorArray->Count() == 3 );
495   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
496   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
497   DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
498
499   END_TEST;
500 }
501
502 int UtcDaliVisualGetPropertyMap5(void)
503 {
504   ToolkitTestApplication application;
505   tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
506
507   VisualFactory factory = VisualFactory::Get();
508   Property::Map propertyMap;
509   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
510   propertyMap.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
511   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH,   20 );
512   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT,   30 );
513   propertyMap.Insert( ImageVisual::Property::FITTING_MODE,   FittingMode::FIT_HEIGHT );
514   propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE,   SamplingMode::BOX_THEN_NEAREST );
515   propertyMap.Insert( "synchronousLoading",   true );
516
517   Visual::Base imageVisual = factory.CreateVisual(propertyMap);
518   DALI_TEST_CHECK( imageVisual );
519
520   Property::Map resultMap;
521   imageVisual.CreatePropertyMap( resultMap );
522
523   // check the property values from the returned map from visual
524   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
525   DALI_TEST_CHECK( value );
526   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
527
528   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
529   DALI_TEST_CHECK( value );
530   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
531
532   value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
533   DALI_TEST_CHECK( value );
534   DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
535
536   value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
537   DALI_TEST_CHECK( value );
538   DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
539
540   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
541   DALI_TEST_CHECK( value );
542   DALI_TEST_CHECK( value->Get<int>() == 20 );
543
544   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
545   DALI_TEST_CHECK( value );
546   DALI_TEST_CHECK( value->Get<int>() == 30 );
547
548   value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
549   DALI_TEST_CHECK( value );
550   DALI_TEST_CHECK( value->Get<bool>() == true );
551
552   // Get an image visual with an image handle, and test the default property values
553   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
554   imageVisual = factory.CreateVisual(image);
555   imageVisual.CreatePropertyMap( resultMap );
556
557   value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
558   DALI_TEST_CHECK( value );
559   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
560
561   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
562   DALI_TEST_CHECK( value );
563   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
564
565   value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
566   DALI_TEST_CHECK( value );
567   DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
568
569   value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
570   DALI_TEST_CHECK( value );
571   DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
572
573   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
574   DALI_TEST_CHECK( value );
575   DALI_TEST_CHECK( value->Get<int>() == 100 );
576
577   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
578   DALI_TEST_CHECK( value );
579   DALI_TEST_CHECK( value->Get<int>() == 200 );
580
581   value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
582   DALI_TEST_CHECK( value );
583   DALI_TEST_CHECK( value->Get<bool>() == false );
584
585   END_TEST;
586 }
587
588 int UtcDaliVisualGetPropertyMap6(void)
589 {
590   ToolkitTestApplication application;
591   tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
592
593   VisualFactory factory = VisualFactory::Get();
594   Property::Map propertyMap;
595   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
596   propertyMap.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
597   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
598   Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
599
600   Property::Map resultMap;
601   nPatchVisual.CreatePropertyMap( resultMap );
602
603   // check the property values from the returned map from visual
604   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
605   DALI_TEST_CHECK( value );
606   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
607
608   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
609   DALI_TEST_CHECK( value );
610   DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
611
612   value = resultMap.Find( ImageVisual::Property::BORDER_ONLY,  Property::BOOLEAN );
613   DALI_TEST_CHECK( value );
614   DALI_TEST_CHECK( value->Get<bool>() );
615
616   END_TEST;
617 }
618
619 int UtcDaliVisualGetPropertyMap7(void)
620 {
621   ToolkitTestApplication application;
622   tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
623
624   // request SvgVisual with a property map
625   VisualFactory factory = VisualFactory::Get();
626   Property::Map propertyMap;
627   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
628   propertyMap.Insert( ImageVisual::Property::URL,  TEST_SVG_FILE_NAME );
629   Visual::Base svgVisual = factory.CreateVisual( propertyMap );
630
631   Property::Map resultMap;
632   svgVisual.CreatePropertyMap( resultMap );
633   // check the property values from the returned map from a visual
634   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
635   DALI_TEST_CHECK( value );
636   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
637
638   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
639   DALI_TEST_CHECK( value );
640   DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
641
642   // request SvgVisual with an URL
643   Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
644   resultMap.Clear();
645   svgVisual2.CreatePropertyMap( resultMap );
646   // check the property values from the returned map from a visual
647   value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
648   DALI_TEST_CHECK( value );
649   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
650
651   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
652   DALI_TEST_CHECK( value );
653   DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
654
655   END_TEST;
656 }
657
658 //Mesh visual
659 int UtcDaliVisualGetPropertyMap8(void)
660 {
661   ToolkitTestApplication application;
662   tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
663
664   //Request MeshVisual using a property map.
665   VisualFactory factory = VisualFactory::Get();
666   Property::Map propertyMap;
667   propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
668   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
669   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
670   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
671   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
672   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
673   Visual::Base meshVisual = factory.CreateVisual( propertyMap );
674
675   Property::Map resultMap;
676   meshVisual.CreatePropertyMap( resultMap );
677
678   //Check values in the result map are identical to the initial map's values.
679   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
680   DALI_TEST_CHECK( value );
681   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
682
683   value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
684   DALI_TEST_CHECK( value );
685   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
686
687   value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
688   DALI_TEST_CHECK( value );
689   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
690
691   value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
692   DALI_TEST_CHECK( value );
693   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
694
695   value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
696   DALI_TEST_CHECK( value );
697   DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
698
699   value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
700   DALI_TEST_CHECK( value );
701   DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
702
703   END_TEST;
704 }
705
706 //Primitive shape visual
707 int UtcDaliVisualGetPropertyMap9(void)
708 {
709   ToolkitTestApplication application;
710   tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
711
712   Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
713   Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
714
715   //Request PrimitiveVisual using a property map.
716   VisualFactory factory = VisualFactory::Get();
717   Property::Map propertyMap;
718   propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
719   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
720   propertyMap.Insert( PrimitiveVisual::Property::COLOR, color );
721   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
722   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
723   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
724   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
725   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
726   propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
727   propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
728   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
729   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
730   propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
731   Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
732
733   Property::Map resultMap;
734   primitiveVisual.CreatePropertyMap( resultMap );
735
736   //Check values in the result map are identical to the initial map's values.
737   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
738   DALI_TEST_CHECK( value );
739   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
740
741   value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
742   DALI_TEST_CHECK( value );
743   DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
744
745   value = resultMap.Find( PrimitiveVisual::Property::COLOR, Property::VECTOR4 );
746   DALI_TEST_CHECK( value );
747   DALI_TEST_CHECK( value->Get<Vector4>() == color );
748   DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
749
750   value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
751   DALI_TEST_CHECK( value );
752   DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
753
754   value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
755   DALI_TEST_CHECK( value );
756   DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
757
758   value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
759   DALI_TEST_CHECK( value );
760   DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
761
762   value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
763   DALI_TEST_CHECK( value );
764   DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
765
766   value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
767   DALI_TEST_CHECK( value );
768   DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
769
770   value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
771   DALI_TEST_CHECK( value );
772   DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
773
774   value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
775   DALI_TEST_CHECK( value );
776   DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
777
778   value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
779   DALI_TEST_CHECK( value );
780   DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
781
782   value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
783   DALI_TEST_CHECK( value );
784   DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
785
786   value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
787   DALI_TEST_CHECK( value );
788   DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
789
790   END_TEST;
791 }
792
793 int UtcDaliVisualGetPropertyMapBatchImageVisual(void)
794 {
795   ToolkitTestApplication application;
796   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisual:" );
797
798   VisualFactory factory = VisualFactory::Get();
799   Property::Map propertyMap;
800   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
801   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
802   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
803   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
804   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
805
806   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
807   DALI_TEST_CHECK( batchImageVisual );
808
809   Property::Map resultMap;
810   batchImageVisual.CreatePropertyMap( resultMap );
811
812   // Check the property values from the returned map from visual
813   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
814   DALI_TEST_CHECK( value );
815   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
816
817   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
818   DALI_TEST_CHECK( value );
819   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
820
821   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
822   DALI_TEST_CHECK( value );
823   DALI_TEST_CHECK( value->Get<int>() == 20 );
824
825   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
826   DALI_TEST_CHECK( value );
827   DALI_TEST_CHECK( value->Get<int>() == 30 );
828
829   END_TEST;
830 }
831
832 int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void)
833 {
834   ToolkitTestApplication application;
835   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas:" );
836
837   VisualFactory factory = VisualFactory::Get();
838   Property::Map propertyMap;
839   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
840   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
841   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
842
843   // Set the desired size to be larger than the atlas limit of 1024x1024.
844   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 2048 );
845   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 2048 );
846
847   // Create the visual.
848   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
849
850   DALI_TEST_CHECK( batchImageVisual );
851
852   Actor actor = Actor::New();
853   batchImageVisual.SetOnStage( actor );
854
855   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
856
857   END_TEST;
858 }