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