Initial implemention NPatchRenderer only for 9 patch case.
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-RendererFactory.cpp
1 /*
2  * Copyright (c) 2015 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 <dali/devel-api/rendering/renderer.h>
21 #include <dali/devel-api/rendering/material.h>
22 #include <dali/devel-api/rendering/shader.h>
23 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27
28 namespace
29 {
30 const char* TEST_IMAGE_FILE_NAME =  "gallery_image_01.jpg";
31 const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
32
33 Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat )
34 {
35   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
36   Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
37   unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
38
39   memset( pixbuffer, initialColor, imageHeight * imageWidth * bytesPerPixel );
40
41   return bitmap;
42 }
43
44 void InitialiseRegionsToZeroAlpha( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
45 {
46   PixelBuffer* pixbuffer = image->GetBuffer();
47   unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
48
49   for( unsigned int row = 0; row < imageWidth; ++row )
50   {
51     unsigned int pixelOffset = row * bytesPerPixel;
52     pixbuffer[ pixelOffset + 3 ] = 0x00;
53     pixelOffset += ( imageHeight - 1 ) * imageWidth * bytesPerPixel;
54     pixbuffer[ pixelOffset + 3 ] = 0x00;
55   }
56
57   for ( unsigned int column = 0; column < imageHeight; ++column )
58   {
59     unsigned int pixelOffset = column * imageWidth * bytesPerPixel;
60     pixbuffer[ pixelOffset + 3 ] = 0x00;
61     pixelOffset += ( imageWidth -1 ) * bytesPerPixel;
62     pixbuffer[ pixelOffset + 3 ] = 0x00;
63   }
64 }
65
66 void AddStretchRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredStretchBorder, Pixel::Format pixelFormat )
67 {
68   PixelBuffer* pixbuffer = image->GetBuffer();
69   unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
70
71   for( unsigned int column = requiredStretchBorder.x; column < imageWidth - requiredStretchBorder.z; ++column )
72   {
73     unsigned int pixelOffset = column * bytesPerPixel;
74     pixbuffer[ pixelOffset ] = 0x00;
75     pixbuffer[ pixelOffset + 1 ] = 0x00;
76     pixbuffer[ pixelOffset + 2 ] = 0x00;
77     pixbuffer[ pixelOffset + 3 ] = 0xFF;
78   }
79
80   for( unsigned int row = requiredStretchBorder.y; row < imageHeight - requiredStretchBorder.w; ++row )
81   {
82     unsigned int pixelOffset = row * imageWidth * bytesPerPixel;
83     pixbuffer[ pixelOffset ] = 0x00;
84     pixbuffer[ pixelOffset + 1 ] = 0x00;
85     pixbuffer[ pixelOffset + 2 ] = 0x00;
86     pixbuffer[ pixelOffset + 3 ] = 0xFF;
87   }
88 }
89
90 void AddChildRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredChildRegion, Pixel::Format pixelFormat )
91 {
92   PixelBuffer* pixbuffer = image->GetBuffer();
93   unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
94
95   Integration::Bitmap::PackedPixelsProfile* srcProfile = image->GetPackedPixelsProfile();
96   unsigned int bufferStride = srcProfile->GetBufferStride();
97
98   // Add bottom child region
99   for( unsigned int column = requiredChildRegion.x; column < imageWidth - requiredChildRegion.z; ++column )
100   {
101     unsigned int pixelOffset = column * bytesPerPixel;
102     pixelOffset += ( imageHeight - 1 ) * bufferStride;
103     pixbuffer[ pixelOffset ] = 0x00;
104     pixbuffer[ pixelOffset + 1 ] = 0x00;
105     pixbuffer[ pixelOffset + 2 ] = 0x00;
106     pixbuffer[ pixelOffset + 3 ] = 0xFF;
107   }
108
109   // Add right child region
110   for ( unsigned int row = requiredChildRegion.y; row < imageHeight - requiredChildRegion.w; ++row )
111   {
112     unsigned int pixelOffset = row * bufferStride + ( imageWidth - 1 ) * bytesPerPixel;
113     pixbuffer[ pixelOffset ] = 0x00;
114     pixbuffer[ pixelOffset + 1 ] = 0x00;
115     pixbuffer[ pixelOffset + 2 ] = 0x00;
116     pixbuffer[ pixelOffset + 3 ] = 0xFF;
117   }
118 }
119
120 Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
121                                                  unsigned int ninePatchImageWidth,
122                                                  unsigned int ninePatchImageHeight,
123                                                  const Vector4& requiredStretchBorder,
124                                                  bool addChildRegion = false,
125                                                  Vector4 requiredChildRegion = Vector4::ZERO )
126 {
127   TestPlatformAbstraction& platform = application.GetPlatform();
128
129   Pixel::Format pixelFormat = Pixel::RGBA8888;
130
131   tet_infoline("Create Bitmap");
132   platform.SetClosestImageSize(Vector2( ninePatchImageWidth, ninePatchImageHeight));
133   Integration::Bitmap* bitmap = CreateBitmap( ninePatchImageWidth, ninePatchImageHeight, 0xFF, pixelFormat );
134
135   tet_infoline("Clear border regions");
136   InitialiseRegionsToZeroAlpha( bitmap, ninePatchImageWidth, ninePatchImageHeight, pixelFormat );
137
138   tet_infoline("Add Stretch regions to Bitmap");
139   AddStretchRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder, pixelFormat );
140
141   if( addChildRegion )
142   {
143     tet_infoline("Add Child regions to Bitmap");
144     AddChildRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredChildRegion, pixelFormat );
145   }
146
147   tet_infoline("Getting resource");
148   Integration::ResourcePointer resourcePtr(bitmap);
149   platform.SetResourceLoaded( 0, Dali::Integration::ResourceBitmap, resourcePtr );
150
151   return resourcePtr;
152 }
153
154 } // namespace
155
156
157 void dali_renderer_factory_startup(void)
158 {
159   test_return_value = TET_UNDEF;
160 }
161
162 void dali_renderer_factory_cleanup(void)
163 {
164   test_return_value = TET_PASS;
165 }
166
167 int UtcDaliRendererFactoryGet(void)
168 {
169   ToolkitTestApplication application;
170   tet_infoline( "UtcDaliRendererFactory" );
171
172   //Register type
173   TypeInfo type;
174   type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
175   DALI_TEST_CHECK( type );
176   BaseHandle handle = type.CreateInstance();
177   DALI_TEST_CHECK( handle );
178
179   RendererFactory factory;
180   factory = RendererFactory::Get();
181   DALI_TEST_CHECK( factory );
182
183   RendererFactory newFactory = RendererFactory::Get();
184   DALI_TEST_CHECK( newFactory );
185
186   // Check that renderer factory is a singleton
187   DALI_TEST_CHECK(factory == newFactory);
188
189   END_TEST;
190 }
191
192 int UtcDaliRendererFactoryCopyAndAssignment(void)
193 {
194   ToolkitTestApplication application;
195   tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
196   RendererFactory factory = RendererFactory::Get();
197
198   RendererFactory factoryCopy( factory );
199   DALI_TEST_CHECK(factory == factoryCopy);
200
201   RendererFactory emptyFactory;
202   RendererFactory emptyFactoryCopy( emptyFactory );
203   DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
204
205   RendererFactory factoryEquals;
206   factoryEquals = factory;
207   DALI_TEST_CHECK(factory == factoryEquals);
208
209   RendererFactory emptyFactoryEquals;
210   emptyFactoryEquals = emptyFactory;
211   DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
212
213   //self assignment
214   factory = factory;
215   DALI_TEST_CHECK( factory = factoryCopy );
216
217   END_TEST;
218 }
219
220 int UtcDaliRendererFactoryGetColorRenderer1(void)
221 {
222   ToolkitTestApplication application;
223   tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1:  Request color renderer with a Property::Map" );
224
225   RendererFactory factory = RendererFactory::Get();
226   DALI_TEST_CHECK( factory );
227
228   Property::Map propertyMap;
229   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
230   propertyMap.Insert("renderer-type", "color-renderer");
231   propertyMap.Insert("blend-color", testColor);
232
233   ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
234   DALI_TEST_CHECK( controlRenderer );
235
236   Actor actor = Actor::New();
237   actor.SetSize(200.f, 200.f);
238   Stage::GetCurrent().Add( actor );
239   controlRenderer.SetSize(Vector2(200.f, 200.f));
240   controlRenderer.SetOnStage( actor );
241
242   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
243
244   TestGlAbstraction& gl = application.GetGlAbstraction();
245
246   application.SendNotification();
247   application.Render(0);
248
249   Vector4 actualValue(Vector4::ZERO);
250   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
251   DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
252
253   END_TEST;
254 }
255
256 int UtcDaliRendererFactoryGetColorRenderer2(void)
257 {
258   ToolkitTestApplication application;
259   tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
260
261   RendererFactory factory = RendererFactory::Get();
262   DALI_TEST_CHECK( factory );
263
264   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
265   ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
266   DALI_TEST_CHECK( controlRenderer );
267
268   Actor actor = Actor::New();
269   actor.SetSize(200.f, 200.f);
270   Stage::GetCurrent().Add( actor );
271   controlRenderer.SetSize(Vector2(200.f, 200.f));
272   controlRenderer.SetOnStage( actor );
273
274   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
275
276   TestGlAbstraction& gl = application.GetGlAbstraction();
277
278   application.SendNotification();
279   application.Render(0);
280
281   Vector4 actualValue(Vector4::ZERO);
282   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
283   DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
284
285   END_TEST;
286 }
287
288 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
289 {
290   ToolkitTestApplication application;
291   tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
292
293   RendererFactory factory = RendererFactory::Get();
294   DALI_TEST_CHECK( factory );
295
296   Property::Map propertyMap;
297   propertyMap.Insert("renderer-type", "gradient-renderer");
298
299   Vector2 start(-1.f, -1.f);
300   Vector2 end(1.f, 1.f);
301   propertyMap.Insert("gradient-start-position", start);
302   propertyMap.Insert("gradient-end-position", end);
303   propertyMap.Insert("gradient-spread-method", "repeat");
304
305   Property::Array stopOffsets;
306   stopOffsets.PushBack( 0.2f );
307   stopOffsets.PushBack( 0.8f );
308   propertyMap.Insert("gradient-stop-offset", stopOffsets);
309
310   Property::Array stopColors;
311   stopColors.PushBack( Color::RED );
312   stopColors.PushBack( Color::GREEN );
313   propertyMap.Insert("gradient-stop-color", stopColors);
314
315   ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
316   DALI_TEST_CHECK( controlRenderer );
317
318   Actor actor = Actor::New();
319   Vector2 size(200.f, 200.f);
320   actor.SetSize(size);
321   Stage::GetCurrent().Add( actor );
322   controlRenderer.SetOnStage( actor );
323   controlRenderer.SetSize(size);
324
325   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
326
327   // A lookup texture is generated and pass to shader as sampler
328   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
329
330   application.SendNotification();
331   application.Render(0);
332
333   END_TEST;
334 }
335
336 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
337 {
338   ToolkitTestApplication application;
339   tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
340
341   RendererFactory factory = RendererFactory::Get();
342   DALI_TEST_CHECK( factory );
343
344   Property::Map propertyMap;
345   propertyMap.Insert("renderer-type", "gradient-renderer");
346
347   Vector2 center(100.f, 100.f);
348   float radius = 100.f;
349   propertyMap.Insert("gradient-units", "user-space");
350   propertyMap.Insert("gradient-center", center);
351   propertyMap.Insert("gradient-radius", radius);
352
353   Property::Array stopOffsets;
354   stopOffsets.PushBack( 0.0f );
355   stopOffsets.PushBack( 1.f );
356   propertyMap.Insert("gradient-stop-offset", stopOffsets);
357
358   Property::Array stopColors;
359   stopColors.PushBack( Color::RED );
360   stopColors.PushBack( Color::GREEN );
361   propertyMap.Insert("gradient-stop-color", stopColors);
362
363   ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
364   DALI_TEST_CHECK( controlRenderer );
365
366   Actor actor = Actor::New();
367   Vector2 size(200.f, 200.f);
368   actor.SetSize(size);
369   Stage::GetCurrent().Add( actor );
370   controlRenderer.SetSize(size);
371   controlRenderer.SetOnStage( actor );
372
373   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
374
375   // A lookup texture is generated and pass to shader as sampler
376   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
377
378   TestGlAbstraction& gl = application.GetGlAbstraction();
379   application.SendNotification();
380   application.Render(0);
381
382   Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
383   alignMatrix.Invert();
384
385   Matrix3 actualValue( Matrix3::IDENTITY );
386   DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
387   DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
388
389   END_TEST;
390 }
391
392 int UtcDaliRendererFactoryGetImageRenderer1(void)
393 {
394   ToolkitTestApplication application;
395   tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
396
397   RendererFactory factory = RendererFactory::Get();
398   DALI_TEST_CHECK( factory );
399
400   Property::Map propertyMap;
401   propertyMap.Insert( "renderer-type", "image-renderer" );
402   propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
403
404   ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
405   DALI_TEST_CHECK( controlRenderer );
406
407   Actor actor = Actor::New();
408   actor.SetSize( 200.f, 200.f );
409   Stage::GetCurrent().Add( actor );
410   controlRenderer.SetSize( Vector2(200.f, 200.f) );
411   controlRenderer.SetOnStage( actor );
412
413   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
414   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
415
416   TestGlAbstraction& gl = application.GetGlAbstraction();
417   application.SendNotification();
418   application.Render();
419
420   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
421   if(request)
422   {
423     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
424   }
425
426   application.Render();
427   application.SendNotification();
428
429   DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
430
431   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
432
433   int textureUnit = -1;
434   DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
435   DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
436
437   END_TEST;
438 }
439
440 int UtcDaliRendererFactoryGetImageRenderer2(void)
441 {
442   ToolkitTestApplication application;
443   tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
444
445   RendererFactory factory = RendererFactory::Get();
446   DALI_TEST_CHECK( factory );
447
448   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
449   ControlRenderer controlRenderer = factory.GetControlRenderer( image );
450
451   Actor actor = Actor::New();
452   actor.SetSize( 200.f, 200.f );
453   Stage::GetCurrent().Add( actor );
454   controlRenderer.SetSize( Vector2(200.f, 200.f) );
455   controlRenderer.SetOnStage( actor );
456
457   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
458   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
459
460   TestGlAbstraction& gl = application.GetGlAbstraction();
461   application.SendNotification();
462   application.Render();
463
464   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
465   if(request)
466   {
467     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
468   }
469
470   application.Render();
471   application.SendNotification();
472
473   DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
474
475   int textureUnit = -1;
476   DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
477   DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
478
479   END_TEST;
480 }
481
482 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
483 {
484   ToolkitTestApplication application;
485   tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request n-patch renderer with a Property::Map" );
486
487   RendererFactory factory = RendererFactory::Get();
488   DALI_TEST_CHECK( factory );
489
490   const unsigned int ninePatchImageHeight = 18;
491   const unsigned int ninePatchImageWidth = 28;
492   const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
493   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
494
495   Property::Map propertyMap;
496   propertyMap.Insert( "renderer-type", "n-patch-renderer" );
497   propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
498
499   ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
500   DALI_TEST_CHECK( controlRenderer );
501
502   Actor actor = Actor::New();
503   actor.SetSize( 200.f, 200.f );
504   Stage::GetCurrent().Add( actor );
505   controlRenderer.SetSize( Vector2(200.f, 200.f) );
506   controlRenderer.SetOnStage( actor );
507
508   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
509   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
510
511   TestGlAbstraction& gl = application.GetGlAbstraction();
512   application.SendNotification();
513   application.Render();
514
515   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
516   if(request)
517   {
518     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
519   }
520
521   application.Render();
522   application.SendNotification();
523
524   DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
525
526   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
527
528   int textureUnit = -1;
529   DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
530   DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
531
532   END_TEST;
533 }
534
535 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
536 {
537   ToolkitTestApplication application;
538   tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with an image url" );
539
540   RendererFactory factory = RendererFactory::Get();
541   DALI_TEST_CHECK( factory );
542
543   const unsigned int ninePatchImageHeight = 18;
544   const unsigned int ninePatchImageWidth = 28;
545   const Vector4 requiredStretchBorder( 3, 4, 5, 6 );
546   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, requiredStretchBorder );
547
548   ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
549   DALI_TEST_CHECK( controlRenderer );
550
551   Actor actor = Actor::New();
552   actor.SetSize( 200.f, 200.f );
553   Stage::GetCurrent().Add( actor );
554   controlRenderer.SetSize( Vector2(200.f, 200.f) );
555   controlRenderer.SetOnStage( actor );
556
557   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
558   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
559
560   TestGlAbstraction& gl = application.GetGlAbstraction();
561   application.SendNotification();
562   application.Render();
563
564   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
565   if(request)
566   {
567     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, ninePatchResource );
568   }
569
570   application.Render();
571   application.SendNotification();
572
573   DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
574
575   int textureUnit = -1;
576   DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
577   DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
578
579   END_TEST;
580 }
581
582 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
583 {
584   //This should still load but display an error image
585
586   ToolkitTestApplication application;
587   tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
588
589   RendererFactory factory = RendererFactory::Get();
590   DALI_TEST_CHECK( factory );
591
592   ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
593   DALI_TEST_CHECK( controlRenderer );
594
595   Actor actor = Actor::New();
596   actor.SetSize( 200.f, 200.f );
597   Stage::GetCurrent().Add( actor );
598   controlRenderer.SetSize( Vector2(200.f, 200.f) );
599   controlRenderer.SetOnStage( actor );
600
601   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
602   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
603
604   TestGlAbstraction& gl = application.GetGlAbstraction();
605   application.SendNotification();
606   application.Render();
607
608   int textureUnit = -1;
609   DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
610   DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
611
612   END_TEST;
613 }
614
615 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
616 {
617   //This should still load but display an error image
618
619   ToolkitTestApplication application;
620   tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
621
622   RendererFactory factory = RendererFactory::Get();
623   DALI_TEST_CHECK( factory );
624
625   Property::Map propertyMap;
626   propertyMap.Insert( "renderer-type", "n-patch-renderer" );
627   propertyMap.Insert( "image-url", 111 );
628
629   ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
630   DALI_TEST_CHECK( controlRenderer );
631
632   Actor actor = Actor::New();
633   actor.SetSize( 200.f, 200.f );
634   Stage::GetCurrent().Add( actor );
635   controlRenderer.SetSize( Vector2(200.f, 200.f) );
636   controlRenderer.SetOnStage( actor );
637
638   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
639   DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == 1u );
640
641   TestGlAbstraction& gl = application.GetGlAbstraction();
642   application.SendNotification();
643   application.Render();
644
645   int textureUnit = -1;
646   DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
647   DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
648
649   END_TEST;
650 }
651
652 int UtcDaliRendererFactoryResetRenderer1(void)
653 {
654   ToolkitTestApplication application;
655   tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
656
657   Actor actor = Actor::New();
658   actor.SetSize(200.f, 200.f);
659   Stage::GetCurrent().Add( actor );
660
661   RendererFactory factory = RendererFactory::Get();
662   DALI_TEST_CHECK( factory );
663
664   ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
665   DALI_TEST_CHECK( controlRenderer );
666   controlRenderer.SetSize(Vector2(200.f, 200.f));
667   controlRenderer.SetOnStage( actor );
668   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
669
670   TestGlAbstraction& gl = application.GetGlAbstraction();
671   application.SendNotification();
672   application.Render(0);
673   Vector4 actualValue(Vector4::ZERO);
674   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
675   DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
676
677   bool isNewRenderer = factory.ResetRenderer( controlRenderer, Color::GREEN );
678   DALI_TEST_CHECK( !isNewRenderer );
679   application.SendNotification();
680   application.Render(0);
681   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
682   DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
683
684   Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
685   isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
686   DALI_TEST_CHECK( isNewRenderer );
687
688   Actor actor2 = Actor::New();
689   actor2.SetSize(200.f, 200.f);
690   Stage::GetCurrent().Add( actor2 );
691   controlRenderer.SetSize(Vector2(200.f, 200.f));
692   controlRenderer.SetOnStage( actor2 );
693   application.SendNotification();
694   application.Render(0);
695   Image samplerImage = actor2.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
696   DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
697
698   END_TEST;
699 }
700
701 int UtcDaliRendererFactoryResetRenderer2(void)
702 {
703   ToolkitTestApplication application;
704   tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
705
706   Actor actor = Actor::New();
707   actor.SetSize(200.f, 200.f);
708   Stage::GetCurrent().Add( actor );
709   RendererFactory factory = RendererFactory::Get();
710   DALI_TEST_CHECK( factory );
711
712   Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
713   ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
714   DALI_TEST_CHECK( controlRenderer );
715   controlRenderer.SetSize(Vector2(200.f, 200.f));
716   controlRenderer.SetOnStage( actor );
717   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
718
719   application.SendNotification();
720   application.Render(0);
721   Image samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
722   DALI_TEST_CHECK( ResourceImage::DownCast( samplerImage ) );
723
724   Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
725   bool isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
726   DALI_TEST_CHECK( !isNewRenderer );
727   application.SendNotification();
728   application.Render(0);
729   samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
730   DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
731
732   isNewRenderer = factory.ResetRenderer( controlRenderer, Color::RED );
733   DALI_TEST_CHECK( isNewRenderer );
734
735   Actor actor2 = Actor::New();
736   actor2.SetSize(200.f, 200.f);
737   Stage::GetCurrent().Add( actor2 );
738   controlRenderer.SetSize(Vector2(200.f, 200.f));
739   controlRenderer.SetOnStage( actor2 );
740   TestGlAbstraction& gl = application.GetGlAbstraction();
741   application.SendNotification();
742   application.Render(0);
743   Vector4 actualValue(Vector4::ZERO);
744   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
745   DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
746
747   END_TEST;
748 }