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