779f808214c573361848bf8f7d2404432ac43ffa
[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   DALI_TEST_CHECK( !value->Get<bool>() );
1086
1087   value = resultMap.Find( TextVisual::Property::LINE_SPACING, Property::FLOAT );
1088   DALI_TEST_CHECK( value );
1089   DALI_TEST_EQUALS( value->Get<float>(), 0.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
1090
1091   value = resultMap.Find( TextVisual::Property::BATCHING_ENABLED, Property::BOOLEAN );
1092   DALI_TEST_CHECK( value );
1093   DALI_TEST_CHECK( !value->Get<bool>() );
1094
1095   END_TEST;
1096 }
1097
1098 int UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas(void)
1099 {
1100   ToolkitTestApplication application;
1101   tet_infoline( "UtcDaliVisualGetPropertyMapBatchImageVisualNoAtlas:" );
1102
1103   VisualFactory factory = VisualFactory::Get();
1104   Property::Map propertyMap;
1105   propertyMap.Insert( Visual::Property::TYPE, Visual::IMAGE );
1106   propertyMap.Insert( ImageVisual::Property::BATCHING_ENABLED, true );
1107   propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
1108
1109   // Set the desired size to be larger than the atlas limit of 1024x1024.
1110   propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH, 2048 );
1111   propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT, 2048 );
1112
1113   // Create the visual.
1114   Visual::Base batchImageVisual = factory.CreateVisual( propertyMap );
1115
1116   DALI_TEST_CHECK( batchImageVisual );
1117
1118   Actor actor = Actor::New();
1119   batchImageVisual.SetOnStage( actor );
1120
1121   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1122
1123   END_TEST;
1124 }
1125
1126 int UtcDaliVisualAnimateBorderVisual01(void)
1127 {
1128   ToolkitTestApplication application;
1129   tet_infoline( "UtcDaliAnimateBorderVisual Color" );
1130
1131   VisualFactory factory = VisualFactory::Get();
1132   Property::Map propertyMap;
1133   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
1134   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
1135   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
1136   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1137
1138   Actor actor = Actor::New();
1139   actor.SetSize(2000, 2000);
1140   actor.SetParentOrigin(ParentOrigin::CENTER);
1141   Stage::GetCurrent().Add(actor);
1142   borderVisual.SetOnStage( actor );
1143
1144   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1145
1146   Renderer renderer = actor.GetRendererAt(0);
1147   Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::COLOR );
1148
1149   Animation animation = Animation::New(4.0f);
1150   animation.AnimateTo( Property(renderer, index), Color::WHITE );
1151   animation.Play();
1152
1153   application.SendNotification();
1154   application.Render(0);
1155   application.Render(2000u); // halfway point between blue and white
1156
1157   Vector4 color = renderer.GetProperty<Vector4>( index );
1158   Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1159   DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1160   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor ), true, TEST_LOCATION );
1161
1162   application.Render(2000u); // halfway point between blue and white
1163
1164   color = renderer.GetProperty<Vector4>( index );
1165   DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1166   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE ), true, TEST_LOCATION );
1167
1168   END_TEST;
1169 }
1170
1171
1172 int UtcDaliVisualAnimateBorderVisual02(void)
1173 {
1174   ToolkitTestApplication application;
1175   tet_infoline( "UtcDaliAnimateBorderVisual Size" );
1176
1177   VisualFactory factory = VisualFactory::Get();
1178   Property::Map propertyMap;
1179   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
1180   propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
1181   propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
1182   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1183
1184   Actor actor = Actor::New();
1185   actor.SetSize(2000, 2000);
1186   actor.SetParentOrigin(ParentOrigin::CENTER);
1187   Stage::GetCurrent().Add(actor);
1188   borderVisual.SetOnStage( actor );
1189
1190   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1191
1192   Renderer renderer = actor.GetRendererAt(0);
1193   Property::Index index = renderer.GetPropertyIndex( BorderVisual::Property::SIZE );
1194
1195   Animation animation = Animation::New(4.0f);
1196   animation.AnimateTo( Property(renderer, index), 9.0f );
1197   animation.Play();
1198
1199   application.SendNotification();
1200   application.Render(0);
1201   application.Render(2000u); // halfway point
1202
1203   float size = renderer.GetProperty<float>( index );
1204   DALI_TEST_EQUALS( size, 7.0f, 0.0001f, TEST_LOCATION );
1205   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f ), true, TEST_LOCATION );
1206
1207   application.Render(2000u); // halfway point between blue and white
1208
1209   size = renderer.GetProperty<float>( index );
1210   DALI_TEST_EQUALS( size, 9.0f, 0.0001f, TEST_LOCATION );
1211   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f ), true, TEST_LOCATION );
1212
1213   END_TEST;
1214 }
1215
1216 int UtcDaliVisualAnimateColorVisual(void)
1217 {
1218   ToolkitTestApplication application;
1219   tet_infoline( "UtcDaliAnimateColorVisual mixColor" );
1220
1221   VisualFactory factory = VisualFactory::Get();
1222   Property::Map propertyMap;
1223   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1224   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1225   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1226
1227   Actor actor = Actor::New();
1228   actor.SetSize(2000, 2000);
1229   actor.SetParentOrigin(ParentOrigin::CENTER);
1230   Stage::GetCurrent().Add(actor);
1231   borderVisual.SetOnStage( actor );
1232
1233   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1234
1235   Renderer renderer = actor.GetRendererAt(0);
1236   Property::Index index = renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
1237
1238   Animation animation = Animation::New(4.0f);
1239   animation.AnimateTo( Property(renderer, index), Color::WHITE );
1240   animation.Play();
1241
1242   application.SendNotification();
1243   application.Render(0);
1244   application.Render(2000u); // halfway point
1245
1246   Vector4 color = renderer.GetProperty<Vector4>( index );
1247   Vector4 testColor = (Color::BLUE + Color::WHITE)*0.5f;
1248   DALI_TEST_EQUALS( color, testColor, TEST_LOCATION );
1249
1250   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("mixColor", testColor ), true, TEST_LOCATION );
1251
1252   application.Render(2000u); // halfway point between blue and white
1253
1254   color = renderer.GetProperty<Vector4>( index );
1255   DALI_TEST_EQUALS( color, Color::WHITE, TEST_LOCATION );
1256
1257   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("mixColor", Color::WHITE ), true, TEST_LOCATION );
1258
1259
1260   END_TEST;
1261 }
1262
1263
1264 int UtcDaliVisualAnimatePrimitiveVisual(void)
1265 {
1266   ToolkitTestApplication application;
1267   tet_infoline( "UtcDaliAnimatePrimitiveVisual color" );
1268
1269   VisualFactory factory = VisualFactory::Get();
1270   Property::Map propertyMap;
1271   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1272   propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
1273   Visual::Base borderVisual = factory.CreateVisual( propertyMap );
1274
1275   Actor actor = Actor::New();
1276   actor.SetSize(2000, 2000);
1277   actor.SetParentOrigin(ParentOrigin::CENTER);
1278   actor.SetColor(Color::BLACK);
1279   Stage::GetCurrent().Add(actor);
1280   borderVisual.SetOnStage( actor );
1281
1282   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION);
1283
1284   Renderer renderer = actor.GetRendererAt(0);
1285   Property::Index index = renderer.GetPropertyIndex( PrimitiveVisual::Property::MIX_COLOR );
1286
1287   // The property isn't registered on the renderer, it's instead registered on the shader.
1288   DALI_TEST_EQUALS( index, Property::INVALID_INDEX, TEST_LOCATION );
1289
1290   Animation animation = Animation::New(4.0f);
1291   animation.AnimateTo( Property(actor, Actor::Property::COLOR), Color::WHITE );
1292   animation.Play();
1293
1294   application.SendNotification();
1295   application.Render(0);
1296   application.Render(2000u); // halfway point
1297
1298   // Actor color overrides renderer color.
1299   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, 1.0f )), true, TEST_LOCATION );
1300
1301   application.Render(2000u); // halfway point between blue and white
1302
1303   DALI_TEST_EQUALS( actor.GetCurrentColor(), Color::WHITE, TEST_LOCATION );
1304   DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Color::WHITE ), true, TEST_LOCATION );
1305
1306
1307   END_TEST;
1308 }
1309
1310 int UtcDaliVisualWireframeVisual(void)
1311 {
1312   ToolkitTestApplication application;
1313
1314   VisualFactory factory = VisualFactory::Get();
1315   Property::Map propertyMap;
1316   propertyMap.Insert( Visual::Property::TYPE, Visual::WIREFRAME );
1317
1318   // Create the visual.
1319   Visual::Base visual = factory.CreateVisual( propertyMap );
1320
1321   DALI_TEST_CHECK( visual );
1322
1323   Property::Map resultMap;
1324   visual.CreatePropertyMap( resultMap );
1325
1326   // Check the property values from the returned map from visual
1327   Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
1328   DALI_TEST_CHECK( value );
1329   DALI_TEST_CHECK( value->Get<int>() == Visual::WIREFRAME );
1330
1331   // Test the properties. TODO: to be completed.
1332   Property::Value primitiveValue = visual.GetProperty( Visual::Property::TYPE );
1333
1334   END_TEST;
1335 }
1336
1337 int UtcDaliVisualGetTransform(void)
1338 {
1339   ToolkitTestApplication application;
1340   tet_infoline( "UtcDaliVisualGetTransform: ColorVisual" );
1341
1342   VisualFactory factory = VisualFactory::Get();
1343   Property::Map propertyMap;
1344   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1345   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1346   Visual::Base colorVisual = factory.CreateVisual( propertyMap );
1347
1348   Dali::Property::Map map;
1349   Dali::Property::Value transformProperty = colorVisual.GetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM );
1350   transformProperty.Get(map);
1351
1352   //Test default values
1353   {
1354     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET );
1355     DALI_TEST_CHECK( typeValue );
1356     DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(0.0f,0.0f) );
1357   }
1358   {
1359     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::SIZE );
1360     DALI_TEST_CHECK( typeValue );
1361     DALI_TEST_CHECK( typeValue->Get<Vector2>() == Vector2(1.0f,1.0f) );
1362   }
1363   {
1364     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE );
1365     DALI_TEST_CHECK( typeValue );
1366     DALI_TEST_CHECK( typeValue->Get<Vector4>() == Vector4(0.0f,0.0f,0.0f,0.0f) );
1367   }
1368   {
1369     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN );
1370     DALI_TEST_CHECK( typeValue );
1371     DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::CENTER );
1372   }
1373   {
1374     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT );
1375     DALI_TEST_CHECK( typeValue );
1376     DALI_TEST_CHECK( (Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::CENTER );
1377   }
1378
1379   END_TEST;
1380 }
1381
1382 static void TestTransform( ToolkitTestApplication& application, Visual::Base visual )
1383 {
1384   Property::Map transform;
1385   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET, Vector2(10.0f, 10.0f) );
1386   transform.Insert( Visual::DevelProperty::Transform::Property::SIZE, Vector2(0.2f, 0.2f) );
1387   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4(1.0f, 1.0f, 0.0f,0.0f) );
1388   transform.Insert( Visual::DevelProperty::Transform::Property::ORIGIN, "TOP_BEGIN" );
1389   transform.Insert( Visual::DevelProperty::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END );
1390
1391   visual.SetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM, transform );
1392
1393   Dali::Property::Map map;
1394   Dali::Property::Value transformProperty = visual.GetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM );
1395   transformProperty.Get(map);
1396
1397   {
1398     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET );
1399     DALI_TEST_CHECK( typeValue );
1400     DALI_TEST_EQUALS( typeValue->Get<Vector2>(),Vector2(10.0f,10.0f), TEST_LOCATION );
1401   }
1402   {
1403     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::SIZE );
1404     DALI_TEST_CHECK( typeValue );
1405     DALI_TEST_EQUALS( typeValue->Get<Vector2>(), Vector2(0.2f,0.2f), TEST_LOCATION );
1406   }
1407   {
1408     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE );
1409     DALI_TEST_CHECK( typeValue );
1410     DALI_TEST_EQUALS( typeValue->Get<Vector4>(), Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
1411   }
1412   {
1413     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ORIGIN );
1414     DALI_TEST_CHECK( typeValue );
1415     DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::TOP_BEGIN, TEST_LOCATION );
1416   }
1417   {
1418     Property::Value* typeValue = map.Find( Toolkit::Visual::DevelProperty::Transform::Property::ANCHOR_POINT );
1419     DALI_TEST_CHECK( typeValue );
1420     DALI_TEST_EQUALS( (Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION );
1421   }
1422
1423   //Put the visual on the stage
1424   Actor actor = Actor::New();
1425   actor.SetSize(200.f, 200.f);
1426   Stage::GetCurrent().Add( actor );
1427   visual.SetOnStage( actor );
1428   application.SendNotification();
1429   application.Render(0);
1430   Renderer renderer( actor.GetRendererAt(0) );
1431
1432   //Check that the properties have been registered on the Renderer
1433   Vector2 offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
1434   DALI_TEST_EQUALS( offset, Vector2(10.0f,10.0f), TEST_LOCATION );
1435
1436   Vector2 size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
1437   DALI_TEST_EQUALS( size, Vector2(0.2f,0.2f), TEST_LOCATION );
1438
1439   Vector4 offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
1440   DALI_TEST_EQUALS( offsetSizeMode, Vector4(1.0f,1.0f,0.0f,0.0f), TEST_LOCATION );
1441
1442   Vector2 parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
1443   DALI_TEST_EQUALS( parentOrigin, Vector2(-0.5f,-0.5f), TEST_LOCATION );
1444
1445   Vector2 anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
1446   DALI_TEST_EQUALS( anchorPoint, Vector2(-0.5f,-0.5f), TEST_LOCATION );
1447
1448   //Set a new transform
1449   transform.Clear();
1450   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET, Vector2(20.0f, 20.0f) );
1451   transform.Insert( Visual::DevelProperty::Transform::Property::SIZE, Vector2(100.0f, 100.0f) );
1452   transform.Insert( Visual::DevelProperty::Transform::Property::OFFSET_SIZE_MODE, Vector4(0.0f, 0.0f, 1.0f,1.0f) );
1453   visual.SetProperty( Dali::Toolkit::Visual::DevelProperty::TRANSFORM, transform );
1454   application.SendNotification();
1455   application.Render(0);
1456
1457   //Check that the values have changed in the renderer
1458   offset = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "offset" ) );
1459   DALI_TEST_EQUALS( offset, Vector2(20.0f,20.0f), TEST_LOCATION );
1460
1461   size = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "size" ) );
1462   DALI_TEST_EQUALS( size, Vector2(100.0f,100.0f), TEST_LOCATION );
1463
1464   offsetSizeMode = renderer.GetProperty<Vector4>( renderer.GetPropertyIndex( "offsetSizeMode" ) );
1465   DALI_TEST_EQUALS( offsetSizeMode, Vector4(0.0f,0.0f,1.0f,1.0f), TEST_LOCATION );
1466
1467   //Parent origin and anchor point should have default values
1468   parentOrigin = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "origin" ) );
1469   DALI_TEST_EQUALS( parentOrigin, Vector2(0.0f,0.0f), TEST_LOCATION );
1470
1471   anchorPoint = renderer.GetProperty<Vector2>( renderer.GetPropertyIndex( "anchorPoint" ) );
1472   DALI_TEST_EQUALS( anchorPoint, Vector2(0.0f,0.0f), TEST_LOCATION );
1473 }
1474
1475 int UtcDaliVisualSetTransform0(void)
1476 {
1477   ToolkitTestApplication application;
1478   tet_infoline( "UtcDaliVisualSetTransform: ColorVisual" );
1479
1480   VisualFactory factory = VisualFactory::Get();
1481   Property::Map propertyMap;
1482   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
1483   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
1484   Visual::Base visual = factory.CreateVisual( propertyMap );
1485   TestTransform( application, visual );
1486
1487   END_TEST;
1488 }
1489
1490 int UtcDaliVisualSetTransform1(void)
1491 {
1492   ToolkitTestApplication application;
1493   tet_infoline( "UtcDaliVisualSetTransform: PrimitiveVisual" );
1494
1495   VisualFactory factory = VisualFactory::Get();
1496   Property::Map propertyMap;
1497   propertyMap[ Visual::Property::TYPE           ] = Visual::PRIMITIVE;
1498   propertyMap[ PrimitiveVisual::Property::MIX_COLOR ] = Vector4(1.0f,1.0f,1.0f,1.0f);
1499   propertyMap[ PrimitiveVisual::Property::SHAPE  ] = PrimitiveVisual::Shape::SPHERE;
1500   propertyMap[ PrimitiveVisual::Property::SLICES ] = 10;
1501   propertyMap[ PrimitiveVisual::Property::STACKS ] = 10;
1502   Visual::Base visual = factory.CreateVisual( propertyMap );
1503   TestTransform( application, visual );
1504
1505   END_TEST;
1506 }
1507
1508 int UtcDaliVisualSetTransform2(void)
1509 {
1510   ToolkitTestApplication application;
1511   tet_infoline( "UtcDaliVisualSetTransform: GradientVisual" );
1512
1513   VisualFactory factory = VisualFactory::Get();
1514   Property::Map propertyMap;
1515   propertyMap.Insert( Visual::Property::TYPE,  Visual::GRADIENT );
1516   Property::Array stopOffsets;
1517   stopOffsets.PushBack( 0.0f );
1518   stopOffsets.PushBack( 0.3f );
1519   stopOffsets.PushBack( 0.6f );
1520   stopOffsets.PushBack( 0.8f );
1521   stopOffsets.PushBack( 1.0f );
1522   propertyMap.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
1523
1524   Property::Array stopColors;
1525   stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
1526   stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
1527   stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
1528   stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
1529   stopColors.PushBack( Color::YELLOW );
1530   propertyMap.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
1531   propertyMap.Insert( GradientVisual::Property::CENTER, Vector2( 0.5f, 0.5f ) );
1532   propertyMap.Insert( GradientVisual::Property::RADIUS, 1.414f );
1533   Visual::Base visual = factory.CreateVisual( propertyMap );
1534   TestTransform( application, visual );
1535
1536   END_TEST;
1537 }
1538
1539 int UtcDaliVisualSetTransform3(void)
1540 {
1541   ToolkitTestApplication application;
1542   tet_infoline( "UtcDaliVisualSetTransform: BorderVisual" );
1543
1544   VisualFactory factory = VisualFactory::Get();
1545   Property::Map propertyMap;
1546   propertyMap.Insert( Visual::Property::TYPE, Visual::BORDER );
1547   propertyMap.Insert( BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f) );
1548   propertyMap.Insert( BorderVisual::Property::SIZE, 3.0f );
1549   Visual::Base visual = factory.CreateVisual( propertyMap );
1550   TestTransform( application, visual );
1551
1552   END_TEST;
1553 }
1554
1555 int UtcDaliVisualSetTransform4(void)
1556 {
1557   ToolkitTestApplication application;
1558   tet_infoline( "UtcDaliVisualSetTransform: MeshVisual" );
1559
1560   VisualFactory factory = VisualFactory::Get();
1561   Property::Map propertyMap;
1562   propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
1563   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1564   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1565   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
1566   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1567   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
1568   Visual::Base visual = factory.CreateVisual( propertyMap );
1569   TestTransform( application, visual );
1570
1571   END_TEST;
1572 }
1573
1574 int UtcDaliVisualSetTransform5(void)
1575 {
1576   ToolkitTestApplication application;
1577   tet_infoline( "UtcDaliVisualSetTransform: ImageVisual from Image" );
1578
1579   VisualFactory factory = VisualFactory::Get();
1580   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
1581   Visual::Base visual = factory.CreateVisual(image);
1582   TestTransform( application, visual );
1583
1584   END_TEST;
1585 }
1586
1587 int UtcDaliVisualSetTransform6(void)
1588 {
1589   ToolkitTestApplication application;
1590   tet_infoline( "UtcDaliVisualSetTransform: ImageVisual for URL " );
1591
1592   VisualFactory factory = VisualFactory::Get();
1593   Property::Map propertyMap;
1594   propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
1595   propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
1596   propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
1597   propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
1598   propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
1599   propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
1600   propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
1601   Visual::Base visual = factory.CreateVisual(propertyMap);
1602   TestTransform( application, visual );
1603
1604   END_TEST;
1605 }
1606
1607 int UtcDaliVisualSetTransform7(void)
1608 {
1609   ToolkitTestApplication application;
1610   tet_infoline( "UtcDaliVisualSetTransform: NPatch visual" );
1611
1612   VisualFactory factory = VisualFactory::Get();
1613   Image image = ResourceImage::New(TEST_NPATCH_FILE_NAME, ImageDimensions(100, 200));
1614   Visual::Base visual = factory.CreateVisual(image);
1615   TestTransform( application, visual );
1616
1617   END_TEST;
1618 }
1619
1620