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