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