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