Revert the TextLabel to use the old renderer.
[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/devel-api/visual-factory/devel-visual-properties.h>
27 #include <dali-toolkit/devel-api/align-enums.h>
28 #include <dali-toolkit/dali-toolkit.h>
29 #include "dummy-control.h"
30
31 using namespace Dali;
32 using namespace Dali::Toolkit;
33
34 namespace
35 {
36 const char* TEST_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR "/gallery-small-1.jpg";
37 const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
38 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
39 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
40 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
41 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
42
43 const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
44
45 bool DaliTestCheckMaps( const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet )
46 {
47   if( fontStyleMapGet.Count() == fontStyleMapSet.Count() )
48   {
49     for( unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index )
50     {
51       const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue( index );
52
53       Property::Value* valueSet = fontStyleMapSet.Find( valueGet.first.stringKey );
54       if( NULL != valueSet )
55       {
56         if( valueGet.second.Get<std::string>() != valueSet->Get<std::string>() )
57         {
58           tet_printf( "  Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str() );
59           return false;
60         }
61       }
62       else
63       {
64         tet_printf( "  The key %s doesn't exist.", valueGet.first.stringKey.c_str() );
65         return false;
66       }
67     }
68   }
69
70   return true;
71 }
72
73 } //namespace
74
75 void dali_visual_startup(void)
76 {
77   test_return_value = TET_UNDEF;
78 }
79
80 void dali_visual_cleanup(void)
81 {
82   test_return_value = TET_PASS;
83 }
84
85 int UtcDaliVisualCopyAndAssignment(void)
86 {
87   ToolkitTestApplication application;
88   tet_infoline( "UtcDaliVisualCopyAndAssignment" );
89
90   VisualFactory factory = VisualFactory::Get();
91   Property::Map propertyMap;
92   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
93   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
94   Visual::Base visual = factory.CreateVisual( propertyMap );
95
96   Visual::Base visualCopy( visual );
97   DALI_TEST_CHECK(visual == visualCopy);
98
99   Visual::Base emptyVisual;
100   Visual::Base emptyVisualCopy( emptyVisual );
101   DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
102
103   Visual::Base visualEquals;
104   visualEquals = visual;
105   DALI_TEST_CHECK(visual == visualEquals);
106
107   Visual::Base emptyVisualEquals;
108   emptyVisualEquals = emptyVisual;
109   DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
110
111   //self assignment
112   visual = visual;
113   DALI_TEST_CHECK( visual = visualCopy );
114
115   END_TEST;
116 }
117
118 int UtcDaliVisualSetName01(void)
119 {
120   ToolkitTestApplication application;
121   tet_infoline( "UtcDaliVisualSetName" );
122
123   VisualFactory factory = VisualFactory::Get();
124   Property::Map propertyMap;
125   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
126   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
127   Visual::Base visual = factory.CreateVisual( propertyMap );
128
129   const char* visualName = "backgroundVisual";
130   visual.SetName( visualName );
131
132   DALI_TEST_EQUALS( visual.GetName(), visualName, TEST_LOCATION );
133
134   END_TEST;
135 }
136
137 int UtcDaliVisualSetGetDepthIndex(void)
138 {
139   ToolkitTestApplication application;
140   tet_infoline( "UtcDaliVisualSetDepthIndex" );
141
142   VisualFactory factory = VisualFactory::Get();
143   Property::Map propertyMap;
144   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
145   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
146   Visual::Base visual = factory.CreateVisual( propertyMap );
147
148   visual.SetDepthIndex( 1.f );
149
150   Actor actor = Actor::New();
151   actor.SetSize(200.f, 200.f);
152   Stage::GetCurrent().Add( actor );
153   visual.SetOnStage( actor );
154
155   int depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
156   DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
157   DALI_TEST_EQUALS( visual.GetDepthIndex(), 1.f, TEST_LOCATION );
158
159   visual.SetDepthIndex( -1.f );
160   depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
161   DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
162   DALI_TEST_EQUALS( visual.GetDepthIndex(), -1.f, TEST_LOCATION );
163
164   END_TEST;
165 }
166
167 int UtcDaliVisualSize(void)
168 {
169   ToolkitTestApplication application;
170   tet_infoline( "UtcDaliVisualGetNaturalSize" );
171
172   VisualFactory factory = VisualFactory::Get();
173   Vector2 visualSize( 20.f, 30.f );
174   Vector2 naturalSize;
175
176   // color colorVisual
177   Dali::Property::Map map;
178   map[ Visual::Property::TYPE ] = Visual::COLOR;
179   map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
180   Visual::Base colorVisual = factory.CreateVisual( map );
181   colorVisual.SetSize( visualSize );
182   DALI_TEST_EQUALS( colorVisual.GetSize(), visualSize, TEST_LOCATION );
183   colorVisual.GetNaturalSize(naturalSize);
184   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
185
186   // image visual
187   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
188   Visual::Base imageVisual = factory.CreateVisual( image );
189   imageVisual.SetSize( visualSize );
190   DALI_TEST_EQUALS( imageVisual.GetSize(), visualSize, TEST_LOCATION );
191   imageVisual.GetNaturalSize(naturalSize);
192   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
193
194   // n patch visual
195   TestPlatformAbstraction& platform = application.GetPlatform();
196   Vector2 testSize(80.f, 160.f);
197   platform.SetClosestImageSize(testSize);
198   image = ResourceImage::New(TEST_NPATCH_FILE_NAME);
199   Visual::Base nPatchVisual = factory.CreateVisual( image );
200   nPatchVisual.SetSize( visualSize );
201   DALI_TEST_EQUALS( nPatchVisual.GetSize(), visualSize, TEST_LOCATION );
202   nPatchVisual.GetNaturalSize(naturalSize);
203   DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION );
204
205   // border visual
206   float borderSize = 5.f;
207   map.Clear();
208   map[ Visual::Property::TYPE ] = Visual::BORDER;
209   map[ BorderVisual::Property::COLOR  ] = Color::RED;
210   map[ BorderVisual::Property::SIZE   ] = borderSize;
211   Visual::Base borderVisual = factory.CreateVisual( map );
212   borderVisual.SetSize( visualSize );
213   DALI_TEST_EQUALS( borderVisual.GetSize(), visualSize, TEST_LOCATION );
214   borderVisual.GetNaturalSize(naturalSize);
215   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
216
217   // gradient gradientVisual
218   Property::Map propertyMap;
219   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
220   Vector2 start(-1.f, -1.f);
221   Vector2 end(1.f, 1.f);
222   propertyMap.Insert(GradientVisual::Property::START_POSITION,   start);
223   propertyMap.Insert(GradientVisual::Property::END_POSITION,   end);
224   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.f, 1.f));
225   Property::Array stopColors;
226   stopColors.PushBack( Color::RED );
227   stopColors.PushBack( Color::GREEN );
228   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
229   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
230   gradientVisual.SetSize( visualSize );
231   DALI_TEST_EQUALS( gradientVisual.GetSize(), visualSize, TEST_LOCATION );
232   gradientVisual.GetNaturalSize(naturalSize);
233   DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
234
235   // svg visual
236   Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
237   svgVisual.SetSize( visualSize );
238   DALI_TEST_EQUALS( svgVisual.GetSize(), visualSize, TEST_LOCATION );
239   svgVisual.GetNaturalSize(naturalSize);
240   // TEST_SVG_FILE:
241   //  <svg width="100" height="100">
242   //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
243   //  </svg>
244   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
245
246   // svg visual with a size
247   Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions(200, 200) );
248   DALI_TEST_EQUALS( svgVisual2.GetSize(), Vector2( 200.f, 200.f ), TEST_LOCATION );
249   svgVisual2.GetNaturalSize(naturalSize);
250   DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION ); // Natural size should still be 100, 100
251
252   // Batch Image visual
253   propertyMap.Clear();
254   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
255   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
256   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
257   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
258   batchImageVisual.SetSize( visualSize );
259   DALI_TEST_EQUALS( batchImageVisual.GetSize(), visualSize, TEST_LOCATION );
260   batchImageVisual.GetNaturalSize( naturalSize );
261   DALI_TEST_EQUALS( naturalSize, Vector2( 80.0f, 160.0f ), TEST_LOCATION );
262
263   // Text visual.
264
265   // Load some fonts to get the same metrics on different platforms.
266   TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
267   fontClient.SetDpi( 96u, 96u );
268
269   char* pathNamePtr = get_current_dir_name();
270   const std::string pathName( pathNamePtr );
271   free( pathNamePtr );
272
273   fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
274
275   propertyMap.Clear();
276   propertyMap.Insert( Visual::Property::TYPE, Visual::TEXT );
277   propertyMap.Insert( TextVisual::Property::ENABLE_MARKUP, true );
278   propertyMap.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
279   propertyMap.Insert( TextVisual::Property::MULTI_LINE, true );
280
281   Visual::Base textVisual = factory.CreateVisual( propertyMap );
282   textVisual.GetNaturalSize( naturalSize );
283   DALI_TEST_EQUALS( naturalSize, Size( 80.f, 20.f ), TEST_LOCATION );
284
285   const float height = textVisual.GetHeightForWidth( 40.f );
286   DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
287
288   END_TEST;
289 }
290
291 int UtcDaliVisualSetOnOffStage(void)
292 {
293   ToolkitTestApplication application;
294   tet_infoline( "UtcDaliVisualSetDepthIndex" );
295
296   VisualFactory factory = VisualFactory::Get();
297   Property::Map propertyMap;
298   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
299   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
300   Visual::Base visual = factory.CreateVisual( propertyMap );
301
302   Actor actor = Actor::New();
303   actor.SetSize(200.f, 200.f);
304   Stage::GetCurrent().Add( actor );
305
306   application.SendNotification();
307   application.Render(0);
308   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
309
310   visual.SetOnStage( actor );
311   application.SendNotification();
312   application.Render(0);
313   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
314
315   visual.SetOffStage( actor );
316   application.SendNotification();
317   application.Render(0);
318   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
319
320   END_TEST;
321 }
322
323 int UtcDaliVisualRemoveAndReset(void)
324 {
325   ToolkitTestApplication application;
326   tet_infoline( "intUtcDaliVisualRemoveAndReset" );
327
328   VisualFactory factory = VisualFactory::Get();
329
330   Actor actor = Actor::New();
331   actor.SetSize(200.f, 200.f);
332   Stage::GetCurrent().Add( actor );
333
334   Visual::Base imageVisual;
335   // test calling RemoveAndReset with an empty handle
336   try
337   {
338     imageVisual.RemoveAndReset( actor );
339     tet_result(TET_PASS);
340   }
341   catch (DaliException& exception)
342   {
343     tet_result(TET_FAIL);
344   }
345
346   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
347   imageVisual = factory.CreateVisual(image);
348   DALI_TEST_CHECK( imageVisual );
349
350   imageVisual.SetOnStage( actor );
351   application.SendNotification();
352   application.Render(0);
353   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
354
355   imageVisual.RemoveAndReset( actor );
356   application.SendNotification();
357   application.Render(0);
358   DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); // visual is removed from actor
359   DALI_TEST_CHECK( !imageVisual ); // visual is reset
360
361   END_TEST;
362 }
363
364 int UtcDaliVisualGetPropertyMap1(void)
365 {
366   ToolkitTestApplication application;
367   tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual" );
368
369   VisualFactory factory = VisualFactory::Get();
370   Property::Map propertyMap;
371   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
372   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
373   Visual::Base colorVisual = factory.CreateVisual( propertyMap );
374
375   Property::Map resultMap;
376   colorVisual.CreatePropertyMap( resultMap );
377
378   Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
379   DALI_TEST_CHECK( typeValue );
380   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
381
382   Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
383   DALI_TEST_CHECK( colorValue );
384   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
385
386   // change the blend color
387   Actor actor;
388   colorVisual.RemoveAndReset( actor );
389   propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
390   colorVisual = factory.CreateVisual( propertyMap  );
391   colorVisual.CreatePropertyMap( resultMap );
392
393   colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
394   DALI_TEST_CHECK( colorValue );
395   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
396
397   // Test the properties. TODO: to be completed.
398   colorVisual.SetProperty( ColorVisual::Property::MIX_COLOR, Color::RED );
399   Property::Value value = colorVisual.GetProperty( ColorVisual::Property::MIX_COLOR );
400
401   END_TEST;
402 }
403
404 int UtcDaliVisualGetPropertyMap2(void)
405 {
406   ToolkitTestApplication application;
407   tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
408
409   VisualFactory factory = VisualFactory::Get();
410   Property::Map propertyMap;
411   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
412   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
413   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
414   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
415
416   Property::Map resultMap;
417   borderVisual.CreatePropertyMap( resultMap );
418
419   // check the property values from the returned map from visual
420   Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
421   DALI_TEST_CHECK( typeValue );
422   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
423
424   Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
425   DALI_TEST_CHECK( colorValue );
426   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
427
428   Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
429   DALI_TEST_CHECK( sizeValue );
430   DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
431
432   Property::Map propertyMap1;
433   propertyMap1[ Visual::Property::TYPE ] = Visual::BORDER;
434   propertyMap1[ BorderVisual::Property::COLOR  ] = Color::CYAN;
435   propertyMap1[ BorderVisual::Property::SIZE   ] = 10.0f;
436   borderVisual = factory.CreateVisual( propertyMap1 );
437   borderVisual.CreatePropertyMap( resultMap );
438
439   typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
440   DALI_TEST_CHECK( typeValue );
441   DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
442
443   colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
444   DALI_TEST_CHECK( colorValue );
445   DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
446
447   colorValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
448   DALI_TEST_CHECK( colorValue );
449   DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
450
451   // Test the properties. TODO: to be completed.
452   borderVisual.SetProperty( BorderVisual::Property::COLOR, Color::RED );
453   Property::Value value = borderVisual.GetProperty( BorderVisual::Property::COLOR );
454
455   END_TEST;
456 }
457
458 int UtcDaliVisualGetPropertyMap3(void)
459 {
460   ToolkitTestApplication application;
461   tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
462
463   VisualFactory factory = VisualFactory::Get();
464   DALI_TEST_CHECK( factory );
465
466   Property::Map propertyMap;
467   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
468
469   Vector2 start(-1.f, -1.f);
470   Vector2 end(1.f, 1.f);
471   propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
472   propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
473   propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
474
475   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.2f, 0.8f));
476
477   Property::Array stopColors;
478   stopColors.PushBack( Color::RED );
479   stopColors.PushBack( Color::GREEN );
480   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
481
482   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
483
484   Property::Map resultMap;
485   gradientVisual.CreatePropertyMap( resultMap );
486
487   // check the property values from the returned map from visual
488   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
489   DALI_TEST_CHECK( value );
490   DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
491
492   value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
493   DALI_TEST_CHECK( value );
494   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
495
496   value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
497   DALI_TEST_CHECK( value );
498   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
499
500   value = resultMap.Find( GradientVisual::Property::START_POSITION,   Property::VECTOR2 );
501   DALI_TEST_CHECK( value );
502   DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
503
504   value = resultMap.Find( GradientVisual::Property::END_POSITION,   Property::VECTOR2 );
505   DALI_TEST_CHECK( value );
506   DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
507
508   value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
509   DALI_TEST_CHECK( value );
510   Property::Array* offsetArray = value->GetArray();
511   DALI_TEST_CHECK( offsetArray->Count() == 2 );
512   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
513   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
514
515   value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
516   DALI_TEST_CHECK( value );
517   Property::Array* colorArray = value->GetArray();
518   DALI_TEST_CHECK( colorArray->Count() == 2 );
519   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
520   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
521
522   // Test the properties. TODO: to be completed.
523   gradientVisual.SetProperty( GradientVisual::Property::STOP_COLOR, Color::RED );
524   Property::Value gradientValue = gradientVisual.GetProperty( GradientVisual::Property::STOP_COLOR );
525
526   END_TEST;
527 }
528
529 int UtcDaliVisualGetPropertyMap4(void)
530 {
531   ToolkitTestApplication application;
532   tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
533
534   VisualFactory factory = VisualFactory::Get();
535   DALI_TEST_CHECK( factory );
536
537   Property::Map propertyMap;
538   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
539
540   Vector2 center(100.f, 100.f);
541   float radius = 100.f;
542   propertyMap.Insert(GradientVisual::Property::UNITS,  GradientVisual::Units::USER_SPACE);
543   propertyMap.Insert(GradientVisual::Property::CENTER,  center);
544   propertyMap.Insert(GradientVisual::Property::RADIUS,  radius);
545   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector3(0.1f, 0.3f, 1.1f));
546
547   Property::Array stopColors;
548   stopColors.PushBack( Color::RED );
549   stopColors.PushBack( Color::BLACK );
550   stopColors.PushBack( Color::GREEN );
551   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
552
553   Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
554   DALI_TEST_CHECK( gradientVisual );
555
556   Property::Map resultMap;
557   gradientVisual.CreatePropertyMap( resultMap );
558
559   // check the property values from the returned map from visual
560   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
561   DALI_TEST_CHECK( value );
562   DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
563
564   value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
565   DALI_TEST_CHECK( value );
566   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
567
568   value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
569   DALI_TEST_CHECK( value );
570   DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
571
572   value = resultMap.Find( GradientVisual::Property::CENTER,  Property::VECTOR2 );
573   DALI_TEST_CHECK( value );
574   DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
575
576   value = resultMap.Find( GradientVisual::Property::RADIUS,  Property::FLOAT );
577   DALI_TEST_CHECK( value );
578   DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
579
580   value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
581   DALI_TEST_CHECK( value );
582   Property::Array* offsetArray = value->GetArray();
583   DALI_TEST_CHECK( offsetArray->Count() == 3 );
584   DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
585   DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
586   // any stop value will be clamped to [0.0, 1.0];
587   DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
588
589   value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
590   DALI_TEST_CHECK( value );
591   Property::Array* colorArray = value->GetArray();
592   DALI_TEST_CHECK( colorArray->Count() == 3 );
593   DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
594   DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
595   DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
596
597   END_TEST;
598 }
599
600 int UtcDaliVisualGetPropertyMap5(void)
601 {
602   ToolkitTestApplication application;
603   tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
604
605   VisualFactory factory = VisualFactory::Get();
606   Property::Map propertyMap;
607   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
608   propertyMap.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
609   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH,   20 );
610   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT,   30 );
611   propertyMap.Insert( ImageVisual::Property::FITTING_MODE,   FittingMode::FIT_HEIGHT );
612   propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE,   SamplingMode::BOX_THEN_NEAREST );
613   propertyMap.Insert( ImageVisual::Property::PIXEL_AREA, Vector4( 0.25f, 0.25f, 0.5f, 0.5f ) );
614   propertyMap.Insert( ImageVisual::Property::WRAP_MODE_U, WrapMode::REPEAT );
615   propertyMap.Insert( ImageVisual::Property::WRAP_MODE_V, WrapMode::MIRRORED_REPEAT );
616   propertyMap.Insert( "synchronousLoading",   true );
617
618   Visual::Base imageVisual = factory.CreateVisual(propertyMap);
619   DALI_TEST_CHECK( imageVisual );
620
621   Property::Map resultMap;
622   imageVisual.CreatePropertyMap( resultMap );
623
624   // check the property values from the returned map from visual
625   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
626   DALI_TEST_CHECK( value );
627   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
628
629   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
630   DALI_TEST_CHECK( value );
631   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
632
633   value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
634   DALI_TEST_CHECK( value );
635   DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
636
637   value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
638   DALI_TEST_CHECK( value );
639   DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
640
641   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
642   DALI_TEST_CHECK( value );
643   DALI_TEST_CHECK( value->Get<int>() == 20 );
644
645   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
646   DALI_TEST_CHECK( value );
647   DALI_TEST_CHECK( value->Get<int>() == 30 );
648
649   value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
650   DALI_TEST_CHECK( value );
651   DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.25f, 0.25f, 0.5f, 0.5f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
652
653   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
654   DALI_TEST_CHECK( value );
655   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::REPEAT);
656
657   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
658   DALI_TEST_CHECK( value );
659   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::MIRRORED_REPEAT);
660
661   value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
662   DALI_TEST_CHECK( value );
663   DALI_TEST_CHECK( value->Get<bool>() == true );
664
665   // Test the properties..
666   Property::Value imageValue = imageVisual.GetProperty( ImageVisual::Property::URL );
667   DALI_TEST_CHECK( imageValue.Get<std::string>() == TEST_IMAGE_FILE_NAME );
668
669   // Other Properties for Image Visual can be tested here once implemented in the Visual
670
671   tet_infoline( "UtcDaliVisualGetPropertyMap5 Ensuring Property without a Getter is not problematic" );
672   imageValue = imageVisual.GetProperty( ImageVisual::Property::DESIRED_HEIGHT );
673   DALI_TEST_CHECK( imageValue.Get<int>()  != 30 );
674
675
676   // Rest of test uses Image not an url ( legacy )
677
678   // Get an image visual with an image handle, and test the default property values
679   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
680   imageVisual = factory.CreateVisual(image);
681   imageVisual.CreatePropertyMap( resultMap );
682
683   value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
684   DALI_TEST_CHECK( value );
685   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
686
687   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
688   DALI_TEST_CHECK( value );
689   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
690
691   value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
692   DALI_TEST_CHECK( value );
693   DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
694
695   value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
696   DALI_TEST_CHECK( value );
697   DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
698
699   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
700   DALI_TEST_CHECK( value );
701   DALI_TEST_CHECK( value->Get<int>() == 100 );
702
703   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
704   DALI_TEST_CHECK( value );
705   DALI_TEST_CHECK( value->Get<int>() == 200 );
706
707   value = resultMap.Find( ImageVisual::Property::PIXEL_AREA, Property::VECTOR4 );
708   DALI_TEST_CHECK( value );
709   DALI_TEST_EQUALS( value->Get<Vector4>(), Vector4( 0.f, 0.f, 1.f, 1.f ), Math::MACHINE_EPSILON_100, TEST_LOCATION );
710
711   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_U, Property::INTEGER );
712   DALI_TEST_CHECK( value );
713   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::DEFAULT);
714
715   value = resultMap.Find( ImageVisual::Property::WRAP_MODE_V, Property::INTEGER );
716   DALI_TEST_CHECK( value );
717   DALI_TEST_CHECK(  value->Get<int>() == WrapMode::DEFAULT);
718
719   value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
720   DALI_TEST_CHECK( value );
721   DALI_TEST_CHECK( value->Get<bool>() == false );
722
723   END_TEST;
724 }
725
726 int UtcDaliVisualGetPropertyMap6(void)
727 {
728   ToolkitTestApplication application;
729   tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
730
731   bool BORDER_ONLY_SETTING = true;
732
733   VisualFactory factory = VisualFactory::Get();
734   Property::Map propertyMap;
735   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
736   propertyMap.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
737   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  BORDER_ONLY_SETTING );
738   Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
739
740   Property::Map resultMap;
741   nPatchVisual.CreatePropertyMap( resultMap );
742
743   // check the property values from the returned map from visual
744   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
745   DALI_TEST_CHECK( value );
746   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
747
748   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
749   DALI_TEST_CHECK( value );
750   DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
751
752   value = resultMap.Find( ImageVisual::Property::BORDER_ONLY,  Property::BOOLEAN );
753   DALI_TEST_CHECK( value );
754   DALI_TEST_CHECK( value->Get<bool>() );
755
756   // Test the properties via Index.
757   nPatchVisual.SetProperty( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME ); // May not able to change URL in future using SetProperty
758   Property::Value nPatchValue = nPatchVisual.GetProperty( ImageVisual::Property::URL );
759   DALI_TEST_CHECK( nPatchValue.Get<std::string>() == TEST_NPATCH_FILE_NAME );
760
761   nPatchValue = nPatchVisual.GetProperty( ImageVisual::Property::BORDER_ONLY );
762   DALI_TEST_CHECK( nPatchValue.Get<bool>() == BORDER_ONLY_SETTING );
763
764   // Other Properties for N-Patch Visual can be tested here once implemented in the Visual
765
766   tet_infoline( "UtcDaliVisualGetPropertyMap6 Ensuring Property without a Getter is not problematic" );
767   nPatchValue = nPatchVisual.GetProperty( ImageVisual::Property::DESIRED_HEIGHT );
768   DALI_TEST_CHECK( nPatchValue.Get<int>()  != 30 );
769
770   END_TEST;
771 }
772
773 int UtcDaliVisualGetPropertyMap7(void)
774 {
775   ToolkitTestApplication application;
776   tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
777
778   // request SvgVisual with a property map
779   VisualFactory factory = VisualFactory::Get();
780   Property::Map propertyMap;
781   propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
782   propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
783   Visual::Base svgVisual = factory.CreateVisual( propertyMap );
784
785   Property::Map resultMap;
786   svgVisual.CreatePropertyMap( resultMap );
787   // check the property values from the returned map from a visual
788   Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
789   DALI_TEST_CHECK( value );
790   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
791
792   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
793   DALI_TEST_CHECK( value );
794   DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
795
796   // request SvgVisual with an URL
797   Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
798   resultMap.Clear();
799   svgVisual2.CreatePropertyMap( resultMap );
800   // check the property values from the returned map from a visual
801   value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
802   DALI_TEST_CHECK( value );
803   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
804
805   value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
806   DALI_TEST_CHECK( value );
807   DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
808
809   // Test the properties. TODO: to be completed.
810   svgVisual.SetProperty( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
811   Property::Value svgValue = svgVisual.GetProperty( ImageVisual::Property::URL );
812
813   END_TEST;
814 }
815
816 //Mesh visual
817 int UtcDaliVisualGetPropertyMap8(void)
818 {
819   ToolkitTestApplication application;
820   tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
821
822   //Request MeshVisual using a property map.
823   VisualFactory factory = VisualFactory::Get();
824   Property::Map propertyMap;
825   propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
826   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
827   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
828   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
829   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
830   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
831   Visual::Base meshVisual = factory.CreateVisual( propertyMap );
832
833   Property::Map resultMap;
834   meshVisual.CreatePropertyMap( resultMap );
835
836   //Check values in the result map are identical to the initial map's values.
837   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
838   DALI_TEST_CHECK( value );
839   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
840
841   value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
842   DALI_TEST_CHECK( value );
843   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
844
845   value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
846   DALI_TEST_CHECK( value );
847   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
848
849   value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
850   DALI_TEST_CHECK( value );
851   DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
852
853   value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
854   DALI_TEST_CHECK( value );
855   DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
856
857   value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
858   DALI_TEST_CHECK( value );
859   DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
860
861   // Test the properties. TODO: to be completed.
862   meshVisual.SetProperty( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
863   Property::Value meshValue = meshVisual.GetProperty( MeshVisual::Property::OBJECT_URL );
864
865   END_TEST;
866 }
867
868 //Primitive shape visual
869 int UtcDaliVisualGetPropertyMap9(void)
870 {
871   ToolkitTestApplication application;
872   tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
873
874   Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
875   Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
876
877   //Request PrimitiveVisual using a property map.
878   VisualFactory factory = VisualFactory::Get();
879   Property::Map propertyMap;
880   propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
881   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
882   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, color );
883   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
884   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
885   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
886   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
887   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
888   propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
889   propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
890   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
891   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
892   propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
893   Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
894
895   Property::Map resultMap;
896   primitiveVisual.CreatePropertyMap( resultMap );
897
898   //Check values in the result map are identical to the initial map's values.
899   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
900   DALI_TEST_CHECK( value );
901   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
902
903   value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
904   DALI_TEST_CHECK( value );
905   DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
906
907   value = resultMap.Find( PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4 );
908   DALI_TEST_CHECK( value );
909   DALI_TEST_CHECK( value->Get<Vector4>() == color );
910   DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
911
912   value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
913   DALI_TEST_CHECK( value );
914   DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
915
916   value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
917   DALI_TEST_CHECK( value );
918   DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
919
920   value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
921   DALI_TEST_CHECK( value );
922   DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
923
924   value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
925   DALI_TEST_CHECK( value );
926   DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
927
928   value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
929   DALI_TEST_CHECK( value );
930   DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
931
932   value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
933   DALI_TEST_CHECK( value );
934   DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
935
936   value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
937   DALI_TEST_CHECK( value );
938   DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
939
940   value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
941   DALI_TEST_CHECK( value );
942   DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
943
944   value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
945   DALI_TEST_CHECK( value );
946   DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
947
948   value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
949   DALI_TEST_CHECK( value );
950   DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
951
952   // Test the properties. TODO: to be completed.
953   primitiveVisual.SetProperty( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
954   Property::Value primitiveValue = primitiveVisual.GetProperty( PrimitiveVisual::Property::SHAPE );
955
956   END_TEST;
957 }
958
959 int UtcDaliVisualGetPropertyMapBatchImageVisual(void)
960 {
961   ToolkitTestApplication application;
962   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisual:" );
963
964   VisualFactory factory = VisualFactory::Get();
965   Property::Map propertyMap;
966   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
967   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
968   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
969   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 20 );
970   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 30 );
971
972   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
973   DALI_TEST_CHECK( batchImageVisual );
974
975   Property::Map resultMap;
976   batchImageVisual.CreatePropertyMap( resultMap );
977
978   // Check the property values from the returned map from visual
979   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
980   DALI_TEST_CHECK( value );
981   DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
982
983   value = resultMap.Find( ImageVisual::Property::URL, Property::STRING );
984   DALI_TEST_CHECK( value );
985   DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
986
987   value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER );
988   DALI_TEST_CHECK( value );
989   DALI_TEST_CHECK( value->Get<int>() == 20 );
990
991   value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER );
992   DALI_TEST_CHECK( value );
993   DALI_TEST_CHECK( value->Get<int>() == 30 );
994
995   // Test the properties. TODO: to be completed.
996   batchImageVisual.SetProperty( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
997   Property::Value primitiveValue = batchImageVisual.GetProperty( ImageVisual::Property::URL );
998
999   END_TEST;
1000 }
1001
1002 //Text shape visual
1003 int UtcDaliVisualGetPropertyMap10(void)
1004 {
1005   ToolkitTestApplication application;
1006   tet_infoline( "UtcDaliVisualGetPropertyMap10: TextVisual" );
1007
1008   //Request PrimitiveVisual using a property map.
1009   VisualFactory factory = VisualFactory::Get();
1010
1011   Property::Map propertyMap;
1012   propertyMap.Insert( Visual::Property::TYPE, Visual::TEXT );
1013   propertyMap.Insert( "renderingBackend", static_cast<int>( Toolkit::Text::DEFAULT_RENDERING_BACKEND ) );
1014   propertyMap.Insert( "text", "Hello world" );
1015   propertyMap.Insert( "fontFamily", "TizenSans" );
1016
1017   Property::Map fontStyleMapSet;
1018   fontStyleMapSet.Insert( "weight", "bold" );
1019   propertyMap.Insert( "fontStyle", fontStyleMapSet );
1020
1021   propertyMap.Insert( "pointSize", 12.f );
1022   propertyMap.Insert( "multiLine", true );
1023   propertyMap.Insert( "horizontalAlignment", "CENTER" );
1024   propertyMap.Insert( "verticalAlignment", "CENTER" );
1025   propertyMap.Insert( "textColor", Color::RED );
1026   propertyMap.Insert( "enableMarkup", false );
1027   propertyMap.Insert( "enableAutoScroll", false );
1028   propertyMap.Insert( "lineSpacing", 0.f );
1029   propertyMap.Insert( "batchingEnabled", false );
1030   Visual::Base textVisual = factory.CreateVisual( propertyMap );
1031
1032   Property::Map resultMap;
1033   textVisual.CreatePropertyMap( resultMap );
1034
1035   //Check values in the result map are identical to the initial map's values.
1036   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
1037   DALI_TEST_CHECK( value );
1038   DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION );
1039
1040   value = resultMap.Find( TextVisual::Property::RENDERING_BACKEND, Property::INTEGER );
1041   DALI_TEST_CHECK( value );
1042   DALI_TEST_EQUALS( value->Get<int>(), Toolkit::Text::DEFAULT_RENDERING_BACKEND, TEST_LOCATION );
1043
1044   value = resultMap.Find( TextVisual::Property::TEXT, Property::STRING );
1045   DALI_TEST_CHECK( value );
1046   DALI_TEST_EQUALS( value->Get<std::string>(), "Hello world", TEST_LOCATION );
1047
1048   value = resultMap.Find( TextVisual::Property::FONT_FAMILY, Property::STRING );
1049   DALI_TEST_CHECK( value );
1050   DALI_TEST_EQUALS( value->Get<std::string>(), "TizenSans", TEST_LOCATION );
1051
1052   value = resultMap.Find( TextVisual::Property::FONT_STYLE, Property::MAP );
1053   DALI_TEST_CHECK( value );
1054
1055   Property::Map fontStyleMapGet = value->Get<Property::Map>();
1056   DALI_TEST_EQUALS( fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION );
1057   DALI_TEST_EQUALS( DaliTestCheckMaps( fontStyleMapGet, fontStyleMapSet ), true, TEST_LOCATION );
1058
1059   value = resultMap.Find( TextVisual::Property::POINT_SIZE, Property::FLOAT );
1060   DALI_TEST_CHECK( value );
1061   DALI_TEST_EQUALS( value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1062
1063   value = resultMap.Find( TextVisual::Property::MULTI_LINE, Property::BOOLEAN );
1064   DALI_TEST_CHECK( value );
1065   DALI_TEST_CHECK( value->Get<bool>() );
1066
1067   value = resultMap.Find( TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::STRING );
1068   DALI_TEST_CHECK( value );
1069   DALI_TEST_EQUALS( value->Get<std::string>(), "CENTER", TEST_LOCATION );
1070
1071   value = resultMap.Find( TextVisual::Property::VERTICAL_ALIGNMENT, Property::STRING );
1072   DALI_TEST_CHECK( value );
1073   DALI_TEST_EQUALS( value->Get<std::string>(), "CENTER", TEST_LOCATION );
1074
1075   value = resultMap.Find( TextVisual::Property::TEXT_COLOR, Property::VECTOR4 );
1076   DALI_TEST_CHECK( value );
1077   DALI_TEST_EQUALS( value->Get<Vector4>(), Color::RED, TEST_LOCATION );
1078
1079   value = resultMap.Find( TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN );
1080   DALI_TEST_CHECK( value );
1081   DALI_TEST_CHECK( !value->Get<bool>() );
1082
1083   value = resultMap.Find( TextVisual::Property::ENABLE_AUTO_SCROLL, Property::BOOLEAN );
1084   DALI_TEST_CHECK( !value );
1085
1086   value = resultMap.Find( TextVisual::Property::LINE_SPACING, Property::FLOAT );
1087   DALI_TEST_CHECK( value );
1088   DALI_TEST_EQUALS( value->Get<float>(), 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1089
1090   value = resultMap.Find( TextVisual::Property::BATCHING_ENABLED, Property::BOOLEAN );
1091   DALI_TEST_CHECK( value );
1092   DALI_TEST_CHECK( !value->Get<bool>() );
1093
1094   END_TEST;
1095 }
1096
1097 int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void)
1098 {
1099   ToolkitTestApplication application;
1100   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas:" );
1101
1102   VisualFactory factory = VisualFactory::Get();
1103   Property::Map propertyMap;
1104   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
1105   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
1106   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
1107
1108   // Set the desired size to be larger than the atlas limit of 1024x1024.
1109   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 2048 );
1110   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 2048 );
1111
1112   // Create the visual.
1113   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
1114
1115   DALI_TEST_CHECK( batchImageVisual );
1116
1117   Actor actor = Actor::New();
1118   batchImageVisual.SetOnStage( actor );
1119
1120   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1121
1122   END_TEST;
1123 }
1124
1125 int UtcDaliVisualAnimateBorderVisual01(void)
1126 {
1127   ToolkitTestApplication application;
1128   tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1129
1130   VisualFactory factory = VisualFactory::Get();
1131   Property::Map propertyMap;
1132   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
1133   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
1134   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
1135   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1136
1137   Actor actor = Actor::New();
1138   actor.SetSize(2000, 2000);
1139   actor.SetParentOrigin(ParentOrigin::CENTER);
1140   Stage::GetCurrent().Add(actor);
1141   borderVisual.SetOnStage( actor );
1142
1143   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1144
1145   Renderer renderer = actor.GetRendererAt(0);
1146   Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::COLOR );
1147
1148   Animation animation = Animation::New(4.0f);
1149   animation.AnimateTo( Property(renderer, index), Color::WHITE );
1150   animation.Play();
1151
1152   application.SendNotification();
1153   application.Render(0);
1154   application.Render(2000u); // halfway point between blue and white
1155
1156   Vector4 color = renderer.GetProperty<Vector4>( index );
1157   Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1158   DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1159   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1160
1161   application.Render(2000u); // halfway point between blue and white
1162
1163   color = renderer.GetProperty<Vector4>( index );
1164   DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1165   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1166
1167   END_TEST;
1168 }
1169
1170
1171 int UtcDaliVisualAnimateBorderVisual02(void)
1172 {
1173   ToolkitTestApplication application;
1174   tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1175
1176   VisualFactory factory = VisualFactory::Get();
1177   Property::Map propertyMap;
1178   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
1179   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
1180   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
1181   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1182
1183   Actor actor = Actor::New();
1184   actor.SetSize(2000, 2000);
1185   actor.SetParentOrigin(ParentOrigin::CENTER);
1186   Stage::GetCurrent().Add(actor);
1187   borderVisual.SetOnStage( actor );
1188
1189   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1190
1191   Renderer renderer = actor.GetRendererAt(0);
1192   Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE );
1193
1194   Animation animation = Animation::New(4.0f);
1195   animation.AnimateTo( Property(renderer, index), 9.0f );
1196   animation.Play();
1197
1198   application.SendNotification();
1199   application.Render(0);
1200   application.Render(2000u); // halfway point
1201
1202   float size = renderer.GetProperty<float>( index );
1203   DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1204   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1205
1206   application.Render(2000u); // halfway point between blue and white
1207
1208   size = renderer.GetProperty<float>( index );
1209   DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1210   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1211
1212   END_TEST;
1213 }
1214
1215 int UtcDaliVisualAnimateColorVisual(void)
1216 {
1217   ToolkitTestApplication application;
1218   tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1219
1220   VisualFactory factory = VisualFactory::Get();
1221   Property::Map propertyMap;
1222   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1223   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1224   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1225
1226   Actor actor = Actor::New();
1227   actor.SetSize(2000, 2000);
1228   actor.SetParentOrigin(ParentOrigin::CENTER);
1229   Stage::GetCurrent().Add(actor);
1230   borderVisual.SetOnStage( actor );
1231
1232   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1233
1234   Renderer renderer = actor.GetRendererAt(0);
1235   Property::Index index = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
1236
1237   Animation animation = Animation::New(4.0f);
1238   animation.AnimateTo( Property(renderer, index), Color::WHITE );
1239   animation.Play();
1240
1241   application.SendNotification();
1242   application.Render(0);
1243   application.Render(2000u); // halfway point
1244
1245   Vector4 color = renderer.GetProperty<Vector4>( index );
1246   Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1247   DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1248
1249   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("mixColor", testColor ), true, TEST_LOCATION );
1250
1251   application.Render(2000u); // halfway point between blue and white
1252
1253   color = renderer.GetProperty<Vector4>( index );
1254   DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1255
1256   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("mixColor", Color::WHITE ), true, TEST_LOCATION );
1257
1258
1259   END_TEST;
1260 }
1261
1262
1263 int UtcDaliVisualAnimatePrimitiveVisual(void)
1264 {
1265   ToolkitTestApplication application;
1266   tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1267
1268   VisualFactory factory = VisualFactory::Get();
1269   Property::Map propertyMap;
1270   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1271   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1272   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1273
1274   Actor actor = Actor::New();
1275   actor.SetSize(2000, 2000);
1276   actor.SetParentOrigin(ParentOrigin::CENTER);
1277   actor.SetColor(Color::BLACK);
1278   Stage::GetCurrent().Add(actor);
1279   borderVisual.SetOnStage( actor );
1280
1281   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1282
1283   Renderer renderer = actor.GetRendererAt(0);
1284   Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::MIX_COLOR );
1285
1286   // The property isn't registered on the renderer, it's instead registered on the shader.
1287   DALI_TEST_EQUALS( index, Property::INVALID_INDEX, TEST_LOCATION );
1288
1289   Animation animation = Animation::New(4.0f);
1290   animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1291   animation.Play();
1292
1293   application.SendNotification();
1294   application.Render(0);
1295   application.Render(2000u); // halfway point
1296
1297   // Actor color overrides renderer color.
1298   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
1299
1300   application.Render(2000u); // halfway point between blue and white
1301
1302   DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
1303   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
1304
1305
1306   END_TEST;
1307 }
1308
1309 int UtcDaliVisualWireframeVisual(void)
1310 {
1311   ToolkitTestApplication application;
1312
1313   VisualFactory factory = VisualFactory::Get();
1314   Property::Map propertyMap;
1315   propertyMap.Insert( Visual::Property::TYPE, Visual::WIREFRAME );
1316
1317   // Create the visual.
1318   Visual::Base visual = factory.CreateVisual( propertyMap );
1319
1320   DALI_TEST_CHECK( visual );
1321
1322   Property::Map resultMap;
1323   visual.CreatePropertyMap( resultMap );
1324
1325   // Check the property values from the returned map from visual
1326   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
1327   DALI_TEST_CHECK( value );
1328   DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
1329
1330   // Test the properties. TODO: to be completed.
1331   Property::Value primitiveValue = visual.GetProperty( Visual::Property::TYPE );
1332
1333   END_TEST;
1334 }
1335
1336 int UtcDaliVisualGetTransform(void)
1337 {
1338   ToolkitTestApplication application;
1339   tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
1340
1341   VisualFactory factory = VisualFactory::Get();
1342   Property::Map propertyMap;
1343   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1344   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1345   Visual::Base colorVisual = factory.CreateVisual( propertyMap );
1346
1347   Dali::Property::Map map;
1348   Dali::Property::Value transformProperty = colorVisual.GetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM );
1349   transformProperty.Get(map);
1350
1351   //Test default values
1352   {
1353     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET );
1354     DALI_TEST_CHECK( typeValue );
1355     DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
1356   }
1357   {
1358     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::SIZE );
1359     DALI_TEST_CHECK( typeValue );
1360     DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
1361   }
1362   {
1363     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE );
1364     DALI_TEST_CHECK( typeValue );
1365     DALI_TEST_CHECK( typeValue->Get<Vector4>() == Vector4(0.0f,0.0f,0.0f,0.0f) );
1366   }
1367   {
1368     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN );
1369     DALI_TEST_CHECK( typeValue );
1370     DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::CENTER );
1371   }
1372   {
1373     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT );
1374     DALI_TEST_CHECK( typeValue );
1375     DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::CENTER );
1376   }
1377
1378   END_TEST;
1379 }
1380
1381 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
1382 {
1383   Property::Map transform;
1384   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
1385   transform.Insert( Visual::DevelProperty::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
1386   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4(1.0f, 1.0f, 0.0f,0.0f) );
1387   transform.Insert( Visual::DevelProperty::Transform::Property::ORIGIN, "TOP_BEGIN" );
1388   transform.Insert( Visual::DevelProperty::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
1389
1390   visual.SetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM, transform );
1391
1392   Dali::Property::Map map;
1393   Dali::Property::Value transformProperty = visual.GetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM );
1394   transformProperty.Get(map);
1395
1396   {
1397     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET );
1398     DALI_TEST_CHECK( typeValue );
1399     DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
1400   }
1401   {
1402     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::SIZE );
1403     DALI_TEST_CHECK( typeValue );
1404     DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
1405   }
1406   {
1407     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE );
1408     DALI_TEST_CHECK( typeValue );
1409     DALI_TEST_EQUALS( typeValue->Get<Vector4>(), Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
1410   }
1411   {
1412     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN );
1413     DALI_TEST_CHECK( typeValue );
1414     DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::TOP_BEGIN, TEST_LOCATION );
1415   }
1416   {
1417     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT );
1418     DALI_TEST_CHECK( typeValue );
1419     DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
1420   }
1421
1422   //Put the visual on the stage
1423   Actor actor = Actor::New();
1424   actor.SetSize(200.f, 200.f);
1425   Stage::GetCurrent().Add( actor );
1426   visual.SetOnStage( actor );
1427   application.SendNotification();
1428   application.Render(0);
1429   Renderer renderer( actor.GetRendererAt(0) );
1430
1431   //Check that the properties have been registered on the Renderer
1432   Vector2 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
1433   DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
1434
1435   Vector2 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
1436   DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
1437
1438   Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
1439   DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
1440
1441   Vector2 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
1442   DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
1443
1444   Vector2 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
1445   DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
1446
1447   //Set a new transform
1448   transform.Clear();
1449   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
1450   transform.Insert( Visual::DevelProperty::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
1451   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4(0.0f, 0.0f, 1.0f,1.0f) );
1452   visual.SetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM, transform );
1453   application.SendNotification();
1454   application.Render(0);
1455
1456   //Check that the values have changed in the renderer
1457   offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
1458   DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
1459
1460   size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
1461   DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
1462
1463   offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
1464   DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
1465
1466   //Parent origin and anchor point should have default values
1467   parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
1468   DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
1469
1470   anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
1471   DALI_TEST_EQUALS( anchorPoint, Vector2(0.0f,0.0f), TEST_LOCATION );
1472 }
1473
1474 int UtcDaliVisualSetTransform0(void)
1475 {
1476   ToolkitTestApplication application;
1477   tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
1478
1479   VisualFactory factory = VisualFactory::Get();
1480   Property::Map propertyMap;
1481   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1482   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1483   Visual::Base visual = factory.CreateVisual( propertyMap );
1484   TestTransform( application, visual );
1485
1486   END_TEST;
1487 }
1488
1489 int UtcDaliVisualSetTransform1(void)
1490 {
1491   ToolkitTestApplication application;
1492   tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
1493
1494   VisualFactory factory = VisualFactory::Get();
1495   Property::Map propertyMap;
1496   propertyMap[ Visual::Property::TYPE           ] = Visual::PRIMITIVE;
1497   propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Vector4(1.0f,1.0f,1.0f,1.0f);
1498   propertyMap[ PrimitiveVisual::Property::SHAPE  ] = PrimitiveVisual::Shape::SPHERE;
1499   propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
1500   propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
1501   Visual::Base visual = factory.CreateVisual( propertyMap );
1502   TestTransform( application, visual );
1503
1504   END_TEST;
1505 }
1506
1507 int UtcDaliVisualSetTransform2(void)
1508 {
1509   ToolkitTestApplication application;
1510   tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
1511
1512   VisualFactory factory = VisualFactory::Get();
1513   Property::Map propertyMap;
1514   propertyMap.Insert( Visual::Property::TYPE,  Visual::GRADIENT );
1515   Property::Array stopOffsets;
1516   stopOffsets.PushBack( 0.0f );
1517   stopOffsets.PushBack( 0.3f );
1518   stopOffsets.PushBack( 0.6f );
1519   stopOffsets.PushBack( 0.8f );
1520   stopOffsets.PushBack( 1.0f );
1521   propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
1522
1523   Property::Array stopColors;
1524   stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
1525   stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
1526   stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
1527   stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
1528   stopColors.PushBack( Color::YELLOW );
1529   propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
1530   propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
1531   propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
1532   Visual::Base visual = factory.CreateVisual( propertyMap );
1533   TestTransform( application, visual );
1534
1535   END_TEST;
1536 }
1537
1538 int UtcDaliVisualSetTransform3(void)
1539 {
1540   ToolkitTestApplication application;
1541   tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
1542
1543   VisualFactory factory = VisualFactory::Get();
1544   Property::Map propertyMap;
1545   propertyMap.Insert( Visual::Property::TYPE, Visual::BORDER );
1546   propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
1547   propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
1548   Visual::Base visual = factory.CreateVisual( propertyMap );
1549   TestTransform( application, visual );
1550
1551   END_TEST;
1552 }
1553
1554 int UtcDaliVisualSetTransform4(void)
1555 {
1556   ToolkitTestApplication application;
1557   tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
1558
1559   VisualFactory factory = VisualFactory::Get();
1560   Property::Map propertyMap;
1561   propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
1562   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1563   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1564   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1565   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1566   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1567   Visual::Base visual = factory.CreateVisual( propertyMap );
1568   TestTransform( application, visual );
1569
1570   END_TEST;
1571 }
1572
1573 int UtcDaliVisualSetTransform5(void)
1574 {
1575   ToolkitTestApplication application;
1576   tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
1577
1578   VisualFactory factory = VisualFactory::Get();
1579   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
1580   Visual::Base visual = factory.CreateVisual(image);
1581   TestTransform( application, visual );
1582
1583   END_TEST;
1584 }
1585
1586 int UtcDaliVisualSetTransform6(void)
1587 {
1588   ToolkitTestApplication application;
1589   tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
1590
1591   VisualFactory factory = VisualFactory::Get();
1592   Property::Map propertyMap;
1593   propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
1594   propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
1595   propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
1596   propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
1597   propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
1598   propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
1599   propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
1600   Visual::Base visual = factory.CreateVisual(propertyMap);
1601   TestTransform( application, visual );
1602
1603   END_TEST;
1604 }
1605
1606 int UtcDaliVisualSetTransform7(void)
1607 {
1608   ToolkitTestApplication application;
1609   tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
1610
1611   VisualFactory factory = VisualFactory::Get();
1612   Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200));
1613   Visual::Base visual = factory.CreateVisual(image);
1614   TestTransform( application, visual );
1615
1616   END_TEST;
1617 }
1618
1619