Remove NinePatchImage Usage
[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.SetProperty( Actor::Property::SIZE, Vector2( 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.SetProperty( Actor::Property::SIZE, Vector2( 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.SetProperty( Actor::Property::SIZE, Vector2( 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.SetProperty( Actor::Property::SIZE, Vector2( 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   END_TEST;
835 }
836
837 int UtcDaliVisualFactoryGetNPatchVisual5(void)
838 {
839   ToolkitTestApplication application;
840   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual5: Request n-patch visual with an image url" );
841
842   // Get actual size of test image
843   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_NPATCH_FILE_NAME );
844
845   VisualFactory factory = VisualFactory::Get();
846   DALI_TEST_CHECK( factory );
847
848   Visual::Base visual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
849   DALI_TEST_CHECK( visual );
850
851   TestGlAbstraction& gl = application.GetGlAbstraction();
852   TraceCallStack& textureTrace = gl.GetTextureTrace();
853   textureTrace.Enable(true);
854
855   DummyControl actor = DummyControl::New(true);
856   TestVisualAsynchronousRender( application, actor, visual );
857
858   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
859
860   Vector2 naturalSize( 0.0f, 0.0f );
861   visual.GetNaturalSize( naturalSize );
862   DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
863
864   END_TEST;
865 }
866
867 int UtcDaliVisualFactoryGetNPatchVisual6(void)
868 {
869   ToolkitTestApplication application;
870   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual6: Request n-patch visual with a general image" );
871
872   VisualFactory factory = VisualFactory::Get();
873   DALI_TEST_CHECK( factory );
874
875   {
876     // Get actual size of test image
877     ImageDimensions imageSize = Dali::GetClosestImageSize( gImage_34_RGBA );
878
879     Property::Map propertyMap;
880     propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
881     propertyMap.Insert( ImageVisual::Property::URL, gImage_34_RGBA );
882
883     Visual::Base visual = factory.CreateVisual( propertyMap );
884     DALI_TEST_CHECK( visual );
885
886     TestGlAbstraction& gl = application.GetGlAbstraction();
887     TraceCallStack& textureTrace = gl.GetTextureTrace();
888     textureTrace.Enable(true);
889
890     DummyControl actor = DummyControl::New(true);
891     TestVisualAsynchronousRender( application, actor, visual );
892
893     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
894
895     Vector2 naturalSize( 0.0f, 0.0f );
896     visual.GetNaturalSize( naturalSize );
897     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
898
899     Stage::GetCurrent().Remove( actor );
900     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
901   }
902
903   {
904     // Get actual size of test image
905     ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_IMAGE_FILE_NAME );
906
907     Property::Map propertyMap;
908     propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
909     propertyMap.Insert( ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME );
910
911     Visual::Base visual = factory.CreateVisual( propertyMap );
912     DALI_TEST_CHECK( visual );
913
914     TestGlAbstraction& gl = application.GetGlAbstraction();
915     TraceCallStack& textureTrace = gl.GetTextureTrace();
916     textureTrace.Enable(true);
917
918     DummyControl actor = DummyControl::New(true);
919     TestVisualAsynchronousRender( application, actor, visual );
920
921     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
922
923     Vector2 naturalSize( 0.0f, 0.0f );
924     visual.GetNaturalSize( naturalSize );
925     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth() - 2.0f, imageSize.GetHeight() - 2.0f ), TEST_LOCATION );
926
927     Stage::GetCurrent().Remove( actor );
928     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
929   }
930
931   END_TEST;
932 }
933
934 int UtcDaliVisualFactoryGetNPatchVisual7(void)
935 {
936   ToolkitTestApplication application;
937   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual7: Add 9-patch visual on stage and instantly remove it." );
938
939   VisualFactory factory = VisualFactory::Get();
940   DALI_TEST_CHECK( factory );
941
942   // Get actual size of test image
943   ImageDimensions imageSize = Dali::GetClosestImageSize( TEST_9_PATCH_FILE_NAME );
944
945   Property::Map propertyMap;
946   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
947   propertyMap.Insert( ImageVisual::Property::URL, TEST_9_PATCH_FILE_NAME );
948   propertyMap.Insert( ImageVisual::Property::SYNCHRONOUS_LOADING, false );
949   {
950     Visual::Base visual = factory.CreateVisual( propertyMap );
951     DALI_TEST_CHECK( visual );
952
953     Vector2 naturalSize( 0.0f, 0.0f );
954     visual.GetNaturalSize( naturalSize );
955     DALI_TEST_EQUALS( naturalSize, Vector2( imageSize.GetWidth(), imageSize.GetHeight() ), TEST_LOCATION );
956
957     TestGlAbstraction& gl = application.GetGlAbstraction();
958     TraceCallStack& textureTrace = gl.GetTextureTrace();
959     textureTrace.Enable(true);
960
961     DummyControl actor = DummyControl::New(true);
962
963     DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
964     dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
965
966     actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
967     DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
968
969     Stage::GetCurrent().Add( actor );
970     actor.Unparent();
971
972     application.SendNotification();
973     application.Render();
974
975     DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger(1 ), true, TEST_LOCATION );
976
977     application.SendNotification();
978     application.Render();
979
980     DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
981   }
982
983   END_TEST;
984 }
985
986 int UtcDaliNPatchVisualAuxiliaryImage(void)
987 {
988   ToolkitTestApplication application;
989   tet_infoline( "NPatchVisual with aux image" );
990
991   VisualFactory factory = VisualFactory::Get();
992   Property::Map properties;
993   Property::Map shader;
994
995   Property::Map transformMap;
996   transformMap["size"] = Vector2( 0.5f, 0.5f ) ;
997   transformMap["offset"] = Vector2( 20.0f, 0.0f ) ;
998   transformMap["offsetPolicy"] = Vector2( Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE );
999   transformMap["anchorPoint"] = Align::CENTER;
1000   transformMap["origin"] = Align::CENTER;
1001   properties[Visual::Property::TRANSFORM] = transformMap;
1002
1003   properties[Visual::Property::TYPE] = Visual::IMAGE;
1004   properties[Visual::Property::MIX_COLOR] = Color::BLUE;
1005   properties[Visual::Property::SHADER]=shader;
1006   properties[ImageVisual::Property::URL] = TEST_9_PATCH_FILE_NAME;
1007   properties[DevelImageVisual::Property::AUXILIARY_IMAGE] = TEST_AUX_IMAGE;
1008   properties[DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA] = 0.9f;
1009
1010   Visual::Base visual = factory.CreateVisual( properties );
1011
1012   // trigger creation through setting on stage
1013   DummyControl dummy = DummyControl::New(true);
1014   Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
1015   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1016   dummyImpl.SetLayout( DummyControl::Property::TEST_VISUAL, transformMap );
1017   dummy.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
1018   dummy.SetProperty( Actor::Property::PARENT_ORIGIN,ParentOrigin::CENTER);
1019   Stage::GetCurrent().Add(dummy);
1020
1021   application.SendNotification();
1022   application.Render();
1023
1024   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 2 ), true, TEST_LOCATION );
1025
1026   application.SendNotification();
1027   application.Render();
1028
1029   Renderer renderer = dummy.GetRendererAt( 0 );
1030   auto textures = renderer.GetTextures();
1031   DALI_TEST_EQUALS( textures.GetTextureCount(), 2, TEST_LOCATION );
1032
1033   END_TEST;
1034 }
1035
1036
1037 int UtcDaliVisualFactoryGetNPatchVisualN1(void)
1038 {
1039   //This should still load but display an error image
1040
1041   ToolkitTestApplication application;
1042   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid image url" );
1043
1044   VisualFactory factory = VisualFactory::Get();
1045   DALI_TEST_CHECK( factory );
1046
1047   Visual::Base visual = factory.CreateVisual( "ERROR.9.jpg", ImageDimensions() );
1048   DALI_TEST_CHECK( visual );
1049
1050   TestGlAbstraction& gl = application.GetGlAbstraction();
1051   TraceCallStack& textureTrace = gl.GetTextureTrace();
1052   textureTrace.Enable(true);
1053
1054   DummyControl actor = DummyControl::New(true);
1055   TestVisualAsynchronousRender( application, actor, visual );
1056
1057   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1058
1059   END_TEST;
1060 }
1061
1062 int UtcDaliVisualFactoryGetNPatchVisualN2(void)
1063 {
1064   //This should still load but display an error image
1065
1066   ToolkitTestApplication application;
1067   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid URL" );
1068
1069   VisualFactory factory = VisualFactory::Get();
1070   DALI_TEST_CHECK( factory );
1071
1072   Property::Map propertyMap;
1073   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::N_PATCH );
1074   propertyMap.Insert( ImageVisual::Property::URL,  "ERROR.9.jpg" );
1075
1076   Visual::Base visual = factory.CreateVisual( propertyMap );
1077   DALI_TEST_CHECK( visual );
1078
1079   TestGlAbstraction& gl = application.GetGlAbstraction();
1080   TraceCallStack& textureTrace = gl.GetTextureTrace();
1081   textureTrace.Enable(true);
1082   TraceCallStack& drawTrace = gl.GetDrawTrace();
1083   drawTrace.Enable(true);
1084
1085   DummyControl actor = DummyControl::New(true);
1086   TestVisualAsynchronousRender( application, actor, visual );
1087
1088   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1089
1090   END_TEST;
1091 }
1092
1093 int UtcDaliVisualFactoryGetNPatchVisualN3(void)
1094 {
1095   // Passing in an invalid visual type so we should not get a visual
1096
1097   ToolkitTestApplication application;
1098   tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid visual type" );
1099
1100   VisualFactory factory = VisualFactory::Get();
1101   DALI_TEST_CHECK( factory );
1102
1103   Property::Map propertyMap;
1104   propertyMap.Insert( Toolkit::Visual::Property::TYPE,  111 );
1105   propertyMap.Insert( ImageVisual::Property::URL,  "ERROR.9.jpg" );
1106
1107   Visual::Base visual = factory.CreateVisual( propertyMap );
1108   DALI_TEST_CHECK( !visual );
1109
1110   END_TEST;
1111 }
1112
1113 int UtcDaliVisualFactoryGetSvgVisual(void)
1114 {
1115   ToolkitTestApplication application;
1116   tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with a svg url" );
1117
1118   VisualFactory factory = VisualFactory::Get();
1119   Visual::Base visual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
1120   DALI_TEST_CHECK( visual );
1121
1122   TestGlAbstraction& gl = application.GetGlAbstraction();
1123   TraceCallStack& textureTrace = gl.GetTextureTrace();
1124   textureTrace.Enable(true);
1125
1126   DummyControl actor = DummyControl::New(true);
1127   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1128   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1129   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
1130   Stage::GetCurrent().Add( actor );
1131   visual.SetTransformAndSize(DefaultTransform(), Vector2(200.f, 200.f) );
1132
1133   application.SendNotification();
1134   application.Render();
1135
1136   // renderer is not added to actor until the rasterization is completed.
1137   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1138
1139   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1140
1141   // renderer is added to actor
1142   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1143
1144   // waiting for the resource uploading
1145   application.SendNotification();
1146   application.Render();
1147
1148   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1149
1150   END_TEST;
1151 }
1152
1153 int UtcDaliVisualFactoryGetSvgVisualLarge(void)
1154 {
1155   ToolkitTestApplication application;
1156   tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with a svg url" );
1157
1158   VisualFactory factory = VisualFactory::Get();
1159   Visual::Base visual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions( 2000, 2000 ) );
1160   DALI_TEST_CHECK( visual );
1161
1162   TestGlAbstraction& gl = application.GetGlAbstraction();
1163   TraceCallStack& textureTrace = gl.GetTextureTrace();
1164   textureTrace.Enable(true);
1165
1166   DummyControl actor = DummyControl::New(true);
1167   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1168   actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); // Only rasterizes when it knows control size.
1169   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1170   Stage::GetCurrent().Add( actor );
1171
1172   application.SendNotification();
1173   application.Render();
1174
1175   // renderer is not added to actor until the rasterization is completed.
1176   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1177
1178   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1179
1180   // renderer is added to actor
1181   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1182
1183   // waiting for the resource uploading
1184   application.SendNotification();
1185   application.Render();
1186
1187   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1188
1189   END_TEST;
1190 }
1191
1192 int UtcDaliVisualFactoryGetSvgVisualAtlas(void)
1193 {
1194   ToolkitTestApplication application;
1195   tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with enabled atlas" );
1196
1197   VisualFactory factory = VisualFactory::Get();
1198
1199   Property::Map propertyMap;
1200   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::SVG );
1201   propertyMap.Insert( ImageVisual::Property::URL, TEST_SVG_FILE_NAME );
1202   propertyMap.Insert( ImageVisual::Property::ATLASING, true );
1203
1204   Visual::Base visual = factory.CreateVisual( propertyMap );
1205   DALI_TEST_CHECK( visual );
1206
1207   TestGlAbstraction& gl = application.GetGlAbstraction();
1208   TraceCallStack& textureTrace = gl.GetTextureTrace();
1209   textureTrace.Enable(true);
1210
1211   DummyControl actor = DummyControl::New(true);
1212   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1213   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1214   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
1215   Stage::GetCurrent().Add( actor );
1216   visual.SetTransformAndSize(DefaultTransform(), Vector2(200.f, 200.f) );
1217
1218   application.SendNotification();
1219   application.Render();
1220
1221   // renderer is not added to actor until the rasterization is completed.
1222   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
1223
1224   DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
1225
1226   // renderer is added to actor
1227   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1228
1229   // waiting for the resource uploading
1230   application.SendNotification();
1231   application.Render();
1232
1233   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
1234
1235   END_TEST;
1236 }
1237
1238 //Creates a mesh visual from the given propertyMap and tries to load it on stage in the given application.
1239 //This is expected to succeed, which will then pass the test.
1240 void MeshVisualLoadsCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
1241 {
1242   VisualFactory factory = VisualFactory::Get();
1243   DALI_TEST_CHECK( factory );
1244
1245   //Create a mesh visual.
1246   Visual::Base visual = factory.CreateVisual( propertyMap );
1247   DALI_TEST_CHECK( visual );
1248
1249   //Create an actor on stage to house the visual.
1250   DummyControl actor = DummyControl::New(true);
1251   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1252   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1253   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
1254   Stage::GetCurrent().Add( actor );
1255   visual.SetTransformAndSize(DefaultTransform(), Vector2( 200.f, 200.f ) );
1256
1257   //Ensure set on stage.
1258   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1259
1260   //Attempt to render to queue resource load requests.
1261   application.SendNotification();
1262   application.Render( 0 );
1263
1264   //Render again to upload the now-loaded textures.
1265   application.SendNotification();
1266   application.Render( 0 );
1267
1268   Matrix testScaleMatrix;
1269   testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
1270   Matrix actualScaleMatrix;
1271
1272   //Test to see if the object has been successfully loaded.
1273   DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
1274   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1275
1276   //Finish by setting off stage, and ensuring this was successful.
1277   actor.Unparent();
1278   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1279 }
1280
1281 //Creates a mesh visual from the given propertyMap and tries to load it on stage in the given application.
1282 //This is expected to fail, which will then pass the test.
1283 void MeshVisualDoesNotLoadCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
1284 {
1285   VisualFactory factory = VisualFactory::Get();
1286   DALI_TEST_CHECK( factory );
1287
1288   //Create a mesh visual.
1289   Visual::Base visual = factory.CreateVisual( propertyMap );
1290   DALI_TEST_CHECK( visual );
1291
1292   //Create an actor on stage to house the visual.
1293   DummyControl actor = DummyControl::New(true);
1294   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1295   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1296   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
1297   Stage::GetCurrent().Add( actor );
1298   visual.SetTransformAndSize(DefaultTransform(),  Vector2( 200.f, 200.f ) );
1299
1300   //Ensure set on stage.
1301   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1302
1303   //Attempt to render to queue resource load requests.
1304   application.SendNotification();
1305   application.Render( 0 );
1306
1307   //Render again to upload the now-loaded textures.
1308   application.SendNotification();
1309   application.Render( 0 );
1310
1311   //Test to see if the object has not been loaded, as expected.
1312   Matrix scaleMatrix;
1313   DALI_TEST_CHECK( !application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
1314
1315   //Finish by setting off stage, and ensuring this was successful.
1316   actor.Unparent();
1317   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1318 }
1319
1320 //Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file.
1321 int UtcDaliVisualFactoryGetMeshVisual1(void)
1322 {
1323   //Set up test application first, so everything else can be handled.
1324   ToolkitTestApplication application;
1325
1326   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual1:  Request mesh visual with a valid object file only" );
1327
1328
1329   //Set up visual properties.
1330   Property::Map propertyMap;
1331   propertyMap.Insert( Toolkit::Visual::Property::TYPE,  Visual::MESH );
1332   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1333
1334   //Test to see if mesh loads correctly.
1335   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1336
1337   END_TEST;
1338 }
1339
1340
1341 //Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory.
1342 int UtcDaliVisualFactoryGetMeshVisual2(void)
1343 {
1344   //Set up test application first, so everything else can be handled.
1345   ToolkitTestApplication application;
1346
1347   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual2:  Request mesh visual with blank material file and images directory" );
1348
1349   //Set up visual properties.
1350   Property::Map propertyMap;
1351   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1352   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1353   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, "" );
1354   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, "" );
1355
1356   //Test to see if mesh loads correctly.
1357   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1358
1359   END_TEST;
1360 }
1361
1362 //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
1363 int UtcDaliVisualFactoryGetMeshVisual3b(void)
1364 {
1365   //Set up test application first, so everything else can be handled.
1366   ToolkitTestApplication application;
1367
1368   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual3:  Request mesh visual with all parameters correct" );
1369
1370   //Set up visual properties.
1371   Property::Map propertyMap;
1372   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1373   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1374   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1375   propertyMap.Insert( MeshVisual::Property::USE_MIPMAPPING, Color::GREEN ); // Test that wrong property types don't prevent the object load
1376   propertyMap.Insert( MeshVisual::Property::USE_SOFT_NORMALS, 1.0f );
1377   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, 1.0f );
1378   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1379
1380   //Test to see if mesh loads correctly.
1381   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1382
1383   END_TEST;
1384 }
1385
1386 //Test if mesh loads correctly when supplied with all main parameters, an object file, a material file and a directory location.
1387 int UtcDaliVisualFactoryGetMeshVisual3(void)
1388 {
1389   //Set up test application first, so everything else can be handled.
1390   ToolkitTestApplication application;
1391
1392   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual3:  Request mesh visual with all parameters correct" );
1393
1394   //Set up visual properties.
1395   Property::Map propertyMap;
1396   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1397   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1398   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1399   propertyMap.Insert( MeshVisual::Property::USE_MIPMAPPING, false );
1400   propertyMap.Insert( MeshVisual::Property::USE_SOFT_NORMALS, false );
1401   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3::XAXIS );
1402   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1403
1404   //Test to see if mesh loads correctly.
1405   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1406
1407   END_TEST;
1408 }
1409
1410 //Test if mesh visual can load a correctly supplied mesh without a normal map or gloss map in the material file.
1411 int UtcDaliVisualFactoryGetMeshVisual4(void)
1412 {
1413   //Set up test application first, so everything else can be handled.
1414   ToolkitTestApplication application;
1415
1416   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual4:  Request mesh visual with diffuse texture but not normal or gloss." );
1417
1418
1419   //Set up visual properties.
1420   Property::Map propertyMap;
1421   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1422   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1423   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_SIMPLE_MTL_FILE_NAME );
1424   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1425
1426   //Test to see if mesh loads correctly.
1427   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1428
1429   END_TEST;
1430 }
1431
1432 //Test if mesh visual can load when made to use diffuse textures only.
1433 int UtcDaliVisualFactoryGetMeshVisual5(void)
1434 {
1435   //Set up test application first, so everything else can be handled.
1436   ToolkitTestApplication application;
1437
1438   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual5:  Request mesh visual and make it only use diffuse textures." );
1439
1440   //Set up visual properties.
1441   Property::Map propertyMap;
1442   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1443   propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
1444   propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
1445   propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
1446   propertyMap.Insert( "useMipmapping", false );
1447   propertyMap.Insert( "useSoftNormals", false );
1448   propertyMap.Insert( "lightPosition", Vector3::ZAXIS );
1449   propertyMap.Insert( "shadingMode", MeshVisual::ShadingMode::TEXTURED_WITH_SPECULAR_LIGHTING );
1450
1451   //Test to see if mesh loads correctly.
1452   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1453
1454
1455   END_TEST;
1456 }
1457
1458 //Test if mesh visual can load when made to not use the supplied textures.
1459 int UtcDaliVisualFactoryGetMeshVisual6(void)
1460 {
1461   //Set up test application first, so everything else can be handled.
1462   ToolkitTestApplication application;
1463
1464   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual6:  Request mesh visual and make it not use any textures." );
1465
1466   //Set up visual properties.
1467   Property::Map propertyMap;
1468   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1469   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1470   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1471   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1472   propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
1473
1474   //Test to see if mesh loads correctly.
1475   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1476
1477   END_TEST;
1478 }
1479 //Test if mesh visual loads correctly when light position is manually set.
1480 int UtcDaliVisualFactoryGetMeshVisual7(void)
1481 {
1482   //Set up test application first, so everything else can be handled.
1483   ToolkitTestApplication application;
1484
1485
1486   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual7:  Request mesh visual with custom light position." );
1487
1488   //Set up visual properties.
1489   Property::Map propertyMap;
1490   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1491   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1492   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1493   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1494   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.0, 1.0, 2.0 ) );
1495
1496   //Test to see if mesh loads correctly.
1497   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1498
1499   END_TEST;
1500 }
1501
1502 //Test if mesh visual loads correctly when supplied an object file without face normals or texture points.
1503 //Note that this notably tests object loader functionality.
1504 int UtcDaliVisualFactoryGetMeshVisual8(void)
1505 {
1506   //Set up test application first, so everything else can be handled.
1507   ToolkitTestApplication application;
1508
1509   tet_infoline( "UtcDaliVisualFactoryGetMeshVisual5:  Request mesh visual with normal-less object file." );
1510
1511   //Set up visual properties.
1512   Property::Map propertyMap;
1513   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1514   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_SIMPLE_OBJ_FILE_NAME );
1515   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1516   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1517
1518   //Test to see if mesh loads correctly.
1519   MeshVisualLoadsCorrectlyTest( propertyMap, application );
1520
1521   END_TEST;
1522 }
1523
1524 //Test if mesh visual handles the case of lacking an object file.
1525 int UtcDaliVisualFactoryGetMeshVisualN1(void)
1526 {
1527   //Set up test application first, so everything else can be handled.
1528   ToolkitTestApplication application;
1529
1530   tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN1:  Request mesh visual without object file" );
1531
1532   //Set up visual properties.
1533   Property::Map propertyMap;
1534   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1535   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1536   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1537
1538   //Test to see if mesh doesn't load with these properties, as expected.
1539   MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
1540
1541
1542   END_TEST;
1543 }
1544
1545 //Test if mesh visual handles the case of being passed invalid material and images urls.
1546 int UtcDaliVisualFactoryGetMeshVisualN2(void)
1547 {
1548   //Set up test application first, so everything else can be handled.
1549   ToolkitTestApplication application;
1550
1551   tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN2:  Request mesh visual with invalid material and images urls" );
1552
1553   //Set up visual properties.
1554   Property::Map propertyMap;
1555   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1556   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
1557   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, "invalid" );
1558   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, "also invalid" );
1559
1560   //Test to see if mesh doesn't load with these properties, as expected.
1561   MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
1562
1563
1564   END_TEST;
1565 }
1566
1567 //Test if mesh visual handles the case of being passed an invalid object url
1568 int UtcDaliVisualFactoryGetMeshVisualN3(void)
1569 {
1570   //Set up test application first, so everything else can be handled.
1571   ToolkitTestApplication application;
1572   tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN3:  Request mesh visual with invalid object url" );
1573
1574
1575   //Set up visual properties.
1576   Property::Map propertyMap;
1577   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::MESH );
1578   propertyMap.Insert( MeshVisual::Property::OBJECT_URL, "invalid" );
1579   propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
1580   propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
1581
1582   //Test to see if mesh doesn't load with these properties, as expected.
1583   MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
1584
1585   END_TEST;
1586 }
1587
1588 //Creates a primitive visual with the given property map and tests to see if it correctly loads in the given application.
1589 void TestPrimitiveVisualWithProperties( Property::Map& propertyMap, ToolkitTestApplication& application )
1590 {
1591   VisualFactory factory = VisualFactory::Get();
1592   DALI_TEST_CHECK( factory );
1593
1594   //Create a primitive visual.
1595   Visual::Base visual = factory.CreateVisual( propertyMap );
1596   DALI_TEST_CHECK( visual );
1597
1598   //Create an actor on stage to house the visual.
1599   DummyControl actor = DummyControl::New(true);
1600   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
1601   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
1602
1603   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
1604   Stage::GetCurrent().Add( actor );
1605   visual.SetTransformAndSize(DefaultTransform(),  Vector2( 200.f, 200.f ) );
1606
1607   //Ensure set on stage.
1608   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
1609
1610   //Tell test application to load the visual.
1611   application.SendNotification();
1612   application.Render(0);
1613
1614   Matrix testScaleMatrix;
1615   testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
1616   Matrix actualScaleMatrix;
1617
1618   //Test to see if the object has been successfully loaded.
1619   DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
1620   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
1621
1622   //Finish by setting off stage, and ensuring this was successful.
1623   actor.Unparent();
1624   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
1625 }
1626
1627 //Test if primitive shape loads correctly when supplied with only the bare minimum requirements, the shape to use.
1628 int UtcDaliVisualFactoryGetPrimitiveVisual1(void)
1629 {
1630   //Set up test application first, so everything else can be handled.
1631   ToolkitTestApplication application;
1632
1633   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual1:  Request primitive visual with a shape only" );
1634
1635   //Set up visual properties.
1636   Property::Map propertyMap;
1637   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1638   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1639
1640   //Test to see if shape loads correctly.
1641   TestPrimitiveVisualWithProperties( propertyMap, application );
1642
1643   END_TEST;
1644 }
1645
1646 //Test if primitive shape loads correctly when supplied with all possible parameters
1647 int UtcDaliVisualFactoryGetPrimitiveVisual2(void)
1648 {
1649   //Set up test application first, so everything else can be handled.
1650   ToolkitTestApplication application;
1651
1652   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual2:  Request primitive visual with everything" );
1653
1654   //Set up visual properties.
1655   Property::Map propertyMap;
1656   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1657   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
1658   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1659   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1660   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1661   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1662   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1663   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1664   propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
1665   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.7f );
1666   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.8f );
1667   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.9, 1.0, 1.1 ) );
1668
1669   //Test to see if shape loads correctly.
1670   TestPrimitiveVisualWithProperties( propertyMap, application );
1671
1672   END_TEST;
1673 }
1674
1675 //Test if primitive shape loads a sphere correctly.
1676 int UtcDaliVisualFactoryGetPrimitiveVisual3(void)
1677 {
1678   //Set up test application first, so everything else can be handled.
1679   ToolkitTestApplication application;
1680
1681   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual3:  Request primitive visual to display a sphere" );
1682
1683   //Set up visual properties.
1684   Property::Map propertyMap;
1685   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1686   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1687   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1688   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1689   propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
1690
1691   //Test to see if shape loads correctly.
1692   TestPrimitiveVisualWithProperties( propertyMap, application );
1693
1694   END_TEST;
1695 }
1696
1697 //Test if primitive shape loads a conic section correctly.
1698 int UtcDaliVisualFactoryGetPrimitiveVisual4(void)
1699 {
1700   //Set up test application first, so everything else can be handled.
1701   ToolkitTestApplication application;
1702
1703   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual4:  Request primitive visual to display a conic section" );
1704
1705   //Set up visual properties.
1706   Property::Map propertyMap;
1707   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1708   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONICAL_FRUSTRUM );
1709   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1710   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1711   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1712   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
1713   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1714
1715   //Test to see if shape loads correctly.
1716   TestPrimitiveVisualWithProperties( propertyMap, application );
1717
1718   END_TEST;
1719 }
1720
1721 //Test if primitive shape loads a bevelled cube correctly.
1722 int UtcDaliVisualFactoryGetPrimitiveVisual5(void)
1723 {
1724   //Set up test application first, so everything else can be handled.
1725   ToolkitTestApplication application;
1726
1727   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual5:  Request primitive visual to display a bevelled cube" );
1728
1729   //Set up visual properties.
1730   Property::Map propertyMap;
1731   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1732   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::BEVELLED_CUBE );
1733   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1734   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.7f );
1735
1736   //Test to see if shape loads correctly.
1737   TestPrimitiveVisualWithProperties( propertyMap, application );
1738
1739   END_TEST;
1740 }
1741
1742 //Test if primitive shape loads an octahedron correctly.
1743 int UtcDaliVisualFactoryGetPrimitiveVisual6(void)
1744 {
1745   //Set up test application first, so everything else can be handled.
1746   ToolkitTestApplication application;
1747
1748   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual6:  Request primitive visual to display an octahedron" );
1749
1750   //Set up visual properties.
1751   Property::Map propertyMap;
1752   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1753   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::OCTAHEDRON );
1754   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1755
1756   //Test to see if shape loads correctly.
1757   TestPrimitiveVisualWithProperties( propertyMap, application );
1758
1759   END_TEST;
1760 }
1761
1762 //Test if primitive shape loads a cone correctly.
1763 int UtcDaliVisualFactoryGetPrimitiveVisual7(void)
1764 {
1765   //Set up test application first, so everything else can be handled.
1766   ToolkitTestApplication application;
1767
1768   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual7:  Request primitive visual to display a cone" );
1769
1770   //Set up visual properties.
1771   Property::Map propertyMap;
1772   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1773   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONE );
1774   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1775   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
1776   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
1777   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
1778
1779   //Test to see if shape loads correctly.
1780   TestPrimitiveVisualWithProperties( propertyMap, application );
1781
1782   END_TEST;
1783 }
1784
1785 //Test if primitive shape loads correctly when light position is manually set.
1786 int UtcDaliVisualFactoryGetPrimitiveVisual8(void)
1787 {
1788   //Set up test application first, so everything else can be handled.
1789   ToolkitTestApplication application;
1790
1791   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual8:  Request primitive visual with set light position" );
1792
1793   //Set up visual properties.
1794   Property::Map propertyMap;
1795   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1796   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1797   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1798   propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.0, 1.0, 2.0 ) );
1799
1800   //Test to see if shape loads correctly.
1801   TestPrimitiveVisualWithProperties( propertyMap, application );
1802
1803   END_TEST;
1804 }
1805
1806 //Test if primitive shape loads correctly when told to use too many slices.
1807 int UtcDaliVisualFactoryGetPrimitiveVisual9(void)
1808 {
1809   //Set up test application first, so everything else can be handled.
1810   ToolkitTestApplication application;
1811
1812   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual9:  Request primitive visual with above-cap slices." );
1813
1814   //Set up visual properties.
1815   Property::Map propertyMap;
1816   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1817   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1818   propertyMap.Insert( PrimitiveVisual::Property::SLICES, Property::Value( 1000000 ) );
1819
1820   //Test to see if shape loads correctly.
1821   TestPrimitiveVisualWithProperties( propertyMap, application );
1822
1823   END_TEST;
1824 }
1825
1826 //Test if primitive shape loads correctly when told to use too few slices. (2 slices or less.)
1827 int UtcDaliVisualFactoryGetPrimitiveVisual10(void)
1828 {
1829   //Set up test application first, so everything else can be handled.
1830   ToolkitTestApplication application;
1831
1832   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual10:  Request primitive visual with too few slices." );
1833
1834   //Set up visual properties.
1835   Property::Map propertyMap;
1836   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1837   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1838   propertyMap.Insert( PrimitiveVisual::Property::SLICES, Property::Value( 2 ) );
1839
1840   //Test to see if shape loads correctly.
1841   TestPrimitiveVisualWithProperties( propertyMap, application );
1842
1843   END_TEST;
1844 }
1845
1846 //Test if primitive shape loads correctly when told to use too many stacks.
1847 int UtcDaliVisualFactoryGetPrimitiveVisual11(void)
1848 {
1849   //Set up test application first, so everything else can be handled.
1850   ToolkitTestApplication application;
1851
1852   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual11:  Request primitive visual with too many stacks." );
1853
1854   //Set up visual properties.
1855   Property::Map propertyMap;
1856   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1857   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1858   propertyMap.Insert( PrimitiveVisual::Property::STACKS, Property::Value( 1000000 ) );
1859
1860   //Test to see if shape loads correctly.
1861   TestPrimitiveVisualWithProperties( propertyMap, application );
1862
1863   END_TEST;
1864 }
1865
1866 //Test if primitive shape loads correctly when told to use too few stacks. (1 stack or less.)
1867 int UtcDaliVisualFactoryGetPrimitiveVisual12(void)
1868 {
1869   //Set up test application first, so everything else can be handled.
1870   ToolkitTestApplication application;
1871
1872   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual12:  Request primitive visual with too few stacks." );
1873
1874   //Set up visual properties.
1875   Property::Map propertyMap;
1876   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1877   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1878   propertyMap.Insert( PrimitiveVisual::Property::STACKS, Property::Value( 1 ) );
1879
1880   //Test to see if shape loads correctly.
1881   TestPrimitiveVisualWithProperties( propertyMap, application );
1882
1883   END_TEST;
1884 }
1885
1886 //Test if primitive shape loads correctly when told to use invalid (zero or negative) dimensions.
1887 int UtcDaliVisualFactoryGetPrimitiveVisual13(void)
1888 {
1889   //Set up test application first, so everything else can be handled.
1890   ToolkitTestApplication application;
1891
1892   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual13:  Request primitive visual with invalid scale dimensions." );
1893
1894   //Set up visual properties.
1895   Property::Map propertyMap;
1896   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1897   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1898   propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, Vector3::ZERO );
1899
1900   //Test to see if shape loads correctly.
1901   TestPrimitiveVisualWithProperties( propertyMap, application );
1902
1903   END_TEST;
1904 }
1905
1906 //Test if primitive shape loads correctly when told to use too low a bevel percentage.
1907 int UtcDaliVisualFactoryGetPrimitiveVisual14(void)
1908 {
1909   //Set up test application first, so everything else can be handled.
1910   ToolkitTestApplication application;
1911
1912   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual14:  Request primitive visual with too low a bevel percentage." );
1913
1914   //Set up visual properties.
1915   Property::Map propertyMap;
1916   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1917   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1918   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::Value( -1.0f ) );
1919
1920   //Test to see if shape loads correctly.
1921   TestPrimitiveVisualWithProperties( propertyMap, application );
1922
1923   END_TEST;
1924 }
1925
1926 //Test if primitive shape loads correctly when told to use too high a bevel percentage.
1927 int UtcDaliVisualFactoryGetPrimitiveVisual15(void)
1928 {
1929   //Set up test application first, so everything else can be handled.
1930   ToolkitTestApplication application;
1931
1932   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual15:  Request primitive visual with too high a bevel percentage." );
1933
1934   //Set up visual properties.
1935   Property::Map propertyMap;
1936   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1937   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1938   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::Value( 2.0f ) );
1939
1940   //Test to see if shape loads correctly.
1941   TestPrimitiveVisualWithProperties( propertyMap, application );
1942
1943   END_TEST;
1944 }
1945
1946 //Test if primitive shape loads correctly when told to use too low a bevel smoothness.
1947 int UtcDaliVisualFactoryGetPrimitiveVisual16(void)
1948 {
1949   //Set up test application first, so everything else can be handled.
1950   ToolkitTestApplication application;
1951
1952   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual16:  Request primitive visual with too low a bevel smoothness." );
1953
1954   //Set up visual properties.
1955   Property::Map propertyMap;
1956   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1957   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1958   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::Value( -1.0f ) );
1959
1960   //Test to see if shape loads correctly.
1961   TestPrimitiveVisualWithProperties( propertyMap, application );
1962
1963   END_TEST;
1964 }
1965
1966 //Test if primitive shape loads correctly when told to use too high a bevel smoothness.
1967 int UtcDaliVisualFactoryGetPrimitiveVisual17(void)
1968 {
1969   //Set up test application first, so everything else can be handled.
1970   ToolkitTestApplication application;
1971
1972   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual17:  Request primitive visual with too high a bevel smoothness." );
1973
1974   //Set up visual properties.
1975   Property::Map propertyMap;
1976   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1977   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
1978   propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::Value( 2.0f ) );
1979
1980   //Test to see if shape loads correctly.
1981   TestPrimitiveVisualWithProperties( propertyMap, application );
1982
1983   END_TEST;
1984 }
1985
1986 //Test if primitive shape loads a conic section correctly.
1987 int UtcDaliVisualFactoryGetPrimitiveVisual18(void)
1988 {
1989   //Set up test application first, so everything else can be handled.
1990   ToolkitTestApplication application;
1991
1992   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual18:  Request primitive visual to display a conic section" );
1993
1994   //Set up visual properties.
1995   Property::Map propertyMap;
1996   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
1997   propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONICAL_FRUSTUM );
1998   propertyMap.Insert( PrimitiveVisual::Property::MIX_COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
1999   propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
2000   propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
2001   propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
2002   propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
2003
2004   //Test to see if shape loads correctly.
2005   TestPrimitiveVisualWithProperties( propertyMap, application );
2006
2007   END_TEST;
2008 }
2009
2010 //Test if primitive shape visual handles the case of not being passed a specific shape to use.
2011 int UtcDaliVisualFactoryGetPrimitiveVisualN1(void)
2012 {
2013   //Set up test application first, so everything else can be handled.
2014   ToolkitTestApplication application;
2015
2016   tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisualN1:  Request primitive visual without shape" );
2017
2018   //Set up visual properties, without supplying shape.
2019   Property::Map propertyMap;
2020   propertyMap.Insert( Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE );
2021
2022   //Test to see if shape loads regardless of missing input.
2023   TestPrimitiveVisualWithProperties( propertyMap, application );
2024
2025   END_TEST;
2026 }
2027
2028 int UtcDaliVisualFactoryGetAnimatedImageVisual1(void)
2029 {
2030   ToolkitTestApplication application;
2031   tet_infoline( "UtcDaliVisualFactoryGetAnimatedImageVisual1: Request animated image visual with a gif url" );
2032
2033   TestGlAbstraction& gl = application.GetGlAbstraction();
2034   TraceCallStack& textureTrace = gl.GetTextureTrace();
2035   textureTrace.Enable(true);
2036
2037   VisualFactory factory = VisualFactory::Get();
2038   Visual::Base visual = factory.CreateVisual( TEST_GIF_FILE_NAME, ImageDimensions() );
2039   DALI_TEST_CHECK( visual );
2040
2041   DummyControl actor = DummyControl::New(true);
2042   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
2043   dummyImpl.RegisterVisual( DummyControl::Property::TEST_VISUAL, visual );
2044   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
2045   Stage::GetCurrent().Add( actor );
2046
2047   application.SendNotification();
2048   application.Render();
2049
2050   // renderer is added to actor
2051   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
2052   Renderer renderer = actor.GetRendererAt( 0u );
2053   DALI_TEST_CHECK( renderer );
2054
2055   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2056   textureTrace.Reset();
2057
2058   // Force the timer used by the animatedImageVisual to tick,
2059   Dali::Timer timer = Timer::New( 0 );
2060   timer.MockEmitSignal();
2061   application.SendNotification();
2062   application.Render();
2063   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2064   textureTrace.Reset();
2065
2066
2067   // Force the timer used by the animatedImageVisual to tick,
2068   timer.MockEmitSignal();
2069   application.SendNotification();
2070   application.Render();
2071   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2072   textureTrace.Reset();
2073
2074   // Force the timer used by the animatedImageVisual to tick,
2075   timer.MockEmitSignal();
2076   application.SendNotification();
2077   application.Render();
2078   DALI_TEST_EQUALS( textureTrace.FindMethod("GenTextures"), true, TEST_LOCATION );
2079   textureTrace.Reset();
2080
2081   // Test SetOffStage().
2082   actor.Unparent();
2083   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
2084
2085   END_TEST;
2086 }
2087
2088 int UtcDaliVisualFactoryGetAnimatedImageVisual2(void)
2089 {
2090   ToolkitTestApplication application;
2091   tet_infoline( "UtcDaliVisualFactoryGetAnimatedImageVisual2: Request animated image visual with a Property::Map, test custom wrap mode and pixel area" );
2092
2093   const Vector4 pixelArea(-0.5f, -0.5f, 2.f, 2.f);
2094   Property::Map propertyMap;
2095   propertyMap.Add( Toolkit::Visual::Property::TYPE,  Visual::IMAGE  )
2096              .Add( ImageVisual::Property::URL, TEST_GIF_FILE_NAME  )
2097              .Add( ImageVisual::Property::PIXEL_AREA, pixelArea )
2098              .Add( ImageVisual::Property::WRAP_MODE_U, WrapMode::MIRRORED_REPEAT )
2099              .Add( ImageVisual::Property::WRAP_MODE_V, WrapMode::REPEAT );
2100
2101   Visual::Base visual = VisualFactory::Get().CreateVisual( propertyMap );
2102   DALI_TEST_CHECK( visual );
2103
2104   TestGlAbstraction& gl = application.GetGlAbstraction();
2105   TraceCallStack& textureTrace = gl.GetTextureTrace();
2106   textureTrace.Enable(true);
2107   TraceCallStack& texParameterTrace = gl.GetTexParameterTrace();
2108   texParameterTrace.Enable( true );
2109
2110   DummyControl actor = DummyControl::New(true);
2111   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(actor.GetImplementation());
2112   dummyImpl.RegisterVisual( Control::CONTROL_PROPERTY_END_INDEX + 1, visual );
2113   actor.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
2114   Stage::GetCurrent().Add( actor );
2115
2116   application.SendNotification();
2117   application.Render();
2118
2119   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
2120
2121   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
2122
2123   // For animated image visual, the wrapping is handled manually in shader, so the following gl function should not be called
2124   std::stringstream out;
2125   out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_S << ", " << GL_MIRRORED_REPEAT;
2126   DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
2127   out.str("");
2128   out << GL_TEXTURE_2D << ", " << GL_TEXTURE_WRAP_T << ", " << GL_REPEAT;
2129   DALI_TEST_CHECK( !texParameterTrace.FindMethodAndParams("TexParameteri", out.str()) );
2130
2131   // test the uniforms which used to handle the wrap mode
2132   Renderer renderer = actor.GetRendererAt( 0u );
2133   DALI_TEST_CHECK( renderer );
2134
2135   Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) );
2136   DALI_TEST_EQUALS( pixelAreaValue.Get<Vector4>(), pixelArea, TEST_LOCATION );
2137   Vector4 pixelAreaUniform;
2138   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "pixelArea", pixelAreaUniform ) );
2139   DALI_TEST_EQUALS( pixelArea, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2140
2141   Property::Value wrapModeValue = renderer.GetProperty( renderer.GetPropertyIndex( "wrapMode" ) );
2142   Vector2 wrapMode( WrapMode::MIRRORED_REPEAT-1, WrapMode::REPEAT-1 );
2143   DALI_TEST_EQUALS( wrapModeValue.Get<Vector2>(), wrapMode, TEST_LOCATION );
2144   Vector2 wrapModeUniform;
2145   DALI_TEST_CHECK( gl.GetUniformValue<Vector2>( "wrapMode", wrapModeUniform ) );
2146   DALI_TEST_EQUALS( wrapMode, wrapModeUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION );
2147
2148   actor.Unparent( );
2149   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
2150
2151   END_TEST;
2152 }