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