e194fb4941f7007da1253b46ce7d50491a90f3ff
[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 <unistd.h>
20
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <dali/public-api/rendering/renderer.h>
23 #include <dali/public-api/rendering/texture-set.h>
24 #include <dali/public-api/rendering/shader.h>
25 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
26 #include <dali-toolkit/dali-toolkit.h>
27
28 using namespace Dali;
29 using namespace Dali::Toolkit;
30
31 namespace
32 {
33 const char* TEST_IMAGE_FILE_NAME =  "gallery_image_01.jpg";
34 const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
35 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
36 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
37 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
38 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
39
40 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
41 }
42
43 void dali_visual_startup(void)
44 {
45   test_return_value = TET_UNDEF;
46 }
47
48 void dali_visual_cleanup(void)
49 {
50   test_return_value = TET_PASS;
51 }
52
53 int UtcDaliVisualCopyAndAssignment(void)
54 {
55   ToolkitTestApplication application;
56   tet_infoline( "UtcDaliVisualCopyAndAssignment" );
57
58   VisualFactory factory = VisualFactory::Get();
59   Property::Map propertyMap;
60   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
61   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
62   Visual::Base visual = factory.CreateVisual( propertyMap );
63
64   Visual::Base visualCopy( visual );
65   DALI_TEST_CHECK(visual == visualCopy);
66
67   Visual::Base emptyVisual;
68   Visual::Base emptyVisualCopy( emptyVisual );
69   DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
70
71   Visual::Base visualEquals;
72   visualEquals = visual;
73   DALI_TEST_CHECK(visual == visualEquals);
74
75   Visual::Base emptyVisualEquals;
76   emptyVisualEquals = emptyVisual;
77   DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
78
79   //self assignment
80   visual = visual;
81   DALI_TEST_CHECK( visual = visualCopy );
82
83   END_TEST;
84 }
85
86 int UtcDaliVisualSetGetDepthIndex(void)
87 {
88   ToolkitTestApplication application;
89   tet_infoline( "UtcDaliVisualSetDepthIndex" );
90
91   VisualFactory factory = VisualFactory::Get();
92   Property::Map propertyMap;
93   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
94   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
95   Visual::Base visual = factory.CreateVisual( propertyMap );
96
97   visual.SetDepthIndex( 1.f );
98
99   Actor actor = Actor::New();
100   actor.SetSize(200.f, 200.f);
101   Stage::GetCurrent().Add( actor );
102   visual.SetOnStage( actor );
103
104   int 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   visual.SetDepthIndex( -1.f );
109   depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
110   DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
111   DALI_TEST_EQUALS( visual.GetDepthIndex(), -1.f, TEST_LOCATION );
112
113   END_TEST;
114 }
115
116 int UtcDaliVisualSize(void)
117 {
118   ToolkitTestApplication application;
119   tet_infoline( "UtcDaliVisualGetNaturalSize" );
120
121   VisualFactory factory = VisualFactory::Get();
122   Vector2 visualSize( 20.f, 30.f );
123   Vector2 naturalSize;
124
125   // color colorVisual
126   Dali::Property::Map map;
127   map[ Visual::Property::TYPE ] = Visual::COLOR;
128   map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
129   Visual::Base colorVisual = factory.CreateVisual( map );
130   colorVisual.SetSize( visualSize );
131   DALI_TEST_EQUALS( colorVisual.GetSize(), visualSize, TEST_LOCATION );
132   colorVisual.GetNaturalSize(naturalSize);
133   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
134
135   // image visual
136   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
137   Visual::Base imageVisual = factory.CreateVisual( image );
138   imageVisual.SetSize( visualSize );
139   DALI_TEST_EQUALS( imageVisual.GetSize(), visualSize, TEST_LOCATION );
140   imageVisual.GetNaturalSize(naturalSize);
141   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
142
143   // n patch visual
144   TestPlatformAbstraction& platform = application.GetPlatform();
145   Vector2 testSize(80.f, 160.f);
146   platform.SetClosestImageSize(testSize);
147   image = ResourceImage::New(TEST_NPATCH_FILE_NAME);
148   Visual::Base nPatchVisual = factory.CreateVisual( image );
149   nPatchVisual.SetSize( visualSize );
150   DALI_TEST_EQUALS( nPatchVisual.GetSize(), visualSize, TEST_LOCATION );
151   nPatchVisual.GetNaturalSize(naturalSize);
152   DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION );
153
154   // border visual
155   float borderSize = 5.f;
156   map.Clear();
157   map[ Visual::Property::TYPE ] = Visual::BORDER;
158   map[ BorderVisual::Property::COLOR  ] = Color::RED;
159   map[ BorderVisual::Property::SIZE   ] = borderSize;
160   Visual::Base borderVisual = factory.CreateVisual( map );
161   borderVisual.SetSize( visualSize );
162   DALI_TEST_EQUALS( borderVisual.GetSize(), visualSize, TEST_LOCATION );
163   borderVisual.GetNaturalSize(naturalSize);
164   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
165
166   // gradient gradientVisual
167   Property::Map propertyMap;
168   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
169   Vector2 start(-1.f, -1.f);
170   Vector2 end(1.f, 1.f);
171   propertyMap.Insert(GradientVisual::Property::START_POSITION,   start);
172   propertyMap.Insert(GradientVisual::Property::END_POSITION,   end);
173   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.f, 1.f));
174   Property::Array stopColors;
175   stopColors.PushBack( Color::RED );
176   stopColors.PushBack( Color::GREEN );
177   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
178   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
179   gradientVisual.SetSize( visualSize );
180   DALI_TEST_EQUALS( gradientVisual.GetSize(), visualSize, TEST_LOCATION );
181   gradientVisual.GetNaturalSize(naturalSize);
182   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
183
184   // svg visual
185   Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
186   svgVisual.SetSize( visualSize );
187   DALI_TEST_EQUALS( svgVisual.GetSize(), visualSize, TEST_LOCATION );
188   svgVisual.GetNaturalSize(naturalSize);
189   // TEST_SVG_FILE:
190   //  <svg width="100" height="100">
191   //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
192   //  </svg>
193   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
194
195   // Batch Image visual
196   propertyMap.Clear();
197   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
198   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
199   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
200   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
201   batchImageVisual.SetSize( visualSize );
202   DALI_TEST_EQUALS( batchImageVisual.GetSize(), visualSize, TEST_LOCATION );
203   batchImageVisual.GetNaturalSize( naturalSize );
204   DALI_TEST_EQUALS( naturalSize, Vector2( 80.0f, 160.0f ), TEST_LOCATION );
205
206   // Text visual.
207
208   // Load some fonts to get the same metrics on different platforms.
209   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
210   fontClient.SetDpi( 96u, 96u );
211
212   char* pathNamePtr = get_current_dir_name();
213   const std::string pathName( pathNamePtr );
214   free( pathNamePtr );
215
216   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
217
218   propertyMap.Clear();
219   propertyMap.Insert( Visual::Property::TYPE, Visual::TEXT );
220   propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
221   propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
222   propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
223
224   Visual::Base textVisual = factory.CreateVisual( propertyMap );
225   textVisual.GetNaturalSize( naturalSize );
226   DALI_TEST_EQUALS( naturalSize, Size( 80.f, 20.f ), TEST_LOCATION );
227
228   const float height = textVisual.GetHeightForWidth( 40.f );
229   DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
230
231   END_TEST;
232 }
233
234 int UtcDaliVisualSetOnOffStage(void)
235 {
236   ToolkitTestApplication application;
237   tet_infoline( "UtcDaliVisualSetDepthIndex" );
238
239   VisualFactory factory = VisualFactory::Get();
240   Property::Map propertyMap;
241   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
242   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
243   Visual::Base visual = factory.CreateVisual( propertyMap );
244
245   Actor actor = Actor::New();
246   actor.SetSize(200.f, 200.f);
247   Stage::GetCurrent().Add( actor );
248
249   application.SendNotification();
250   application.Render(0);
251   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
252
253   visual.SetOnStage( actor );
254   application.SendNotification();
255   application.Render(0);
256   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
257
258   visual.SetOffStage( actor );
259   application.SendNotification();
260   application.Render(0);
261   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
262
263   END_TEST;
264 }
265
266 int UtcDaliVisualRemoveAndReset(void)
267 {
268   ToolkitTestApplication application;
269   tet_infoline( "intUtcDaliVisualRemoveAndReset" );
270
271   VisualFactory factory = VisualFactory::Get();
272
273   Actor actor = Actor::New();
274   actor.SetSize(200.f, 200.f);
275   Stage::GetCurrent().Add( actor );
276
277   Visual::Base imageVisual;
278   // test calling RemoveAndReset with an empty handle
279   try
280   {
281     imageVisual.RemoveAndReset( actor );
282     tet_result(TET_PASS);
283   }
284   catch (DaliException& exception)
285   {
286     tet_result(TET_FAIL);
287   }
288
289   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
290   imageVisual = factory.CreateVisual(image);
291   DALI_TEST_CHECK( imageVisual );
292
293   imageVisual.SetOnStage( actor );
294   application.SendNotification();
295   application.Render(0);
296   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
297
298   imageVisual.RemoveAndReset( actor );
299   application.SendNotification();
300   application.Render(0);
301   DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); // visual is removed from actor
302   DALI_TEST_CHECK( !imageVisual ); // visual is reset
303
304   END_TEST;
305 }
306
307 int UtcDaliVisualGetPropertyMap1(void)
308 {
309   ToolkitTestApplication application;
310   tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual" );
311
312   VisualFactory factory = VisualFactory::Get();
313   Property::Map propertyMap;
314   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
315   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
316   Visual::Base colorVisual = factory.CreateVisual( propertyMap );
317
318   Property::Map resultMap;
319   colorVisual.CreatePropertyMap( resultMap );
320
321   Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
322   DALI_TEST_CHECK( typeValue );
323   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
324
325   Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
326   DALI_TEST_CHECK( colorValue );
327   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
328
329   // change the blend color
330   Actor actor;
331   colorVisual.RemoveAndReset( actor );
332   propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
333   colorVisual = factory.CreateVisual( propertyMap  );
334   colorVisual.CreatePropertyMap( resultMap );
335
336   colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
337   DALI_TEST_CHECK( colorValue );
338   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
339
340   // Test the properties. TODO: to be completed.
341   colorVisual.SetProperty( ColorVisual::Property::MIX_COLOR, Color::RED );
342   Property::Value value = colorVisual.GetProperty( ColorVisual::Property::MIX_COLOR );
343
344   END_TEST;
345 }
346
347 int UtcDaliVisualGetPropertyMap2(void)
348 {
349   ToolkitTestApplication application;
350   tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
351
352   VisualFactory factory = VisualFactory::Get();
353   Property::Map propertyMap;
354   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
355   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
356   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
357   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
358
359   Property::Map resultMap;
360   borderVisual.CreatePropertyMap( resultMap );
361
362   // check the property values from the returned map from visual
363   Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
364   DALI_TEST_CHECK( typeValue );
365   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
366
367   Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
368   DALI_TEST_CHECK( colorValue );
369   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
370
371   Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
372   DALI_TEST_CHECK( sizeValue );
373   DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
374
375   Property::Map propertyMap1;
376   propertyMap1[ Visual::Property::TYPE ] = Visual::BORDER;
377   propertyMap1[ BorderVisual::Property::COLOR  ] = Color::CYAN;
378   propertyMap1[ BorderVisual::Property::SIZE   ] = 10.0f;
379   borderVisual = factory.CreateVisual( propertyMap1 );
380   borderVisual.CreatePropertyMap( resultMap );
381
382   typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
383   DALI_TEST_CHECK( typeValue );
384   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
385
386   colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
387   DALI_TEST_CHECK( colorValue );
388   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
389
390   colorValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
391   DALI_TEST_CHECK( colorValue );
392   DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
393
394   // Test the properties. TODO: to be completed.
395   borderVisual.SetProperty( BorderVisual::Property::COLOR, Color::RED );
396   Property::Value value = borderVisual.GetProperty( BorderVisual::Property::COLOR );
397
398   END_TEST;
399 }
400
401 int UtcDaliVisualGetPropertyMap3(void)
402 {
403   ToolkitTestApplication application;
404   tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
405
406   VisualFactory factory = VisualFactory::Get();
407   DALI_TEST_CHECK( factory );
408
409   Property::Map propertyMap;
410   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
411
412   Vector2 start(-1.f, -1.f);
413   Vector2 end(1.f, 1.f);
414   propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
415   propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
416   propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
417
418   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.2f, 0.8f));
419
420   Property::Array stopColors;
421   stopColors.PushBack( Color::RED );
422   stopColors.PushBack( Color::GREEN );
423   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
424
425   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
426
427   Property::Map resultMap;
428   gradientVisual.CreatePropertyMap( resultMap );
429
430   // check the property values from the returned map from visual
431   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
432   DALI_TEST_CHECK( value );
433   DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
434
435   value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
436   DALI_TEST_CHECK( value );
437   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
438
439   value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
440   DALI_TEST_CHECK( value );
441   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
442
443   value = resultMap.Find( GradientVisual::Property::START_POSITION,   Property::VECTOR2 );
444   DALI_TEST_CHECK( value );
445   DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
446
447   value = resultMap.Find( GradientVisual::Property::END_POSITION,   Property::VECTOR2 );
448   DALI_TEST_CHECK( value );
449   DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
450
451   value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
452   DALI_TEST_CHECK( value );
453   Property::Array* offsetArray = value->GetArray();
454   DALI_TEST_CHECK( offsetArray->Count() == 2 );
455   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
456   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
457
458   value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
459   DALI_TEST_CHECK( value );
460   Property::Array* colorArray = value->GetArray();
461   DALI_TEST_CHECK( colorArray->Count() == 2 );
462   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
463   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
464
465   // Test the properties. TODO: to be completed.
466   gradientVisual.SetProperty( GradientVisual::Property::STOP_COLOR, Color::RED );
467   Property::Value gradientValue = gradientVisual.GetProperty( GradientVisual::Property::STOP_COLOR );
468
469   END_TEST;
470 }
471
472 int UtcDaliVisualGetPropertyMap4(void)
473 {
474   ToolkitTestApplication application;
475   tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
476
477   VisualFactory factory = VisualFactory::Get();
478   DALI_TEST_CHECK( factory );
479
480   Property::Map propertyMap;
481   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
482
483   Vector2 center(100.f, 100.f);
484   float radius = 100.f;
485   propertyMap.Insert(GradientVisual::Property::UNITS,  GradientVisual::Units::USER_SPACE);
486   propertyMap.Insert(GradientVisual::Property::CENTER,  center);
487   propertyMap.Insert(GradientVisual::Property::RADIUS,  radius);
488   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector3(0.1f, 0.3f, 1.1f));
489
490   Property::Array stopColors;
491   stopColors.PushBack( Color::RED );
492   stopColors.PushBack( Color::BLACK );
493   stopColors.PushBack( Color::GREEN );
494   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
495
496   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
497   DALI_TEST_CHECK( gradientVisual );
498
499   Property::Map resultMap;
500   gradientVisual.CreatePropertyMap( resultMap );
501
502   // check the property values from the returned map from visual
503   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
504   DALI_TEST_CHECK( value );
505   DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
506
507   value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
508   DALI_TEST_CHECK( value );
509   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
510
511   value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
512   DALI_TEST_CHECK( value );
513   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
514
515   value = resultMap.Find( GradientVisual::Property::CENTER,  Property::VECTOR2 );
516   DALI_TEST_CHECK( value );
517   DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
518
519   value = resultMap.Find( GradientVisual::Property::RADIUS,  Property::FLOAT );
520   DALI_TEST_CHECK( value );
521   DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
522
523   value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
524   DALI_TEST_CHECK( value );
525   Property::Array* offsetArray = value->GetArray();
526   DALI_TEST_CHECK( offsetArray->Count() == 3 );
527   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
528   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
529   // any stop value will be clamped to [0.0, 1.0];
530   DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
531
532   value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
533   DALI_TEST_CHECK( value );
534   Property::Array* colorArray = value->GetArray();
535   DALI_TEST_CHECK( colorArray->Count() == 3 );
536   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
537   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
538   DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
539
540   END_TEST;
541 }
542
543 int UtcDaliVisualGetPropertyMap5(void)
544 {
545   ToolkitTestApplication application;
546   tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
547
548   VisualFactory factory = VisualFactory::Get();
549   Property::Map propertyMap;
550   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
551   propertyMap.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
552   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH,   20 );
553   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT,   30 );
554   propertyMap.Insert( ImageVisual::Property::FITTING_MODE,   FittingMode::FIT_HEIGHT );
555   propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE,   SamplingMode::BOX_THEN_NEAREST );
556   propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
557   propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT );
558   propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::MIRRORED_REPEAT );
559   propertyMap.Insert( "synchronousLoading",   true );
560
561   Visual::Base imageVisual = factory.CreateVisual(propertyMap);
562   DALI_TEST_CHECK( imageVisual );
563
564   Property::Map resultMap;
565   imageVisual.CreatePropertyMap( resultMap );
566
567   // check the property values from the returned map from visual
568   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
569   DALI_TEST_CHECK( value );
570   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
571
572   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
573   DALI_TEST_CHECK( value );
574   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
575
576   value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
577   DALI_TEST_CHECK( value );
578   DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
579
580   value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
581   DALI_TEST_CHECK( value );
582   DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
583
584   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
585   DALI_TEST_CHECK( value );
586   DALI_TEST_CHECK( value->Get<int>() == 20 );
587
588   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
589   DALI_TEST_CHECK( value );
590   DALI_TEST_CHECK( value->Get<int>() == 30 );
591
592   value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
593   DALI_TEST_CHECK( value );
594   DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
595
596   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
597   DALI_TEST_CHECK( value );
598   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::REPEAT);
599
600   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
601   DALI_TEST_CHECK( value );
602   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::MIRRORED_REPEAT);
603
604   value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
605   DALI_TEST_CHECK( value );
606   DALI_TEST_CHECK( value->Get<bool>() == true );
607
608   // Get an image visual with an image handle, and test the default property values
609   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
610   imageVisual = factory.CreateVisual(image);
611   imageVisual.CreatePropertyMap( resultMap );
612
613   value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
614   DALI_TEST_CHECK( value );
615   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
616
617   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
618   DALI_TEST_CHECK( value );
619   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
620
621   value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
622   DALI_TEST_CHECK( value );
623   DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
624
625   value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
626   DALI_TEST_CHECK( value );
627   DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
628
629   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
630   DALI_TEST_CHECK( value );
631   DALI_TEST_CHECK( value->Get<int>() == 100 );
632
633   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
634   DALI_TEST_CHECK( value );
635   DALI_TEST_CHECK( value->Get<int>() == 200 );
636
637   value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
638   DALI_TEST_CHECK( value );
639   DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
640
641   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
642   DALI_TEST_CHECK( value );
643   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::DEFAULT);
644
645   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
646   DALI_TEST_CHECK( value );
647   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::DEFAULT);
648
649   value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
650   DALI_TEST_CHECK( value );
651   DALI_TEST_CHECK( value->Get<bool>() == false );
652
653   // Test the properties. TODO: to be completed.
654   imageVisual.SetProperty( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
655   Property::Value imageValue = imageVisual.GetProperty( ImageVisual::Property::URL );
656
657   END_TEST;
658 }
659
660 int UtcDaliVisualGetPropertyMap6(void)
661 {
662   ToolkitTestApplication application;
663   tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
664
665   VisualFactory factory = VisualFactory::Get();
666   Property::Map propertyMap;
667   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
668   propertyMap.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
669   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
670   Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
671
672   Property::Map resultMap;
673   nPatchVisual.CreatePropertyMap( resultMap );
674
675   // check the property values from the returned map from visual
676   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
677   DALI_TEST_CHECK( value );
678   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
679
680   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
681   DALI_TEST_CHECK( value );
682   DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
683
684   value = resultMap.Find( ImageVisual::Property::BORDER_ONLY,  Property::BOOLEAN );
685   DALI_TEST_CHECK( value );
686   DALI_TEST_CHECK( value->Get<bool>() );
687
688   // Test the properties. TODO: to be completed.
689   nPatchVisual.SetProperty( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
690   Property::Value nPatchValue = nPatchVisual.GetProperty( ImageVisual::Property::URL );
691
692   END_TEST;
693 }
694
695 int UtcDaliVisualGetPropertyMap7(void)
696 {
697   ToolkitTestApplication application;
698   tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
699
700   // request SvgVisual with a property map
701   VisualFactory factory = VisualFactory::Get();
702   Property::Map propertyMap;
703   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
704   propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
705   Visual::Base svgVisual = factory.CreateVisual( propertyMap );
706
707   Property::Map resultMap;
708   svgVisual.CreatePropertyMap( resultMap );
709   // check the property values from the returned map from a visual
710   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
711   DALI_TEST_CHECK( value );
712   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
713
714   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
715   DALI_TEST_CHECK( value );
716   DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
717
718   // request SvgVisual with an URL
719   Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
720   resultMap.Clear();
721   svgVisual2.CreatePropertyMap( resultMap );
722   // check the property values from the returned map from a visual
723   value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
724   DALI_TEST_CHECK( value );
725   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
726
727   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
728   DALI_TEST_CHECK( value );
729   DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
730
731   // Test the properties. TODO: to be completed.
732   svgVisual.SetProperty( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
733   Property::Value svgValue = svgVisual.GetProperty( ImageVisual::Property::URL );
734
735   END_TEST;
736 }
737
738 //Mesh visual
739 int UtcDaliVisualGetPropertyMap8(void)
740 {
741   ToolkitTestApplication application;
742   tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
743
744   //Request MeshVisual using a property map.
745   VisualFactory factory = VisualFactory::Get();
746   Property::Map propertyMap;
747   propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
748   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
749   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
750   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
751   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
752   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
753   Visual::Base meshVisual = factory.CreateVisual( propertyMap );
754
755   Property::Map resultMap;
756   meshVisual.CreatePropertyMap( resultMap );
757
758   //Check values in the result map are identical to the initial map's values.
759   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
760   DALI_TEST_CHECK( value );
761   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
762
763   value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
764   DALI_TEST_CHECK( value );
765   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
766
767   value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
768   DALI_TEST_CHECK( value );
769   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
770
771   value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
772   DALI_TEST_CHECK( value );
773   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
774
775   value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
776   DALI_TEST_CHECK( value );
777   DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
778
779   value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
780   DALI_TEST_CHECK( value );
781   DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
782
783   // Test the properties. TODO: to be completed.
784   meshVisual.SetProperty( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
785   Property::Value meshValue = meshVisual.GetProperty( MeshVisual::Property::OBJECT_URL );
786
787   END_TEST;
788 }
789
790 //Primitive shape visual
791 int UtcDaliVisualGetPropertyMap9(void)
792 {
793   ToolkitTestApplication application;
794   tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
795
796   Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
797   Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
798
799   //Request PrimitiveVisual using a property map.
800   VisualFactory factory = VisualFactory::Get();
801   Property::Map propertyMap;
802   propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
803   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
804   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
805   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
806   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
807   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
808   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
809   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
810   propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
811   propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
812   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
813   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
814   propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
815   Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
816
817   Property::Map resultMap;
818   primitiveVisual.CreatePropertyMap( resultMap );
819
820   //Check values in the result map are identical to the initial map's values.
821   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
822   DALI_TEST_CHECK( value );
823   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
824
825   value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
826   DALI_TEST_CHECK( value );
827   DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
828
829   value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
830   DALI_TEST_CHECK( value );
831   DALI_TEST_CHECK( value->Get<Vector4>() == color );
832   DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
833
834   value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
835   DALI_TEST_CHECK( value );
836   DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
837
838   value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
839   DALI_TEST_CHECK( value );
840   DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
841
842   value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
843   DALI_TEST_CHECK( value );
844   DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
845
846   value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
847   DALI_TEST_CHECK( value );
848   DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
849
850   value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
851   DALI_TEST_CHECK( value );
852   DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
853
854   value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
855   DALI_TEST_CHECK( value );
856   DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
857
858   value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
859   DALI_TEST_CHECK( value );
860   DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
861
862   value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
863   DALI_TEST_CHECK( value );
864   DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
865
866   value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
867   DALI_TEST_CHECK( value );
868   DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
869
870   value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
871   DALI_TEST_CHECK( value );
872   DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
873
874   // Test the properties. TODO: to be completed.
875   primitiveVisual.SetProperty( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
876   Property::Value primitiveValue = primitiveVisual.GetProperty( PrimitiveVisual::Property::SHAPE );
877
878   END_TEST;
879 }
880
881 int UtcDaliVisualGetPropertyMapBatchImageVisual(void)
882 {
883   ToolkitTestApplication application;
884   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisual:" );
885
886   VisualFactory factory = VisualFactory::Get();
887   Property::Map propertyMap;
888   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
889   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
890   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
891   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
892   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
893
894   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
895   DALI_TEST_CHECK( batchImageVisual );
896
897   Property::Map resultMap;
898   batchImageVisual.CreatePropertyMap( resultMap );
899
900   // Check the property values from the returned map from visual
901   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
902   DALI_TEST_CHECK( value );
903   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
904
905   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
906   DALI_TEST_CHECK( value );
907   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
908
909   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
910   DALI_TEST_CHECK( value );
911   DALI_TEST_CHECK( value->Get<int>() == 20 );
912
913   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
914   DALI_TEST_CHECK( value );
915   DALI_TEST_CHECK( value->Get<int>() == 30 );
916
917   // Test the properties. TODO: to be completed.
918   batchImageVisual.SetProperty( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
919   Property::Value primitiveValue = batchImageVisual.GetProperty( ImageVisual::Property::URL );
920
921   END_TEST;
922 }
923
924 //Text shape visual
925 int UtcDaliVisualGetPropertyMap10(void)
926 {
927   ToolkitTestApplication application;
928   tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
929
930   //Request PrimitiveVisual using a property map.
931   VisualFactory factory = VisualFactory::Get();
932
933   Property::Map propertyMap;
934   propertyMap.Insert( Visual::Property::TYPE, Visual::TEXT );
935   propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
936   propertyMap.Insert( "text", "Hello world" );
937   propertyMap.Insert( "fontFamily", "TizenSans" );
938   propertyMap.Insert( "fontStyle", "{\"weight\":\"bold\"}" );
939   propertyMap.Insert( "pointSize", 12.f );
940   propertyMap.Insert( "multiLine", true );
941   propertyMap.Insert( "horizontalAlignment", "CENTER" );
942   propertyMap.Insert( "verticalAlignment", "CENTER" );
943   propertyMap.Insert( "textColor", Color::RED );
944   propertyMap.Insert( "enableMarkup", false );
945   propertyMap.Insert( "enableAutoScroll", false );
946   propertyMap.Insert( "lineSpacing", 0.f );
947   propertyMap.Insert( "batchingEnabled", false );
948   Visual::Base textVisual = factory.CreateVisual( propertyMap );
949
950   Property::Map resultMap;
951   textVisual.CreatePropertyMap( resultMap );
952
953   //Check values in the result map are identical to the initial map's values.
954   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
955   DALI_TEST_CHECK( value );
956   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
957
958   value = resultMap.Find( TextVisual::Property::RENDERING_BACKEND, Property::INTEGER );
959   DALI_TEST_CHECK( value );
960   DALI_TEST_EQUALS( value->Get<int>(), Toolkit::Text::DEFAULT_RENDERING_BACKEND, TEST_LOCATION );
961
962   value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
963   DALI_TEST_CHECK( value );
964   DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
965
966   value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
967   DALI_TEST_CHECK( value );
968   DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
969
970   value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::STRING );
971   DALI_TEST_CHECK( value );
972   DALI_TEST_EQUALS( value->Get<std::string>(), "{\"weight\":\"bold\"}", TEST_LOCATION );
973
974   value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
975   DALI_TEST_CHECK( value );
976   DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
977
978   value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
979   DALI_TEST_CHECK( value );
980   DALI_TEST_CHECK( value->Get<bool>() );
981
982   value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::STRING );
983   DALI_TEST_CHECK( value );
984   DALI_TEST_EQUALS( value->Get<std::string>(), "CENTER", TEST_LOCATION );
985
986   value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::STRING );
987   DALI_TEST_CHECK( value );
988   DALI_TEST_EQUALS( value->Get<std::string>(), "CENTER", TEST_LOCATION );
989
990   value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
991   DALI_TEST_CHECK( value );
992   DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
993
994   value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
995   DALI_TEST_CHECK( value );
996   DALI_TEST_CHECK( !value->Get<bool>() );
997
998   value = resultMap.Find( TextVisual::Property::ENABLE_AUTO_SCROLL, Property::BOOLEAN );
999   DALI_TEST_CHECK( value );
1000   DALI_TEST_CHECK( !value->Get<bool>() );
1001
1002   value = resultMap.Find( TextVisual::Property::LINE_SPACING, Property::FLOAT );
1003   DALI_TEST_CHECK( value );
1004   DALI_TEST_EQUALS( value->Get<float>(), 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1005
1006   value = resultMap.Find( TextVisual::Property::BATCHING_ENABLED, Property::BOOLEAN );
1007   DALI_TEST_CHECK( value );
1008   DALI_TEST_CHECK( !value->Get<bool>() );
1009
1010   END_TEST;
1011 }
1012
1013 int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void)
1014 {
1015   ToolkitTestApplication application;
1016   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas:" );
1017
1018   VisualFactory factory = VisualFactory::Get();
1019   Property::Map propertyMap;
1020   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
1021   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
1022   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
1023
1024   // Set the desired size to be larger than the atlas limit of 1024x1024.
1025   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 2048 );
1026   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 2048 );
1027
1028   // Create the visual.
1029   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
1030
1031   DALI_TEST_CHECK( batchImageVisual );
1032
1033   Actor actor = Actor::New();
1034   batchImageVisual.SetOnStage( actor );
1035
1036   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1037
1038   END_TEST;
1039 }
1040
1041 int UtcDaliVisualAnimateBorderVisual01(void)
1042 {
1043   ToolkitTestApplication application;
1044   tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1045
1046   VisualFactory factory = VisualFactory::Get();
1047   Property::Map propertyMap;
1048   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
1049   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
1050   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
1051   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1052
1053   Actor actor = Actor::New();
1054   actor.SetSize(2000, 2000);
1055   actor.SetParentOrigin(ParentOrigin::CENTER);
1056   Stage::GetCurrent().Add(actor);
1057   borderVisual.SetOnStage( actor );
1058
1059   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1060
1061   Renderer renderer = actor.GetRendererAt(0);
1062   Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::COLOR );
1063
1064   Animation animation = Animation::New(4.0f);
1065   animation.AnimateTo( Property(renderer, index), Color::WHITE );
1066   animation.Play();
1067
1068   application.SendNotification();
1069   application.Render(0);
1070   application.Render(2000u); // halfway point between blue and white
1071
1072   Vector4 color = renderer.GetProperty<Vector4>( index );
1073   Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1074   DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1075   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1076
1077   application.Render(2000u); // halfway point between blue and white
1078
1079   color = renderer.GetProperty<Vector4>( index );
1080   DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1081   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1082
1083   END_TEST;
1084 }
1085
1086
1087 int UtcDaliVisualAnimateBorderVisual02(void)
1088 {
1089   ToolkitTestApplication application;
1090   tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1091
1092   VisualFactory factory = VisualFactory::Get();
1093   Property::Map propertyMap;
1094   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
1095   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
1096   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
1097   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1098
1099   Actor actor = Actor::New();
1100   actor.SetSize(2000, 2000);
1101   actor.SetParentOrigin(ParentOrigin::CENTER);
1102   Stage::GetCurrent().Add(actor);
1103   borderVisual.SetOnStage( actor );
1104
1105   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1106
1107   Renderer renderer = actor.GetRendererAt(0);
1108   Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE );
1109
1110   Animation animation = Animation::New(4.0f);
1111   animation.AnimateTo( Property(renderer, index), 9.0f );
1112   animation.Play();
1113
1114   application.SendNotification();
1115   application.Render(0);
1116   application.Render(2000u); // halfway point
1117
1118   float size = renderer.GetProperty<float>( index );
1119   DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1120   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1121
1122   application.Render(2000u); // halfway point between blue and white
1123
1124   size = renderer.GetProperty<float>( index );
1125   DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1126   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1127
1128   END_TEST;
1129 }
1130
1131 int UtcDaliVisualAnimateColorVisual(void)
1132 {
1133   ToolkitTestApplication application;
1134   tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1135
1136   VisualFactory factory = VisualFactory::Get();
1137   Property::Map propertyMap;
1138   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1139   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1140   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1141
1142   Actor actor = Actor::New();
1143   actor.SetSize(2000, 2000);
1144   actor.SetParentOrigin(ParentOrigin::CENTER);
1145   Stage::GetCurrent().Add(actor);
1146   borderVisual.SetOnStage( actor );
1147
1148   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1149
1150   Renderer renderer = actor.GetRendererAt(0);
1151   Property::Index index = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
1152
1153   Animation animation = Animation::New(4.0f);
1154   animation.AnimateTo( Property(renderer, index), Color::WHITE );
1155   animation.Play();
1156
1157   application.SendNotification();
1158   application.Render(0);
1159   application.Render(2000u); // halfway point
1160
1161   Vector4 color = renderer.GetProperty<Vector4>( index );
1162   Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1163   DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1164
1165   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("mixColor", testColor ), true, TEST_LOCATION );
1166
1167   application.Render(2000u); // halfway point between blue and white
1168
1169   color = renderer.GetProperty<Vector4>( index );
1170   DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1171
1172   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("mixColor", Color::WHITE ), true, TEST_LOCATION );
1173
1174
1175   END_TEST;
1176 }
1177
1178
1179 int UtcDaliVisualAnimatePrimitiveVisual(void)
1180 {
1181   ToolkitTestApplication application;
1182   tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1183
1184   VisualFactory factory = VisualFactory::Get();
1185   Property::Map propertyMap;
1186   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1187   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1188   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1189
1190   Actor actor = Actor::New();
1191   actor.SetSize(2000, 2000);
1192   actor.SetParentOrigin(ParentOrigin::CENTER);
1193   actor.SetColor(Color::BLACK);
1194   Stage::GetCurrent().Add(actor);
1195   borderVisual.SetOnStage( actor );
1196
1197   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1198
1199   Renderer renderer = actor.GetRendererAt(0);
1200   Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::MIX_COLOR );
1201
1202   // The property isn't registered on the renderer, it's instead registered on the shader.
1203   DALI_TEST_EQUALS( index, Property::INVALID_INDEX, TEST_LOCATION );
1204
1205   Animation animation = Animation::New(4.0f);
1206   animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1207   animation.Play();
1208
1209   application.SendNotification();
1210   application.Render(0);
1211   application.Render(2000u); // halfway point
1212
1213   // Actor color overrides renderer color.
1214   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
1215
1216   application.Render(2000u); // halfway point between blue and white
1217
1218   DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
1219   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
1220
1221
1222   END_TEST;
1223 }
1224
1225 int UtcDaliVisualWireframeVisual(void)
1226 {
1227   ToolkitTestApplication application;
1228
1229   VisualFactory factory = VisualFactory::Get();
1230   Property::Map propertyMap;
1231   propertyMap.Insert( Visual::Property::TYPE, Visual::WIREFRAME );
1232
1233   // Create the visual.
1234   Visual::Base visual = factory.CreateVisual( propertyMap );
1235
1236   DALI_TEST_CHECK( visual );
1237
1238   Property::Map resultMap;
1239   visual.CreatePropertyMap( resultMap );
1240
1241   // Check the property values from the returned map from visual
1242   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
1243   DALI_TEST_CHECK( value );
1244   DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
1245
1246   // Test the properties. TODO: to be completed.
1247   Property::Value primitiveValue = visual.GetProperty( Visual::Property::TYPE );
1248
1249   END_TEST;
1250 }