[dali_1.9.6] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-VisualFactory.cpp
1 /*
2  * Copyright (c) 2020 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 <toolkit-timer.h>
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
24 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
25 #include <dali-toolkit/internal/visuals/npatch-loader.h>
26 #include <dali/devel-api/adaptor-framework/image-loading.h>
27 #include "dummy-control.h"
28
29 #include <dali/integration-api/debug.h>
30
31 using namespace Dali;
32 using namespace Dali::Toolkit;
33
34 namespace
35 {
36 typedef Toolkit::Internal::NPatchLoader::StretchRanges StretchRanges;
37
38 const char* TEST_9_PATCH_FILE_NAME =  TEST_RESOURCE_DIR  "/demo-tile-texture-focused.9.png";
39 const char* TEST_NPATCH_FILE_NAME =  TEST_RESOURCE_DIR  "/heartsframe.9.png";
40 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
41 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
42 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
43 const char* TEST_SIMPLE_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube-Points-Only.obj";
44 const char* TEST_SIMPLE_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal-Simple.mtl";
45 const char* TEST_AUX_IMAGE = TEST_RESOURCE_DIR "/folder_appicon_empty_bg.png";
46 const char* TEST_IMAGE_FILE_NAME =  TEST_RESOURCE_DIR  "/gallery-small-1.jpg";
47
48 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
49 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
50
51 // resolution: 34*34, pixel format: RGBA8888
52 static const char* gImage_34_RGBA = TEST_RESOURCE_DIR "/icon-edit.png";
53
54
55 Property::Map DefaultTransform()
56 {
57   Property::Map transformMap;
58   transformMap
59     .Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f) )
60     .Add( Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f) )
61     .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::CENTER )
62     .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::CENTER )
63     .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) )
64     .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
65   return transformMap;
66 }
67
68 void TestVisualRender( ToolkitTestApplication& application,
69                        DummyControl& actor,
70                        Visual::Base& visual )
71 {
72   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
73   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
74
75   actor.SetSize( 200.f, 200.f );
76   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
77
78   Stage::GetCurrent().Add( actor );
79
80   application.SendNotification();
81   application.Render();
82
83   application.Render();
84   application.SendNotification();
85
86   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
87 }
88
89 void TestVisualAsynchronousRender( ToolkitTestApplication& application,
90                                    DummyControl& actor,
91                                    Visual::Base& visual )
92 {
93   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
94   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
95
96   actor.SetSize( 200.f, 200.f );
97   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
98
99   Stage::GetCurrent().Add( actor );
100
101   application.SendNotification();
102   application.Render();
103
104   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
105
106   application.SendNotification();
107   application.Render();
108
109   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
110 }
111
112 } // namespace
113
114
115 void dali_visual_factory_startup(void)
116 {
117   test_return_value = TET_UNDEF;
118 }
119
120 void dali_visual_factory_cleanup(void)
121 {
122   test_return_value = TET_PASS;
123 }
124
125 int UtcDaliVisualFactoryGet(void)
126 {
127   ToolkitTestApplication application;
128   tet_infoline( "UtcDaliVisualFactory" );
129
130   //Register type
131   TypeInfo type;
132   type = TypeRegistry::Get().GetTypeInfo( "VisualFactory" );
133   DALI_TEST_CHECK( type );
134   BaseHandle handle = type.CreateInstance();
135   DALI_TEST_CHECK( handle );
136
137   VisualFactory factory;
138   factory = VisualFactory::Get();
139   DALI_TEST_CHECK( factory );
140
141   VisualFactory newFactory = VisualFactory::Get();
142   DALI_TEST_CHECK( newFactory );
143
144   // Check that visual factory is a singleton
145   DALI_TEST_CHECK(factory == newFactory);
146
147   END_TEST;
148 }
149
150 int UtcDaliVisualFactoryCopyAndAssignment(void)
151 {
152   ToolkitTestApplication application;
153   tet_infoline( "UtcDaliVisualFactoryCopyAndAssignment" );
154   VisualFactory factory = VisualFactory::Get();
155
156   VisualFactory factoryCopy( factory );
157   DALI_TEST_CHECK(factory == factoryCopy);
158
159   VisualFactory emptyFactory;
160   VisualFactory emptyFactoryCopy( emptyFactory );
161   DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
162
163   VisualFactory factoryEquals;
164   factoryEquals = factory;
165   DALI_TEST_CHECK(factory == factoryEquals);
166
167   VisualFactory emptyFactoryEquals;
168   emptyFactoryEquals = emptyFactory;
169   DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
170
171   //self assignment
172   factory = factory;
173   DALI_TEST_CHECK( factory = factoryCopy );
174
175   END_TEST;
176 }
177
178 int UtcDaliVisualFactoryGetColorVisual1(void)
179 {
180   ToolkitTestApplication application;
181   tet_infoline( "UtcDaliVisualFactoryGetColorVisual1:  Request color visual with a Property::Map" );
182
183   VisualFactory factory = VisualFactory::Get();
184   DALI_TEST_CHECK( factory );
185
186   Property::Map propertyMap;
187   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
188   propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
189   propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  testColor);
190
191   Visual::Base visual = factory.CreateVisual(propertyMap);
192   DALI_TEST_CHECK( visual );
193
194   DummyControl actor = DummyControl::New(true);
195   TestVisualRender( application, actor, visual );
196
197   Vector3 actualValue(Vector4::ZERO);
198   Vector4 actualColor(Vector4::ZERO);
199   TestGlAbstraction& gl = application.GetGlAbstraction();
200   DALI_TEST_CHECK( gl.GetUniformValue<Vector3>( "mixColor", actualValue ) );
201   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uColor", actualColor ) );
202   DALI_TEST_EQUALS( actualValue, Vector3(testColor), TEST_LOCATION );
203   DALI_TEST_EQUALS( actualColor.a, testColor.a, TEST_LOCATION );
204
205   END_TEST;
206 }
207
208 int UtcDaliVisualFactoryGetColorVisual2(void)
209 {
210   ToolkitTestApplication application;
211   tet_infoline( "UtcDaliVisualFactoryGetColorVisual2: Request color visual with a Vector4" );
212
213   VisualFactory factory = VisualFactory::Get();
214   DALI_TEST_CHECK( factory );
215
216   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
217   Dali::Property::Map map;
218   map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
219   map[ ColorVisual::Property::MIX_COLOR ] = testColor;
220   Visual::Base visual = factory.CreateVisual( map );
221   DALI_TEST_CHECK( visual );
222
223   DummyControl actor = DummyControl::New(true);
224   TestVisualRender( application, actor, visual );
225
226   Vector3 actualValue;
227   Vector4 actualColor;
228   TestGlAbstraction& gl = application.GetGlAbstraction();
229   DALI_TEST_CHECK( gl.GetUniformValue<Vector3>( "mixColor", actualValue ) );
230   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uColor", actualColor ) );
231   DALI_TEST_EQUALS( actualValue, Vector3(testColor), TEST_LOCATION );
232   DALI_TEST_EQUALS( actualColor.a, testColor.a, TEST_LOCATION );
233
234   Stage::GetCurrent().Remove(actor);
235   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
236
237   END_TEST;
238 }
239
240 int UtcDaliVisualFactoryGetBorderVisual1(void)
241 {
242   ToolkitTestApplication application;
243   tet_infoline( "UtcDaliVisualFactoryGetBorderVisual1:  Request border visual with a Property::Map" );
244
245   VisualFactory factory = VisualFactory::Get();
246   DALI_TEST_CHECK( factory );
247
248   Property::Map propertyMap;
249   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
250   float testSize = 5.f;
251   propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
252   propertyMap.Insert(BorderVisual::Property::COLOR,  testColor);
253   propertyMap.Insert(BorderVisual::Property::SIZE,  testSize);
254
255   Visual::Base visual = factory.CreateVisual(propertyMap);
256   DALI_TEST_CHECK( visual );
257
258   DummyControl actor = DummyControl::New(true);
259   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
260   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
261   actor.SetSize(200.f, 200.f);
262   Stage::GetCurrent().Add( actor );
263   visual.SetTransformAndSize(DefaultTransform(), Vector2(200.f, 200.f));
264
265   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
266   int blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLEND_MODE );
267   DALI_TEST_EQUALS( static_cast<BlendMode::Type>(blendMode), BlendMode::ON, TEST_LOCATION );
268
269   TestGlAbstraction& gl = application.GetGlAbstraction();
270
271   application.SendNotification();
272   application.Render(0);
273
274   Vector4 actualColor(Vector4::ZERO);
275   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "borderColor", actualColor ) );
276   DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
277
278   float actualSize = 0.f;
279   DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
280   DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
281
282   actor.Unparent();
283   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
284
285   END_TEST;
286 }
287
288 int UtcDaliVisualFactoryGetBorderVisual2(void)
289 {
290   ToolkitTestApplication application;
291   tet_infoline( "UtcDaliVisualFactoryGetBorderVisual2:  Request border visual with a borderSize and a borderColor" );
292
293   VisualFactory factory = VisualFactory::Get();
294   DALI_TEST_CHECK( factory );
295
296   Vector4 testColor( 1.f, 0.5f, 0.3f, 1.f );
297   float testSize = 5.f;
298
299   Dali::Property::Map propertyMap;
300   propertyMap[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
301   propertyMap[ BorderVisual::Property::COLOR  ] = testColor;
302   propertyMap[ BorderVisual::Property::SIZE   ] = testSize;
303   Visual::Base visual = factory.CreateVisual( propertyMap );
304   DALI_TEST_CHECK( visual );
305
306   DummyControl actor = DummyControl::New(true);
307   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
308   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
309   actor.SetSize(200.f, 200.f);
310   Stage::GetCurrent().Add( actor );
311   visual.SetTransformAndSize(DefaultTransform(), Vector2(200.f, 200.f));
312
313   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
314
315   TestGlAbstraction& gl = application.GetGlAbstraction();
316
317   application.SendNotification();
318   application.Render(0);
319
320   int blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLEND_MODE );
321   DALI_TEST_EQUALS( static_cast<BlendMode::Type>(blendMode), BlendMode::AUTO, TEST_LOCATION );
322
323   Vector4 actualColor(Vector4::ZERO);
324   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "borderColor", actualColor ) );
325   DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
326
327   float actualSize = 0.f;
328   DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
329   DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
330
331   actor.Unparent();
332
333   // enable the anti-aliasing
334   Dali::Property::Map map;
335   map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
336   map[ BorderVisual::Property::COLOR  ] = testColor;
337   map[ BorderVisual::Property::SIZE   ] = testSize;
338   map[ BorderVisual::Property::ANTI_ALIASING   ] = true;
339   visual = factory.CreateVisual( map );
340
341   dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
342   Stage::GetCurrent().Add( actor );
343
344   blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLEND_MODE );
345   DALI_TEST_EQUALS( static_cast<BlendMode::Type>(blendMode), BlendMode::ON, TEST_LOCATION );
346
347   END_TEST;
348 }
349
350 int UtcDaliVisualFactoryGetLinearGradientVisual(void)
351 {
352   ToolkitTestApplication application;
353   tet_infoline("UtcDaliVisualFactoryGetRadialGradientVisual");
354
355   VisualFactory factory = VisualFactory::Get();
356   DALI_TEST_CHECK( factory );
357
358   Property::Map propertyMap;
359   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
360
361   Vector2 start(-1.f, -1.f);
362   Vector2 end(1.f, 1.f);
363   propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
364   propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
365   propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
366
367   Property::Array stopOffsets;
368   stopOffsets.PushBack( 0.2f );
369   stopOffsets.PushBack( 0.8f );
370   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, stopOffsets);
371
372   Property::Array stopColors;
373   stopColors.PushBack( Color::RED );
374   stopColors.PushBack( Color::GREEN );
375   propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
376
377   Visual::Base visual = factory.CreateVisual(propertyMap);
378   DALI_TEST_CHECK( visual );
379
380   // A lookup texture is generated and pass to shader as sampler
381   DummyControl actor = DummyControl::New(true);
382   TestVisualRender( application, actor, visual );
383
384   END_TEST;
385 }
386
387 int UtcDaliVisualFactoryGetRadialGradientVisual(void)
388 {
389   ToolkitTestApplication application;
390   tet_infoline("UtcDaliVisualFactoryGetRadialGradientVisual");
391
392   VisualFactory factory = VisualFactory::Get();
393   DALI_TEST_CHECK( factory );
394
395   Property::Map propertyMap;
396   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
397
398   Vector2 center(100.f, 100.f);
399   float radius = 100.f;
400   propertyMap.Insert(GradientVisual::Property::UNITS,  GradientVisual::Units::USER_SPACE);
401   propertyMap.Insert(GradientVisual::Property::CENTER,  center);
402   propertyMap.Insert(GradientVisual::Property::RADIUS,  radius);
403
404   Property::Array stopOffsets;
405   stopOffsets.PushBack( 0.0f );
406   stopOffsets.PushBack( 1.f );
407   propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   stopOffsets);
408
409   Property::Array stopColors;
410   stopColors.PushBack( Color::RED );
411   stopColors.PushBack( Color::GREEN );
412   propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
413
414   Visual::Base visual = factory.CreateVisual(propertyMap);
415   DALI_TEST_CHECK( visual );
416
417   // A lookup texture is generated and pass to shader as sampler
418   DummyControl actor = DummyControl::New(true);
419   TestVisualRender( application, actor, visual );
420
421   Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
422   alignMatrix.Invert();
423
424   Matrix3 actualValue( Matrix3::IDENTITY );
425   TestGlAbstraction& gl = application.GetGlAbstraction();
426   DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
427   DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
428
429   END_TEST;
430 }
431
432 int UtcDaliVisualFactoryDefaultOffsetsGradientVisual(void)
433 {
434   ToolkitTestApplication application;
435   tet_infoline("UtcDaliVisualFactoryGetRadialGradientVisual");
436
437   VisualFactory factory = VisualFactory::Get();
438   DALI_TEST_CHECK( factory );
439
440   Property::Map propertyMap;
441   propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
442
443   Vector2 start(-1.f, -1.f);
444   Vector2 end(1.f, 1.f);
445   propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
446   propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
447   propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
448
449   Property::Array stopColors;
450   stopColors.PushBack( Color::RED );
451   stopColors.PushBack( Color::GREEN );
452   propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
453
454   Visual::Base visual = factory.CreateVisual(propertyMap);
455   DALI_TEST_CHECK( visual );
456
457   // A lookup texture is generated and pass to shader as sampler
458   DummyControl actor = DummyControl::New(true);
459   TestVisualRender( application, actor, visual );
460
461   Stage::GetCurrent().Remove( actor );
462   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
463
464   END_TEST;
465 }
466
467 int UtcDaliVisualFactoryGetNPatchVisualSynchronousLoad1(void)
468 {
469   ToolkitTestApplication application;
470   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualSynchronousLoad1: Request 9-patch visual with a Property::Map" );
471
472   VisualFactory factory = VisualFactory::Get();
473   DALI_TEST_CHECK( factory );
474
475   // Get actual size of test image
476   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_9_PATCH_FILE_NAME );
477
478   Property::Map propertyMap;
479   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
480   propertyMap.Insert( ImageVisual::Property::URL, TEST_9_PATCH_FILE_NAME );
481   propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true );
482   {
483     tet_infoline( "whole grid" );
484     Visual::Base visual = factory.CreateVisual( propertyMap );
485     DALI_TEST_CHECK( visual );
486
487     TestGlAbstraction& gl = application.GetGlAbstraction();
488     TraceCallStack& textureTrace = gl.GetTextureTrace();
489     textureTrace.Enable(true);
490
491     DummyControl actor = DummyControl::New(true);
492     TestVisualRender( application, actor, visual );
493
494     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
495
496     Vector2 naturalSize( 0.0f, 0.0f );
497     visual.GetNaturalSize( naturalSize );
498     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
499   }
500
501   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
502   {
503     tet_infoline( "border only" );
504     Visual::Base visual = factory.CreateVisual( propertyMap );
505     DALI_TEST_CHECK( visual );
506
507     TestGlAbstraction& gl = application.GetGlAbstraction();
508     TraceCallStack& textureTrace = gl.GetTextureTrace();
509     textureTrace.Enable(true);
510
511     DummyControl actor = DummyControl::New(true);
512     TestVisualRender( application, actor, visual );
513
514     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
515
516     Vector2 naturalSize( 0.0f, 0.0f );
517     visual.GetNaturalSize( naturalSize );
518     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
519   }
520
521   END_TEST;
522 }
523
524 int UtcDaliVisualFactoryGetNPatchVisualSynchronousLoad2(void)
525 {
526   ToolkitTestApplication application;
527   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualSynchronousLoad2: Request 9-patch visual with a Property::Map including border" );
528
529   VisualFactory factory = VisualFactory::Get();
530   DALI_TEST_CHECK( factory );
531
532   // Get actual size of test image
533   ImageDimensions imageSize = Dali::GetClosestImageSize( gImage_34_RGBA );
534
535   Property::Map propertyMap;
536   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
537   propertyMap.Insert( ImageVisual::Property::URL, gImage_34_RGBA );
538   propertyMap.Insert( ImageVisual::Property::BORDER, Rect< int >( 2, 2, 2, 2 ) );
539   propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true );
540   {
541     tet_infoline( "whole grid" );
542     Visual::Base visual = factory.CreateVisual( propertyMap );
543     DALI_TEST_CHECK( visual );
544
545     TestGlAbstraction& gl = application.GetGlAbstraction();
546     TraceCallStack& textureTrace = gl.GetTextureTrace();
547     textureTrace.Enable(true);
548
549     DummyControl actor = DummyControl::New(true);
550     TestVisualRender( application, actor, visual );
551
552     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
553
554     Vector2 naturalSize( 0.0f, 0.0f );
555     visual.GetNaturalSize( naturalSize );
556     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
557   }
558
559   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
560   {
561     tet_infoline( "border only" );
562     Visual::Base visual = factory.CreateVisual( propertyMap );
563     DALI_TEST_CHECK( visual );
564
565     TestGlAbstraction& gl = application.GetGlAbstraction();
566     TraceCallStack& textureTrace = gl.GetTextureTrace();
567     textureTrace.Enable(true);
568
569     DummyControl actor = DummyControl::New(true);
570     TestVisualRender( application, actor, visual );
571
572     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
573
574     Vector2 naturalSize( 0.0f, 0.0f );
575     visual.GetNaturalSize( naturalSize );
576     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
577   }
578
579   propertyMap.Clear();
580   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
581   propertyMap.Insert( ImageVisual::Property::URL, gImage_34_RGBA );
582   propertyMap.Insert( ImageVisual::Property::BORDER, Rect< int >( 1, 1, 1, 1 ) );
583   propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, true );
584   {
585     tet_infoline( "whole grid" );
586     Visual::Base visual = factory.CreateVisual( propertyMap );
587     DALI_TEST_CHECK( visual );
588
589     TestGlAbstraction& gl = application.GetGlAbstraction();
590     TraceCallStack& textureTrace = gl.GetTextureTrace();
591     textureTrace.Enable(true);
592
593     DummyControl actor = DummyControl::New(true);
594     TestVisualRender( application, actor, visual );
595
596     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
597
598     Vector2 naturalSize( 0.0f, 0.0f );
599     visual.GetNaturalSize( naturalSize );
600     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
601   }
602
603   END_TEST;
604 }
605
606 int UtcDaliVisualFactoryGetNPatchVisual1(void)
607 {
608   ToolkitTestApplication application;
609   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual1: Request 9-patch visual with a Property::Map" );
610
611   VisualFactory factory = VisualFactory::Get();
612   DALI_TEST_CHECK( factory );
613
614   // Get actual size of test image
615   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_9_PATCH_FILE_NAME );
616
617   Property::Map propertyMap;
618   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
619   propertyMap.Insert( ImageVisual::Property::URL, TEST_9_PATCH_FILE_NAME );
620   propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, false );
621   {
622     tet_infoline( "whole grid" );
623     Visual::Base visual = factory.CreateVisual( propertyMap );
624     DALI_TEST_CHECK( visual );
625
626     Vector2 naturalSize( 0.0f, 0.0f );
627     visual.GetNaturalSize( naturalSize );
628     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
629
630     TestGlAbstraction& gl = application.GetGlAbstraction();
631     TraceCallStack& textureTrace = gl.GetTextureTrace();
632     textureTrace.Enable(true);
633
634     DummyControl actor = DummyControl::New(true);
635     TestVisualAsynchronousRender( application, actor, visual );
636
637     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
638
639     visual.GetNaturalSize( naturalSize );
640     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
641   }
642
643   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
644   {
645     tet_infoline( "border only" );
646     Visual::Base visual = factory.CreateVisual( propertyMap );
647     DALI_TEST_CHECK( visual );
648
649     TestGlAbstraction& gl = application.GetGlAbstraction();
650     TraceCallStack& textureTrace = gl.GetTextureTrace();
651     textureTrace.Enable(true);
652
653     DummyControl actor = DummyControl::New(true);
654     TestVisualRender( application, actor, visual );
655
656     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
657
658     Vector2 naturalSize( 0.0f, 0.0f );
659     visual.GetNaturalSize( naturalSize );
660     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
661   }
662
663   END_TEST;
664 }
665
666 int UtcDaliVisualFactoryGetNPatchVisual2(void)
667 {
668   ToolkitTestApplication application;
669   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual2: Request 9-patch visual with a Property::Map including border" );
670
671   VisualFactory factory = VisualFactory::Get();
672   DALI_TEST_CHECK( factory );
673
674   // Get actual size of test image
675   ImageDimensions imageSize = Dali::GetClosestImageSize( gImage_34_RGBA );
676
677   Property::Map propertyMap;
678   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
679   propertyMap.Insert( ImageVisual::Property::URL, gImage_34_RGBA );
680   propertyMap.Insert( ImageVisual::Property::BORDER, Rect< int >( 2, 2, 2, 2 ) );
681   {
682     tet_infoline( "whole grid" );
683     Visual::Base visual = factory.CreateVisual( propertyMap );
684     DALI_TEST_CHECK( visual );
685
686     TestGlAbstraction& gl = application.GetGlAbstraction();
687     TraceCallStack& textureTrace = gl.GetTextureTrace();
688     textureTrace.Enable(true);
689
690     DummyControl actor = DummyControl::New(true);
691     TestVisualAsynchronousRender( application, actor, visual );
692
693     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
694
695     Vector2 naturalSize( 0.0f, 0.0f );
696     visual.GetNaturalSize( naturalSize );
697     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
698   }
699
700   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
701   {
702     tet_infoline( "border only" );
703     Visual::Base visual = factory.CreateVisual( propertyMap );
704     DALI_TEST_CHECK( visual );
705
706     TestGlAbstraction& gl = application.GetGlAbstraction();
707     TraceCallStack& textureTrace = gl.GetTextureTrace();
708     textureTrace.Enable(true);
709
710     DummyControl actor = DummyControl::New(true);
711     TestVisualRender( application, actor, visual );
712
713     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
714
715     Vector2 naturalSize( 0.0f, 0.0f );
716     visual.GetNaturalSize( naturalSize );
717     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
718   }
719
720   propertyMap.Clear();
721   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
722   propertyMap.Insert( ImageVisual::Property::URL, gImage_34_RGBA );
723   propertyMap.Insert( ImageVisual::Property::BORDER, Rect< int >( 1, 1, 1, 1 ) );
724   {
725     tet_infoline( "whole grid" );
726     Visual::Base visual = factory.CreateVisual( propertyMap );
727     DALI_TEST_CHECK( visual );
728
729     TestGlAbstraction& gl = application.GetGlAbstraction();
730     TraceCallStack& textureTrace = gl.GetTextureTrace();
731     textureTrace.Enable(true);
732
733     DummyControl actor = DummyControl::New(true);
734     TestVisualRender( application, actor, visual );
735
736     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
737
738     Vector2 naturalSize( 0.0f, 0.0f );
739     visual.GetNaturalSize( naturalSize );
740     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
741   }
742
743   END_TEST;
744 }
745
746 int UtcDaliVisualFactoryGetNPatchVisual3(void)
747 {
748   ToolkitTestApplication application;
749   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual3: Request n-patch visual with a Property::Map" );
750
751   VisualFactory factory = VisualFactory::Get();
752   DALI_TEST_CHECK( factory );
753
754   // Get actual size of test image
755   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_NPATCH_FILE_NAME );
756
757   Property::Map propertyMap;
758   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
759   propertyMap.Insert( ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME );
760   {
761     Visual::Base visual = factory.CreateVisual( propertyMap );
762     DALI_TEST_CHECK( visual );
763
764     TestGlAbstraction& gl = application.GetGlAbstraction();
765     TraceCallStack& textureTrace = gl.GetTextureTrace();
766     textureTrace.Enable(true);
767
768     DummyControl actor = DummyControl::New(true);
769     TestVisualAsynchronousRender( application, actor, visual );
770
771     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
772
773     Stage::GetCurrent().Remove( actor );
774     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
775
776     Vector2 naturalSize( 0.0f, 0.0f );
777     visual.GetNaturalSize( naturalSize );
778     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
779   }
780
781   propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
782   {
783     tet_infoline( "border only" );
784     Visual::Base visual = factory.CreateVisual( propertyMap );
785     DALI_TEST_CHECK( visual );
786
787     TestGlAbstraction& gl = application.GetGlAbstraction();
788     TraceCallStack& textureTrace = gl.GetTextureTrace();
789     textureTrace.Enable(true);
790     DummyControl actor = DummyControl::New(true);
791     TestVisualRender( application, actor, visual );
792
793     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
794
795     Vector2 naturalSize( 0.0f, 0.0f );
796     visual.GetNaturalSize( naturalSize );
797     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
798
799     Stage::GetCurrent().Remove( actor );
800     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
801   }
802
803   END_TEST;
804 }
805
806 int UtcDaliVisualFactoryGetNPatchVisual4(void)
807 {
808   ToolkitTestApplication application;
809   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual4: Request 9-patch visual with an image url" );
810
811   // Get actual size of test image
812   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_9_PATCH_FILE_NAME );
813
814   VisualFactory factory = VisualFactory::Get();
815   DALI_TEST_CHECK( factory );
816
817   Visual::Base visual = factory.CreateVisual( TEST_9_PATCH_FILE_NAME, ImageDimensions() );
818   DALI_TEST_CHECK( visual );
819
820   TestGlAbstraction& gl = application.GetGlAbstraction();
821   TraceCallStack& textureTrace = gl.GetTextureTrace();
822   textureTrace.Enable(true);
823   DummyControl actor = DummyControl::New(true);
824   TestVisualAsynchronousRender( application, actor, visual );
825
826   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
827
828   Vector2 naturalSize( 0.0f, 0.0f );
829   visual.GetNaturalSize( naturalSize );
830   DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
831
832   textureTrace.Reset();
833
834   ResourceImage image = ResourceImage::New( TEST_9_PATCH_FILE_NAME );
835   Visual::Base nPatchVisual = factory.CreateVisual( image );
836
837   DummyControl actor1 = DummyControl::New(true);
838   TestVisualRender( application, actor1, nPatchVisual );
839
840   DALI_TEST_EQUALS( textureTrace.CountMethod("BindTexture"), 0, TEST_LOCATION );  // The same texture should be used with the first visual.
841
842   naturalSize = Vector2( 0.0f, 0.0f );
843   nPatchVisual.GetNaturalSize( naturalSize );
844   DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
845
846   END_TEST;
847 }
848
849 int UtcDaliVisualFactoryGetNPatchVisual5(void)
850 {
851   ToolkitTestApplication application;
852   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual5: Request n-patch visual with an image url" );
853
854   // Get actual size of test image
855   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_NPATCH_FILE_NAME );
856
857   VisualFactory factory = VisualFactory::Get();
858   DALI_TEST_CHECK( factory );
859
860   Visual::Base visual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
861   DALI_TEST_CHECK( visual );
862
863   TestGlAbstraction& gl = application.GetGlAbstraction();
864   TraceCallStack& textureTrace = gl.GetTextureTrace();
865   textureTrace.Enable(true);
866
867   DummyControl actor = DummyControl::New(true);
868   TestVisualAsynchronousRender( application, actor, visual );
869
870   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
871
872   Vector2 naturalSize( 0.0f, 0.0f );
873   visual.GetNaturalSize( naturalSize );
874   DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
875
876   END_TEST;
877 }
878
879 int UtcDaliVisualFactoryGetNPatchVisual6(void)
880 {
881   ToolkitTestApplication application;
882   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual6: Request n-patch visual with a general image" );
883
884   VisualFactory factory = VisualFactory::Get();
885   DALI_TEST_CHECK( factory );
886
887   {
888     // Get actual size of test image
889     ImageDimensions imageSize = Dali::GetClosestImageSize( gImage_34_RGBA );
890
891     Property::Map propertyMap;
892     propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
893     propertyMap.Insert( ImageVisual::Property::URL, gImage_34_RGBA );
894
895     Visual::Base visual = factory.CreateVisual( propertyMap );
896     DALI_TEST_CHECK( visual );
897
898     TestGlAbstraction& gl = application.GetGlAbstraction();
899     TraceCallStack& textureTrace = gl.GetTextureTrace();
900     textureTrace.Enable(true);
901
902     DummyControl actor = DummyControl::New(true);
903     TestVisualAsynchronousRender( application, actor, visual );
904
905     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
906
907     Vector2 naturalSize( 0.0f, 0.0f );
908     visual.GetNaturalSize( naturalSize );
909     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
910
911     Stage::GetCurrent().Remove( actor );
912     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
913   }
914
915   {
916     // Get actual size of test image
917     ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_IMAGE_FILE_NAME );
918
919     Property::Map propertyMap;
920     propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
921     propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
922
923     Visual::Base visual = factory.CreateVisual( propertyMap );
924     DALI_TEST_CHECK( visual );
925
926     TestGlAbstraction& gl = application.GetGlAbstraction();
927     TraceCallStack& textureTrace = gl.GetTextureTrace();
928     textureTrace.Enable(true);
929
930     DummyControl actor = DummyControl::New(true);
931     TestVisualAsynchronousRender( application, actor, visual );
932
933     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
934
935     Vector2 naturalSize( 0.0f, 0.0f );
936     visual.GetNaturalSize( naturalSize );
937     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
938
939     Stage::GetCurrent().Remove( actor );
940     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
941   }
942
943   END_TEST;
944 }
945
946 int UtcDaliVisualFactoryGetNPatchVisual7(void)
947 {
948   ToolkitTestApplication application;
949   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual7: Add 9-patch visual on stage and instantly remove it." );
950
951   VisualFactory factory = VisualFactory::Get();
952   DALI_TEST_CHECK( factory );
953
954   // Get actual size of test image
955   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_9_PATCH_FILE_NAME );
956
957   Property::Map propertyMap;
958   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
959   propertyMap.Insert( ImageVisual::Property::URL, TEST_9_PATCH_FILE_NAME );
960   propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, false );
961   {
962     Visual::Base visual = factory.CreateVisual( propertyMap );
963     DALI_TEST_CHECK( visual );
964
965     Vector2 naturalSize( 0.0f, 0.0f );
966     visual.GetNaturalSize( naturalSize );
967     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
968
969     TestGlAbstraction& gl = application.GetGlAbstraction();
970     TraceCallStack& textureTrace = gl.GetTextureTrace();
971     textureTrace.Enable(true);
972
973     DummyControl actor = DummyControl::New(true);
974
975     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
976     dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
977
978     actor.SetSize( 200.f, 200.f );
979     DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
980
981     Stage::GetCurrent().Add( actor );
982     actor.Unparent();
983
984     application.SendNotification();
985     application.Render();
986
987     DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger(1 ), true, TEST_LOCATION );
988
989     application.SendNotification();
990     application.Render();
991
992     DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
993   }
994
995   END_TEST;
996 }
997
998 int UtcDaliNPatchVisualAuxiliaryImage(void)
999 {
1000   ToolkitTestApplication application;
1001   tet_infoline( "NPatchVisual with aux image" );
1002
1003   VisualFactory factory = VisualFactory::Get();
1004   Property::Map properties;
1005   Property::Map shader;
1006
1007   Property::Map transformMap;
1008   transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
1009   transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
1010   transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
1011   transformMap["anchorPoint"] = Align::CENTER;
1012   transformMap["origin"] = Align::CENTER;
1013   properties[Visual::Property::TRANSFORM] = transformMap;
1014
1015   properties[Visual::Property::TYPE] = Visual::IMAGE;
1016   properties[Visual::Property::MIX_COLOR] = Color::BLUE;
1017   properties[Visual::Property::SHADER]=shader;
1018   properties[ImageVisual::Property::URL] = TEST_9_PATCH_FILE_NAME;
1019   properties[DevelImageVisual::Property::AUXILIARY_IMAGE] = TEST_AUX_IMAGE;
1020   properties[DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA] = 0.9f;
1021
1022   Visual::Base visual = factory.CreateVisual( properties );
1023
1024   // trigger creation through setting on stage
1025   DummyControl dummy = DummyControl::New(true);
1026   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
1027   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1028   dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
1029   dummy.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
1030   dummy.SetParentOrigin(ParentOrigin::CENTER);
1031   Stage::GetCurrent().Add(dummy);
1032
1033   application.SendNotification();
1034   application.Render();
1035
1036   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1037
1038   application.SendNotification();
1039   application.Render();
1040
1041   Renderer renderer = dummy.GetRendererAt( 0 );
1042   auto textures = renderer.GetTextures();
1043   DALI_TEST_EQUALS( textures.GetTextureCount(), 2, TEST_LOCATION );
1044
1045   END_TEST;
1046 }
1047
1048
1049 int UtcDaliVisualFactoryGetNPatchVisualN1(void)
1050 {
1051   //This should still load but display an error image
1052
1053   ToolkitTestApplication application;
1054   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid image url" );
1055
1056   VisualFactory factory = VisualFactory::Get();
1057   DALI_TEST_CHECK( factory );
1058
1059   Visual::Base visual = factory.CreateVisual( "ERROR.9.jpg", ImageDimensions() );
1060   DALI_TEST_CHECK( visual );
1061
1062   TestGlAbstraction& gl = application.GetGlAbstraction();
1063   TraceCallStack& textureTrace = gl.GetTextureTrace();
1064   textureTrace.Enable(true);
1065
1066   DummyControl actor = DummyControl::New(true);
1067   TestVisualAsynchronousRender( application, actor, visual );
1068
1069   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1070
1071   END_TEST;
1072 }
1073
1074 int UtcDaliVisualFactoryGetNPatchVisualN2(void)
1075 {
1076   //This should still load but display an error image
1077
1078   ToolkitTestApplication application;
1079   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid URL" );
1080
1081   VisualFactory factory = VisualFactory::Get();
1082   DALI_TEST_CHECK( factory );
1083
1084   Property::Map propertyMap;
1085   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
1086   propertyMap.Insert( ImageVisual::Property::URL,  "ERROR.9.jpg" );
1087
1088   Visual::Base visual = factory.CreateVisual( propertyMap );
1089   DALI_TEST_CHECK( visual );
1090
1091   TestGlAbstraction& gl = application.GetGlAbstraction();
1092   TraceCallStack& textureTrace = gl.GetTextureTrace();
1093   textureTrace.Enable(true);
1094   TraceCallStack& drawTrace = gl.GetDrawTrace();
1095   drawTrace.Enable(true);
1096
1097   DummyControl actor = DummyControl::New(true);
1098   TestVisualAsynchronousRender( application, actor, visual );
1099
1100   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1101
1102   END_TEST;
1103 }
1104
1105 int UtcDaliVisualFactoryGetNPatchVisualN3(void)
1106 {
1107   // Passing in an invalid visual type so we should not get a visual
1108
1109   ToolkitTestApplication application;
1110   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid visual type" );
1111
1112   VisualFactory factory = VisualFactory::Get();
1113   DALI_TEST_CHECK( factory );
1114
1115   Property::Map propertyMap;
1116   propertyMap.Insert( Toolkit::Visual::Property::TYPE,  111 );
1117   propertyMap.Insert( ImageVisual::Property::URL,  "ERROR.9.jpg" );
1118
1119   Visual::Base visual = factory.CreateVisual( propertyMap );
1120   DALI_TEST_CHECK( !visual );
1121
1122   END_TEST;
1123 }
1124
1125 int UtcDaliVisualFactoryGetSvgVisual(void)
1126 {
1127   ToolkitTestApplication application;
1128   tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with a svg url" );
1129
1130   VisualFactory factory = VisualFactory::Get();
1131   Visual::Base visual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1132   DALI_TEST_CHECK( visual );
1133
1134   TestGlAbstraction& gl = application.GetGlAbstraction();
1135   TraceCallStack& textureTrace = gl.GetTextureTrace();
1136   textureTrace.Enable(true);
1137
1138   DummyControl actor = DummyControl::New(true);
1139   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1140   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1141   actor.SetSize( 200.f, 200.f );
1142   Stage::GetCurrent().Add( actor );
1143   visual.SetTransformAndSize(DefaultTransform(), Vector2(200.f, 200.f) );
1144
1145   application.SendNotification();
1146   application.Render();
1147
1148   // renderer is not added to actor until the rasterization is completed.
1149   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1150
1151   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1152
1153   // renderer is added to actor
1154   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1155
1156   // waiting for the resource uploading
1157   application.SendNotification();
1158   application.Render();
1159
1160   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1161
1162   END_TEST;
1163 }
1164
1165 int UtcDaliVisualFactoryGetSvgVisualLarge(void)
1166 {
1167   ToolkitTestApplication application;
1168   tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with a svg url" );
1169
1170   VisualFactory factory = VisualFactory::Get();
1171   Visual::Base visual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions( 2000, 2000 ) );
1172   DALI_TEST_CHECK( visual );
1173
1174   TestGlAbstraction& gl = application.GetGlAbstraction();
1175   TraceCallStack& textureTrace = gl.GetTextureTrace();
1176   textureTrace.Enable(true);
1177
1178   DummyControl actor = DummyControl::New(true);
1179   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1180   actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); // Only rasterizes when it knows control size.
1181   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1182   Stage::GetCurrent().Add( actor );
1183
1184   application.SendNotification();
1185   application.Render();
1186
1187   // renderer is not added to actor until the rasterization is completed.
1188   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1189
1190   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1191
1192   // renderer is added to actor
1193   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1194
1195   // waiting for the resource uploading
1196   application.SendNotification();
1197   application.Render();
1198
1199   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1200
1201   END_TEST;
1202 }
1203
1204 int UtcDaliVisualFactoryGetSvgVisualAtlas(void)
1205 {
1206   ToolkitTestApplication application;
1207   tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with enabled atlas" );
1208
1209   VisualFactory factory = VisualFactory::Get();
1210
1211   Property::Map propertyMap;
1212   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
1213   propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
1214   propertyMap.Insert( ImageVisual::Property::ATLASING, true );
1215
1216   Visual::Base visual = factory.CreateVisual( propertyMap );
1217   DALI_TEST_CHECK( visual );
1218
1219   TestGlAbstraction& gl = application.GetGlAbstraction();
1220   TraceCallStack& textureTrace = gl.GetTextureTrace();
1221   textureTrace.Enable(true);
1222
1223   DummyControl actor = DummyControl::New(true);
1224   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1225   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1226   actor.SetSize( 200.f, 200.f );
1227   Stage::GetCurrent().Add( actor );
1228   visual.SetTransformAndSize(DefaultTransform(), Vector2(200.f, 200.f) );
1229
1230   application.SendNotification();
1231   application.Render();
1232
1233   // renderer is not added to actor until the rasterization is completed.
1234   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1235
1236   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1237
1238   // renderer is added to actor
1239   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1240
1241   // waiting for the resource uploading
1242   application.SendNotification();
1243   application.Render();
1244
1245   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1246
1247   END_TEST;
1248 }
1249
1250 //Creates a mesh visual from the given propertyMap and tries to load it on stage in the given application.
1251 //This is expected to succeed, which will then pass the test.
1252 void MeshVisualLoadsCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
1253 {
1254   VisualFactory factory = VisualFactory::Get();
1255   DALI_TEST_CHECK( factory );
1256
1257   //Create a mesh visual.
1258   Visual::Base visual = factory.CreateVisual( propertyMap );
1259   DALI_TEST_CHECK( visual );
1260
1261   //Create an actor on stage to house the visual.
1262   DummyControl actor = DummyControl::New(true);
1263   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1264   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1265   actor.SetSize( 200.f, 200.f );
1266   Stage::GetCurrent().Add( actor );
1267   visual.SetTransformAndSize(DefaultTransform(), Vector2( 200.f, 200.f ) );
1268
1269   //Ensure set on stage.
1270   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1271
1272   //Attempt to render to queue resource load requests.
1273   application.SendNotification();
1274   application.Render( 0 );
1275
1276   //Render again to upload the now-loaded textures.
1277   application.SendNotification();
1278   application.Render( 0 );
1279
1280   Matrix testScaleMatrix;
1281   testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
1282   Matrix actualScaleMatrix;
1283
1284   //Test to see if the object has been successfully loaded.
1285   DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
1286   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1287
1288   //Finish by setting off stage, and ensuring this was successful.
1289   actor.Unparent();
1290   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1291 }
1292
1293 //Creates a mesh visual from the given propertyMap and tries to load it on stage in the given application.
1294 //This is expected to fail, which will then pass the test.
1295 void MeshVisualDoesNotLoadCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
1296 {
1297   VisualFactory factory = VisualFactory::Get();
1298   DALI_TEST_CHECK( factory );
1299
1300   //Create a mesh visual.
1301   Visual::Base visual = factory.CreateVisual( propertyMap );
1302   DALI_TEST_CHECK( visual );
1303
1304   //Create an actor on stage to house the visual.
1305   DummyControl actor = DummyControl::New(true);
1306   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1307   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1308   actor.SetSize( 200.f, 200.f );
1309   Stage::GetCurrent().Add( actor );
1310   visual.SetTransformAndSize(DefaultTransform(),  Vector2( 200.f, 200.f ) );
1311
1312   //Ensure set on stage.
1313   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1314
1315   //Attempt to render to queue resource load requests.
1316   application.SendNotification();
1317   application.Render( 0 );
1318
1319   //Render again to upload the now-loaded textures.
1320   application.SendNotification();
1321   application.Render( 0 );
1322
1323   //Test to see if the object has not been loaded, as expected.
1324   Matrix scaleMatrix;
1325   DALI_TEST_CHECK( !application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
1326
1327   //Finish by setting off stage, and ensuring this was successful.
1328   actor.Unparent();
1329   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1330 }
1331
1332 //Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file.
1333 int UtcDaliVisualFactoryGetMeshVisual1(void)
1334 {
1335   //Set up test application first, so everything else can be handled.
1336   ToolkitTestApplication application;
1337
1338   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual1:  Request mesh visual with a valid object file only" );
1339
1340
1341   //Set up visual properties.
1342   Property::Map propertyMap;
1343   propertyMap.Insert( Toolkit::Visual::Property::TYPE,  Visual::MESH );
1344   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1345
1346   //Test to see if mesh loads correctly.
1347   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1348
1349   END_TEST;
1350 }
1351
1352
1353 //Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory.
1354 int UtcDaliVisualFactoryGetMeshVisual2(void)
1355 {
1356   //Set up test application first, so everything else can be handled.
1357   ToolkitTestApplication application;
1358
1359   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual2:  Request mesh visual with blank material file and images directory" );
1360
1361   //Set up visual properties.
1362   Property::Map propertyMap;
1363   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1364   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1365   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, "" );
1366   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, "" );
1367
1368   //Test to see if mesh loads correctly.
1369   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1370
1371   END_TEST;
1372 }
1373
1374 //Test if mesh loads correctly when supplied with all main parameters, an object file, a material file and a directory location, but duff optional parameters
1375 int UtcDaliVisualFactoryGetMeshVisual3b(void)
1376 {
1377   //Set up test application first, so everything else can be handled.
1378   ToolkitTestApplication application;
1379
1380   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual3:  Request mesh visual with all parameters correct" );
1381
1382   //Set up visual properties.
1383   Property::Map propertyMap;
1384   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1385   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1386   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1387   propertyMap.Insert( MeshVisual::Property::USE_MIPMAPPING, Color::GREEN ); // Test that wrong property types don't prevent the object load
1388   propertyMap.Insert( MeshVisual::Property::USE_SOFT_NORMALS, 1.0f );
1389   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, 1.0f );
1390   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1391
1392   //Test to see if mesh loads correctly.
1393   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1394
1395   END_TEST;
1396 }
1397
1398 //Test if mesh loads correctly when supplied with all main parameters, an object file, a material file and a directory location.
1399 int UtcDaliVisualFactoryGetMeshVisual3(void)
1400 {
1401   //Set up test application first, so everything else can be handled.
1402   ToolkitTestApplication application;
1403
1404   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual3:  Request mesh visual with all parameters correct" );
1405
1406   //Set up visual properties.
1407   Property::Map propertyMap;
1408   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1409   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1410   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1411   propertyMap.Insert( MeshVisual::Property::USE_MIPMAPPING, false );
1412   propertyMap.Insert( MeshVisual::Property::USE_SOFT_NORMALS, false );
1413   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3::XAXIS );
1414   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1415
1416   //Test to see if mesh loads correctly.
1417   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1418
1419   END_TEST;
1420 }
1421
1422 //Test if mesh visual can load a correctly supplied mesh without a normal map or gloss map in the material file.
1423 int UtcDaliVisualFactoryGetMeshVisual4(void)
1424 {
1425   //Set up test application first, so everything else can be handled.
1426   ToolkitTestApplication application;
1427
1428   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual4:  Request mesh visual with diffuse texture but not normal or gloss." );
1429
1430
1431   //Set up visual properties.
1432   Property::Map propertyMap;
1433   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1434   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1435   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_SIMPLE_MTL_FILE_NAME );
1436   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1437
1438   //Test to see if mesh loads correctly.
1439   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1440
1441   END_TEST;
1442 }
1443
1444 //Test if mesh visual can load when made to use diffuse textures only.
1445 int UtcDaliVisualFactoryGetMeshVisual5(void)
1446 {
1447   //Set up test application first, so everything else can be handled.
1448   ToolkitTestApplication application;
1449
1450   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual5:  Request mesh visual and make it only use diffuse textures." );
1451
1452   //Set up visual properties.
1453   Property::Map propertyMap;
1454   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1455   propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
1456   propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
1457   propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
1458   propertyMap.Insert( "useMipmapping", false );
1459   propertyMap.Insert( "useSoftNormals", false );
1460   propertyMap.Insert( "lightPosition", Vector3::ZAXIS );
1461   propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURED_WITH_SPECULAR_LIGHTING );
1462
1463   //Test to see if mesh loads correctly.
1464   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1465
1466
1467   END_TEST;
1468 }
1469
1470 //Test if mesh visual can load when made to not use the supplied textures.
1471 int UtcDaliVisualFactoryGetMeshVisual6(void)
1472 {
1473   //Set up test application first, so everything else can be handled.
1474   ToolkitTestApplication application;
1475
1476   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual6:  Request mesh visual and make it not use any textures." );
1477
1478   //Set up visual properties.
1479   Property::Map propertyMap;
1480   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1481   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1482   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1483   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1484   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1485
1486   //Test to see if mesh loads correctly.
1487   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1488
1489   END_TEST;
1490 }
1491 //Test if mesh visual loads correctly when light position is manually set.
1492 int UtcDaliVisualFactoryGetMeshVisual7(void)
1493 {
1494   //Set up test application first, so everything else can be handled.
1495   ToolkitTestApplication application;
1496
1497
1498   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual7:  Request mesh visual with custom light position." );
1499
1500   //Set up visual properties.
1501   Property::Map propertyMap;
1502   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1503   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1504   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1505   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1506   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.0, 1.0, 2.0 ) );
1507
1508   //Test to see if mesh loads correctly.
1509   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1510
1511   END_TEST;
1512 }
1513
1514 //Test if mesh visual loads correctly when supplied an object file without face normals or texture points.
1515 //Note that this notably tests object loader functionality.
1516 int UtcDaliVisualFactoryGetMeshVisual8(void)
1517 {
1518   //Set up test application first, so everything else can be handled.
1519   ToolkitTestApplication application;
1520
1521   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual5:  Request mesh visual with normal-less object file." );
1522
1523   //Set up visual properties.
1524   Property::Map propertyMap;
1525   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1526   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_SIMPLE_OBJ_FILE_NAME );
1527   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1528   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1529
1530   //Test to see if mesh loads correctly.
1531   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1532
1533   END_TEST;
1534 }
1535
1536 //Test if mesh visual handles the case of lacking an object file.
1537 int UtcDaliVisualFactoryGetMeshVisualN1(void)
1538 {
1539   //Set up test application first, so everything else can be handled.
1540   ToolkitTestApplication application;
1541
1542   tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN1:  Request mesh visual without object file" );
1543
1544   //Set up visual properties.
1545   Property::Map propertyMap;
1546   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1547   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1548   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1549
1550   //Test to see if mesh doesn't load with these properties, as expected.
1551   MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
1552
1553
1554   END_TEST;
1555 }
1556
1557 //Test if mesh visual handles the case of being passed invalid material and images urls.
1558 int UtcDaliVisualFactoryGetMeshVisualN2(void)
1559 {
1560   //Set up test application first, so everything else can be handled.
1561   ToolkitTestApplication application;
1562
1563   tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN2:  Request mesh visual with invalid material and images urls" );
1564
1565   //Set up visual properties.
1566   Property::Map propertyMap;
1567   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1568   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1569   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, "invalid" );
1570   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, "also invalid" );
1571
1572   //Test to see if mesh doesn't load with these properties, as expected.
1573   MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
1574
1575
1576   END_TEST;
1577 }
1578
1579 //Test if mesh visual handles the case of being passed an invalid object url
1580 int UtcDaliVisualFactoryGetMeshVisualN3(void)
1581 {
1582   //Set up test application first, so everything else can be handled.
1583   ToolkitTestApplication application;
1584   tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN3:  Request mesh visual with invalid object url" );
1585
1586
1587   //Set up visual properties.
1588   Property::Map propertyMap;
1589   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1590   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, "invalid" );
1591   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1592   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1593
1594   //Test to see if mesh doesn't load with these properties, as expected.
1595   MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
1596
1597   END_TEST;
1598 }
1599
1600 //Creates a primitive visual with the given property map and tests to see if it correctly loads in the given application.
1601 void TestPrimitiveVisualWithProperties( Property::Map& propertyMap, ToolkitTestApplication& application )
1602 {
1603   VisualFactory factory = VisualFactory::Get();
1604   DALI_TEST_CHECK( factory );
1605
1606   //Create a primitive visual.
1607   Visual::Base visual = factory.CreateVisual( propertyMap );
1608   DALI_TEST_CHECK( visual );
1609
1610   //Create an actor on stage to house the visual.
1611   DummyControl actor = DummyControl::New(true);
1612   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1613   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1614
1615   actor.SetSize( 200.f, 200.f );
1616   Stage::GetCurrent().Add( actor );
1617   visual.SetTransformAndSize(DefaultTransform(),  Vector2( 200.f, 200.f ) );
1618
1619   //Ensure set on stage.
1620   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1621
1622   //Tell test application to load the visual.
1623   application.SendNotification();
1624   application.Render(0);
1625
1626   Matrix testScaleMatrix;
1627   testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
1628   Matrix actualScaleMatrix;
1629
1630   //Test to see if the object has been successfully loaded.
1631   DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
1632   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1633
1634   //Finish by setting off stage, and ensuring this was successful.
1635   actor.Unparent();
1636   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1637 }
1638
1639 //Test if primitive shape loads correctly when supplied with only the bare minimum requirements, the shape to use.
1640 int UtcDaliVisualFactoryGetPrimitiveVisual1(void)
1641 {
1642   //Set up test application first, so everything else can be handled.
1643   ToolkitTestApplication application;
1644
1645   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual1:  Request primitive visual with a shape only" );
1646
1647   //Set up visual properties.
1648   Property::Map propertyMap;
1649   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1650   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1651
1652   //Test to see if shape loads correctly.
1653   TestPrimitiveVisualWithProperties( propertyMap, application );
1654
1655   END_TEST;
1656 }
1657
1658 //Test if primitive shape loads correctly when supplied with all possible parameters
1659 int UtcDaliVisualFactoryGetPrimitiveVisual2(void)
1660 {
1661   //Set up test application first, so everything else can be handled.
1662   ToolkitTestApplication application;
1663
1664   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual2:  Request primitive visual with everything" );
1665
1666   //Set up visual properties.
1667   Property::Map propertyMap;
1668   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1669   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1670   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1671   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1672   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1673   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1674   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1675   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1676   propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1677   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.7f );
1678   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.8f );
1679   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.9, 1.0, 1.1 ) );
1680
1681   //Test to see if shape loads correctly.
1682   TestPrimitiveVisualWithProperties( propertyMap, application );
1683
1684   END_TEST;
1685 }
1686
1687 //Test if primitive shape loads a sphere correctly.
1688 int UtcDaliVisualFactoryGetPrimitiveVisual3(void)
1689 {
1690   //Set up test application first, so everything else can be handled.
1691   ToolkitTestApplication application;
1692
1693   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual3:  Request primitive visual to display a sphere" );
1694
1695   //Set up visual properties.
1696   Property::Map propertyMap;
1697   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1698   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1699   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1700   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1701   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1702
1703   //Test to see if shape loads correctly.
1704   TestPrimitiveVisualWithProperties( propertyMap, application );
1705
1706   END_TEST;
1707 }
1708
1709 //Test if primitive shape loads a conic section correctly.
1710 int UtcDaliVisualFactoryGetPrimitiveVisual4(void)
1711 {
1712   //Set up test application first, so everything else can be handled.
1713   ToolkitTestApplication application;
1714
1715   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual4:  Request primitive visual to display a conic section" );
1716
1717   //Set up visual properties.
1718   Property::Map propertyMap;
1719   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1720   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONICAL_FRUSTRUM );
1721   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1722   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1723   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1724   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1725   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1726
1727   //Test to see if shape loads correctly.
1728   TestPrimitiveVisualWithProperties( propertyMap, application );
1729
1730   END_TEST;
1731 }
1732
1733 //Test if primitive shape loads a bevelled cube correctly.
1734 int UtcDaliVisualFactoryGetPrimitiveVisual5(void)
1735 {
1736   //Set up test application first, so everything else can be handled.
1737   ToolkitTestApplication application;
1738
1739   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual5:  Request primitive visual to display a bevelled cube" );
1740
1741   //Set up visual properties.
1742   Property::Map propertyMap;
1743   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1744   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::BEVELLED_CUBE );
1745   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1746   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.7f );
1747
1748   //Test to see if shape loads correctly.
1749   TestPrimitiveVisualWithProperties( propertyMap, application );
1750
1751   END_TEST;
1752 }
1753
1754 //Test if primitive shape loads an octahedron correctly.
1755 int UtcDaliVisualFactoryGetPrimitiveVisual6(void)
1756 {
1757   //Set up test application first, so everything else can be handled.
1758   ToolkitTestApplication application;
1759
1760   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual6:  Request primitive visual to display an octahedron" );
1761
1762   //Set up visual properties.
1763   Property::Map propertyMap;
1764   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1765   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::OCTAHEDRON );
1766   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1767
1768   //Test to see if shape loads correctly.
1769   TestPrimitiveVisualWithProperties( propertyMap, application );
1770
1771   END_TEST;
1772 }
1773
1774 //Test if primitive shape loads a cone correctly.
1775 int UtcDaliVisualFactoryGetPrimitiveVisual7(void)
1776 {
1777   //Set up test application first, so everything else can be handled.
1778   ToolkitTestApplication application;
1779
1780   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual7:  Request primitive visual to display a cone" );
1781
1782   //Set up visual properties.
1783   Property::Map propertyMap;
1784   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1785   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONE );
1786   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1787   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1788   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1789   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1790
1791   //Test to see if shape loads correctly.
1792   TestPrimitiveVisualWithProperties( propertyMap, application );
1793
1794   END_TEST;
1795 }
1796
1797 //Test if primitive shape loads correctly when light position is manually set.
1798 int UtcDaliVisualFactoryGetPrimitiveVisual8(void)
1799 {
1800   //Set up test application first, so everything else can be handled.
1801   ToolkitTestApplication application;
1802
1803   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual8:  Request primitive visual with set light position" );
1804
1805   //Set up visual properties.
1806   Property::Map propertyMap;
1807   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1808   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1809   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1810   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.0, 1.0, 2.0 ) );
1811
1812   //Test to see if shape loads correctly.
1813   TestPrimitiveVisualWithProperties( propertyMap, application );
1814
1815   END_TEST;
1816 }
1817
1818 //Test if primitive shape loads correctly when told to use too many slices.
1819 int UtcDaliVisualFactoryGetPrimitiveVisual9(void)
1820 {
1821   //Set up test application first, so everything else can be handled.
1822   ToolkitTestApplication application;
1823
1824   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual9:  Request primitive visual with above-cap slices." );
1825
1826   //Set up visual properties.
1827   Property::Map propertyMap;
1828   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1829   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1830   propertyMap.Insert( PrimitiveVisual::Property::SLICES, Property::Value( 1000000 ) );
1831
1832   //Test to see if shape loads correctly.
1833   TestPrimitiveVisualWithProperties( propertyMap, application );
1834
1835   END_TEST;
1836 }
1837
1838 //Test if primitive shape loads correctly when told to use too few slices. (2 slices or less.)
1839 int UtcDaliVisualFactoryGetPrimitiveVisual10(void)
1840 {
1841   //Set up test application first, so everything else can be handled.
1842   ToolkitTestApplication application;
1843
1844   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual10:  Request primitive visual with too few slices." );
1845
1846   //Set up visual properties.
1847   Property::Map propertyMap;
1848   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1849   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1850   propertyMap.Insert( PrimitiveVisual::Property::SLICES, Property::Value( 2 ) );
1851
1852   //Test to see if shape loads correctly.
1853   TestPrimitiveVisualWithProperties( propertyMap, application );
1854
1855   END_TEST;
1856 }
1857
1858 //Test if primitive shape loads correctly when told to use too many stacks.
1859 int UtcDaliVisualFactoryGetPrimitiveVisual11(void)
1860 {
1861   //Set up test application first, so everything else can be handled.
1862   ToolkitTestApplication application;
1863
1864   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual11:  Request primitive visual with too many stacks." );
1865
1866   //Set up visual properties.
1867   Property::Map propertyMap;
1868   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1869   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1870   propertyMap.Insert( PrimitiveVisual::Property::STACKS, Property::Value( 1000000 ) );
1871
1872   //Test to see if shape loads correctly.
1873   TestPrimitiveVisualWithProperties( propertyMap, application );
1874
1875   END_TEST;
1876 }
1877
1878 //Test if primitive shape loads correctly when told to use too few stacks. (1 stack or less.)
1879 int UtcDaliVisualFactoryGetPrimitiveVisual12(void)
1880 {
1881   //Set up test application first, so everything else can be handled.
1882   ToolkitTestApplication application;
1883
1884   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual12:  Request primitive visual with too few stacks." );
1885
1886   //Set up visual properties.
1887   Property::Map propertyMap;
1888   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1889   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1890   propertyMap.Insert( PrimitiveVisual::Property::STACKS, Property::Value( 1 ) );
1891
1892   //Test to see if shape loads correctly.
1893   TestPrimitiveVisualWithProperties( propertyMap, application );
1894
1895   END_TEST;
1896 }
1897
1898 //Test if primitive shape loads correctly when told to use invalid (zero or negative) dimensions.
1899 int UtcDaliVisualFactoryGetPrimitiveVisual13(void)
1900 {
1901   //Set up test application first, so everything else can be handled.
1902   ToolkitTestApplication application;
1903
1904   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual13:  Request primitive visual with invalid scale dimensions." );
1905
1906   //Set up visual properties.
1907   Property::Map propertyMap;
1908   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1909   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1910   propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, Vector3::ZERO );
1911
1912   //Test to see if shape loads correctly.
1913   TestPrimitiveVisualWithProperties( propertyMap, application );
1914
1915   END_TEST;
1916 }
1917
1918 //Test if primitive shape loads correctly when told to use too low a bevel percentage.
1919 int UtcDaliVisualFactoryGetPrimitiveVisual14(void)
1920 {
1921   //Set up test application first, so everything else can be handled.
1922   ToolkitTestApplication application;
1923
1924   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual14:  Request primitive visual with too low a bevel percentage." );
1925
1926   //Set up visual properties.
1927   Property::Map propertyMap;
1928   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1929   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1930   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::Value( -1.0f ) );
1931
1932   //Test to see if shape loads correctly.
1933   TestPrimitiveVisualWithProperties( propertyMap, application );
1934
1935   END_TEST;
1936 }
1937
1938 //Test if primitive shape loads correctly when told to use too high a bevel percentage.
1939 int UtcDaliVisualFactoryGetPrimitiveVisual15(void)
1940 {
1941   //Set up test application first, so everything else can be handled.
1942   ToolkitTestApplication application;
1943
1944   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual15:  Request primitive visual with too high a bevel percentage." );
1945
1946   //Set up visual properties.
1947   Property::Map propertyMap;
1948   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1949   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1950   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::Value( 2.0f ) );
1951
1952   //Test to see if shape loads correctly.
1953   TestPrimitiveVisualWithProperties( propertyMap, application );
1954
1955   END_TEST;
1956 }
1957
1958 //Test if primitive shape loads correctly when told to use too low a bevel smoothness.
1959 int UtcDaliVisualFactoryGetPrimitiveVisual16(void)
1960 {
1961   //Set up test application first, so everything else can be handled.
1962   ToolkitTestApplication application;
1963
1964   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual16:  Request primitive visual with too low a bevel smoothness." );
1965
1966   //Set up visual properties.
1967   Property::Map propertyMap;
1968   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1969   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1970   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::Value( -1.0f ) );
1971
1972   //Test to see if shape loads correctly.
1973   TestPrimitiveVisualWithProperties( propertyMap, application );
1974
1975   END_TEST;
1976 }
1977
1978 //Test if primitive shape loads correctly when told to use too high a bevel smoothness.
1979 int UtcDaliVisualFactoryGetPrimitiveVisual17(void)
1980 {
1981   //Set up test application first, so everything else can be handled.
1982   ToolkitTestApplication application;
1983
1984   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual17:  Request primitive visual with too high a bevel smoothness." );
1985
1986   //Set up visual properties.
1987   Property::Map propertyMap;
1988   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1989   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1990   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::Value( 2.0f ) );
1991
1992   //Test to see if shape loads correctly.
1993   TestPrimitiveVisualWithProperties( propertyMap, application );
1994
1995   END_TEST;
1996 }
1997
1998 //Test if primitive shape loads a conic section correctly.
1999 int UtcDaliVisualFactoryGetPrimitiveVisual18(void)
2000 {
2001   //Set up test application first, so everything else can be handled.
2002   ToolkitTestApplication application;
2003
2004   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual18:  Request primitive visual to display a conic section" );
2005
2006   //Set up visual properties.
2007   Property::Map propertyMap;
2008   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
2009   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONICAL_FRUSTUM );
2010   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
2011   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
2012   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
2013   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
2014   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
2015
2016   //Test to see if shape loads correctly.
2017   TestPrimitiveVisualWithProperties( propertyMap, application );
2018
2019   END_TEST;
2020 }
2021
2022 //Test if primitive shape visual handles the case of not being passed a specific shape to use.
2023 int UtcDaliVisualFactoryGetPrimitiveVisualN1(void)
2024 {
2025   //Set up test application first, so everything else can be handled.
2026   ToolkitTestApplication application;
2027
2028   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisualN1:  Request primitive visual without shape" );
2029
2030   //Set up visual properties, without supplying shape.
2031   Property::Map propertyMap;
2032   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
2033
2034   //Test to see if shape loads regardless of missing input.
2035   TestPrimitiveVisualWithProperties( propertyMap, application );
2036
2037   END_TEST;
2038 }
2039
2040 int UtcDaliVisualFactoryGetAnimatedImageVisual1(void)
2041 {
2042   ToolkitTestApplication application;
2043   tet_infoline( "UtcDaliVisualFactoryGetAnimatedImageVisual1: Request animated image visual with a gif url" );
2044
2045   TestGlAbstraction& gl = application.GetGlAbstraction();
2046   TraceCallStack& textureTrace = gl.GetTextureTrace();
2047   textureTrace.Enable(true);
2048
2049   VisualFactory factory = VisualFactory::Get();
2050   Visual::Base visual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
2051   DALI_TEST_CHECK( visual );
2052
2053   DummyControl actor = DummyControl::New(true);
2054   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
2055   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2056   actor.SetSize( 200.0f, 200.0f );
2057   Stage::GetCurrent().Add( actor );
2058
2059   application.SendNotification();
2060   application.Render();
2061
2062   // renderer is added to actor
2063   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
2064   Renderer renderer = actor.GetRendererAt( 0u );
2065   DALI_TEST_CHECK( renderer );
2066
2067   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2068   textureTrace.Reset();
2069
2070   // Force the timer used by the animatedImageVisual to tick,
2071   Dali::Timer timer = Timer::New( 0 );
2072   timer.MockEmitSignal();
2073   application.SendNotification();
2074   application.Render();
2075   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2076   textureTrace.Reset();
2077
2078
2079   // Force the timer used by the animatedImageVisual to tick,
2080   timer.MockEmitSignal();
2081   application.SendNotification();
2082   application.Render();
2083   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2084   textureTrace.Reset();
2085
2086   // Force the timer used by the animatedImageVisual to tick,
2087   timer.MockEmitSignal();
2088   application.SendNotification();
2089   application.Render();
2090   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2091   textureTrace.Reset();
2092
2093   // Test SetOffStage().
2094   actor.Unparent();
2095   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
2096
2097   END_TEST;
2098 }
2099
2100 int UtcDaliVisualFactoryGetAnimatedImageVisual2(void)
2101 {
2102   ToolkitTestApplication application;
2103   tet_infoline( "UtcDaliVisualFactoryGetAnimatedImageVisual2: Request animated image visual with a Property::Map, test custom wrap mode and pixel area" );
2104
2105   const Vector4 pixelArea(-0.5f, -0.5f, 2.f, 2.f);
2106   Property::Map propertyMap;
2107   propertyMap.Add( Toolkit::Visual::Property::TYPE,  Visual::IMAGE  )
2108              .Add( ImageVisual::Property::URL, TEST_GIF_FILE_NAME  )
2109              .Add( ImageVisual::Property::PIXEL_AREA, pixelArea )
2110              .Add( ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT )
2111              .Add( ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT );
2112
2113   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
2114   DALI_TEST_CHECK( visual );
2115
2116   TestGlAbstraction& gl = application.GetGlAbstraction();
2117   TraceCallStack& textureTrace = gl.GetTextureTrace();
2118   textureTrace.Enable(true);
2119   TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
2120   texParameterTrace.Enable( true );
2121
2122   DummyControl actor = DummyControl::New(true);
2123   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
2124   dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
2125   actor.SetSize( 200.0f, 200.0f );
2126   Stage::GetCurrent().Add( actor );
2127
2128   application.SendNotification();
2129   application.Render();
2130
2131   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
2132
2133   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
2134
2135   // For animated image visual, the wrapping is handled manually in shader, so the following gl function should not be called
2136   std::stringstream out;
2137   out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT;
2138   DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
2139   out.str("");
2140   out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT;
2141   DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
2142
2143   // test the uniforms which used to handle the wrap mode
2144   Renderer renderer = actor.GetRendererAt( 0u );
2145   DALI_TEST_CHECK( renderer );
2146
2147   Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) );
2148   DALI_TEST_EQUALS( pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION );
2149   Vector4 pixelAreaUniform;
2150   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "pixelArea", pixelAreaUniform ) );
2151   DALI_TEST_EQUALS( pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2152
2153   Property::Value wrapModeValue = renderer.GetProperty( renderer.GetPropertyIndex( "wrapMode" ) );
2154   Vector2 wrapMode( WrapMode::MIRRORED_REPEAT-1, WrapMode::REPEAT-1 );
2155   DALI_TEST_EQUALS( wrapModeValue.Get<Vector2>(), wrapMode, TEST_LOCATION );
2156   Vector2 wrapModeUniform;
2157   DALI_TEST_CHECK( gl.GetUniformValue<Vector2>( "wrapMode", wrapModeUniform ) );
2158   DALI_TEST_EQUALS( wrapMode, wrapModeUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2159
2160   actor.Unparent( );
2161   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
2162
2163   END_TEST;
2164 }