Revert "License conversion from Flora to Apache 2.0"
[platform/core/uifw/dali-core.git] / automated-tests / src / dali / utc-Dali-Image.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 <algorithm>
19 #include <stdlib.h>
20 #include <dali/dali.h>
21 #include <dali-test-suite-utils.h>
22 #include <test-native-image.h>
23
24 using namespace Dali;
25
26 void utc_dali_image_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void utc_dali_image_cleanup(void)
32 {
33   test_return_value = TET_PASS;
34 }
35
36 static const char* gTestImageFilename = "icon_wrt.png";
37
38
39 // 1.1
40 int UtcDaliImageNew01(void)
41 {
42   TestApplication application;
43
44   tet_infoline("UtcDaliImageNew01 - Image::New(const std::string&)");
45
46   // invoke default handle constructor
47   Image image;
48
49   DALI_TEST_CHECK( !image );
50
51   // initialise handle
52   image = Image::New(gTestImageFilename);
53
54   DALI_TEST_CHECK( image );
55   END_TEST;
56 }
57
58 // 1.2
59 int UtcDaliImageNew02(void)
60 {
61   TestApplication application;
62
63   tet_infoline("UtcDaliImageNew02 - Image::New(const std::string&, const ImageAttributes&)");
64
65   // invoke default handle constructor
66   Image image;
67
68   DALI_TEST_CHECK( !image );
69
70   // initialise handle
71   Dali::ImageAttributes imageAttributes;
72   imageAttributes.SetSize(128, 256);
73   imageAttributes.SetScalingMode(Dali::ImageAttributes::FitHeight);
74   image = Image::New(gTestImageFilename, imageAttributes);
75
76   DALI_TEST_CHECK( image );
77   END_TEST;
78 }
79
80 // 1.3
81 int UtcDaliImageNew03(void)
82 {
83   TestApplication application;
84
85   tet_infoline("UtcDaliImageNew03 - Image::New(NativeImage&)");
86
87   // invoke default handle constructor
88   Image image;
89   TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
90
91   DALI_TEST_CHECK( !image );
92
93   // initialise handle
94   image = Image::New(*(nativeImage.Get()));
95
96   DALI_TEST_CHECK( image );
97   END_TEST;
98 }
99
100 // 1.4
101 int UtcDaliImageNewWithPolicies01(void)
102 {
103   TestApplication application;
104
105   // testing delayed loading
106   tet_infoline("UtcDaliImageNewWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
107   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
108   Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
109
110   DALI_TEST_CHECK( image );
111
112   application.SendNotification();
113   application.Render(16);
114
115   // request file loading only when actor added to stage
116   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
117
118   ImageActor actor = ImageActor::New(image);
119
120   Stage::GetCurrent().Add(actor);
121
122   application.SendNotification();
123   application.Render(16);
124
125   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
126
127   // testing ReleasePolicy::Never
128   // fake loading image
129   std::vector<GLuint> ids;
130   ids.push_back( 23 );
131   application.GetGlAbstraction().SetNextTextureIds( ids );
132   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
133   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
134   Integration::ResourcePointer resource(bitmap);
135   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
136
137   if(request)
138   {
139     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
140   }
141   application.Render(16);
142   application.SendNotification();
143
144   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
145
146   // never discard texture
147   Stage::GetCurrent().Remove(actor);
148   application.Render(16);
149   application.SendNotification();
150   application.Render(16);
151   application.SendNotification();
152   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
153   END_TEST;
154 }
155
156 // 1.5
157 int UtcDaliImageNewWithPolicies02(void)
158 {
159   TestApplication application;
160
161   // testing resource deletion when taken off stage
162   tet_infoline("UtcDaliImageNewWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
163
164   Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Unused);
165
166   DALI_TEST_CHECK( image );
167
168   application.SendNotification();
169   application.Render(16);
170
171   // request file loading only when actor added to stage
172   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
173
174   ImageActor actor = ImageActor::New(image);
175
176   Stage::GetCurrent().Add(actor);
177
178   application.SendNotification();
179   application.Render(16);
180
181   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
182
183   // testing ReleasePolicy::Unused
184   // fake loading image
185   std::vector<GLuint> ids;
186   ids.push_back( 23 );
187   application.GetGlAbstraction().SetNextTextureIds( ids );
188   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
189   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
190   Integration::ResourcePointer resource(bitmap);
191   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
192
193   if(request)
194   {
195     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
196   }
197   application.Render(16);
198   application.SendNotification();
199
200   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
201
202   // discard texture when actor comes off stage
203   Stage::GetCurrent().Remove(actor);
204   application.Render(16);
205   application.SendNotification();
206   application.Render(16);
207   application.SendNotification();
208   DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
209   END_TEST;
210 }
211
212 // 1.6
213 int UtcDaliImageNewWithPolicies03(void)
214 {
215   TestApplication application;
216
217   // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
218   tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
219
220   Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
221
222   DALI_TEST_CHECK( image );
223
224   application.SendNotification();
225   application.Render(16);
226
227   // request file loading immediately
228   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
229
230   ImageActor actor = ImageActor::New(image);
231
232   Stage::GetCurrent().Add(actor);
233
234   application.SendNotification();
235   application.Render(16);
236
237   // testing ReleasePolicy::Unused
238   // fake loading image
239   std::vector<GLuint> ids;
240   ids.push_back( 23 );
241   application.GetGlAbstraction().SetNextTextureIds( ids );
242   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
243   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
244   Integration::ResourcePointer resource(bitmap);
245   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
246
247   if(request)
248   {
249     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
250   }
251   application.Render(16);
252   application.SendNotification();
253
254   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
255
256   // discard texture when actor comes off stage
257   Stage::GetCurrent().Remove(actor);
258   application.Render(16);
259   application.SendNotification();
260   application.Render(16);
261   application.SendNotification();
262   DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
263
264   // check load request when actor added back to stage
265   application.GetPlatform().ResetTrace();
266
267   Stage::GetCurrent().Add(actor);
268
269   application.SendNotification();
270   application.Render(16);
271   application.SendNotification();
272   application.Render(16);
273
274   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
275   END_TEST;
276 }
277
278 // 1.7
279 int UtcDaliImageNewWithPolicies04(void)
280 {
281   TestApplication application;
282
283   // load immediately, don't release texture when off stage
284   tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
285
286   Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Never);
287
288   DALI_TEST_CHECK( image );
289
290   application.SendNotification();
291   application.Render(16);
292
293   // request file loading immediately
294   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
295
296   ImageActor actor = ImageActor::New(image);
297
298   Stage::GetCurrent().Add(actor);
299
300   application.SendNotification();
301   application.Render(16);
302
303   // testing ReleasePolicy::Never
304   // fake loading image
305   std::vector<GLuint> ids;
306   ids.push_back( 23 );
307   application.GetGlAbstraction().SetNextTextureIds( ids );
308   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
309   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
310   Integration::ResourcePointer resource(bitmap);
311   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
312
313   if(request)
314   {
315     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
316   }
317   application.Render(16);
318   application.SendNotification();
319
320   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
321
322   // texture is not discarded
323   Stage::GetCurrent().Remove(actor);
324   application.Render(16);
325   application.SendNotification();
326   application.Render(16);
327   application.SendNotification();
328   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
329
330   // no load request when actor added back to stage
331   application.GetPlatform().ResetTrace();
332
333   Stage::GetCurrent().Add(actor);
334
335   application.SendNotification();
336   application.Render(16);
337   application.SendNotification();
338   application.Render(16);
339
340   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
341   END_TEST;
342 }
343
344 // 1.8
345 int UtcDaliImageNewDistanceField(void)
346 {
347   TestApplication application;
348
349   tet_infoline("UtcDaliImageNewDistanceField - Image::NewDistanceField(const std::string&)");
350
351   // invoke default handle constructor
352   Image image;
353
354   DALI_TEST_CHECK( !image );
355
356   // initialise handle
357   image = Image::NewDistanceField(gTestImageFilename);
358
359   DALI_TEST_CHECK( image );
360   END_TEST;
361 }
362
363 // 1.9
364 int UtcDaliImageNewDistanceFieldWithPolicies01(void)
365 {
366   TestApplication application;
367
368   // testing delayed loading
369   tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
370   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
371   Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Never);
372
373   DALI_TEST_CHECK( image );
374
375   application.SendNotification();
376   application.Render(16);
377
378   // request file loading only when actor added to stage
379   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
380
381   ImageActor actor = ImageActor::New(image);
382
383   Stage::GetCurrent().Add(actor);
384
385   application.SendNotification();
386   application.Render(16);
387
388   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
389
390   // testing ReleasePolicy::Never
391   // fake loading image
392   std::vector<GLuint> ids;
393   ids.push_back( 23 );
394   application.GetGlAbstraction().SetNextTextureIds( ids );
395   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
396   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
397   Integration::ResourcePointer resource(bitmap);
398   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
399
400   if(request)
401   {
402     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
403   }
404   application.Render(16);
405   application.SendNotification();
406
407   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
408
409   // never discard texture
410   Stage::GetCurrent().Remove(actor);
411   application.Render(16);
412   application.SendNotification();
413   application.Render(16);
414   application.SendNotification();
415   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
416   END_TEST;
417 }
418
419 // 1.10
420 int UtcDaliImageNewDistanceFieldWithPolicies02(void)
421 {
422   TestApplication application;
423
424   // testing resource deletion when taken off stage
425   tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
426
427   Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Unused);
428
429   DALI_TEST_CHECK( image );
430
431   application.SendNotification();
432   application.Render(16);
433
434   // request file loading only when actor added to stage
435   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
436
437   ImageActor actor = ImageActor::New(image);
438
439   Stage::GetCurrent().Add(actor);
440
441   application.SendNotification();
442   application.Render(16);
443
444   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
445
446   // testing ReleasePolicy::Unused
447   // fake loading image
448   std::vector<GLuint> ids;
449   ids.push_back( 23 );
450   application.GetGlAbstraction().SetNextTextureIds( ids );
451   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
452   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
453   Integration::ResourcePointer resource(bitmap);
454   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
455
456   if(request)
457   {
458     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
459   }
460   application.Render(16);
461   application.SendNotification();
462
463   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
464
465   // discard texture when actor comes off stage
466   Stage::GetCurrent().Remove(actor);
467   application.Render(16);
468   application.SendNotification();
469   application.Render(16);
470   application.SendNotification();
471   DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
472   END_TEST;
473 }
474
475 // 1.11
476 int UtcDaliImageNewDistanceFieldWithPolicies03(void)
477 {
478   TestApplication application;
479
480   // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
481   tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
482
483   Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Unused);
484
485   DALI_TEST_CHECK( image );
486
487   application.SendNotification();
488   application.Render(16);
489
490   // request file loading immediately
491   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
492
493   ImageActor actor = ImageActor::New(image);
494
495   Stage::GetCurrent().Add(actor);
496
497   application.SendNotification();
498   application.Render(16);
499
500   // testing ReleasePolicy::Unused
501   // fake loading image
502   std::vector<GLuint> ids;
503   ids.push_back( 23 );
504   application.GetGlAbstraction().SetNextTextureIds( ids );
505   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
506   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
507   Integration::ResourcePointer resource(bitmap);
508   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
509
510   if(request)
511   {
512     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
513   }
514   application.Render(16);
515   application.SendNotification();
516
517   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
518
519   // discard texture when actor comes off stage
520   Stage::GetCurrent().Remove(actor);
521   application.Render(16);
522   application.SendNotification();
523   application.Render(16);
524   application.SendNotification();
525   DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
526
527   // check load request when actor added back to stage
528   application.GetPlatform().ResetTrace();
529
530   Stage::GetCurrent().Add(actor);
531
532   application.SendNotification();
533   application.Render(16);
534   application.SendNotification();
535   application.Render(16);
536
537   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
538   END_TEST;
539 }
540
541 // 1.12
542 int UtcDaliImageNewDistanceFieldWithPolicies04(void)
543 {
544   TestApplication application;
545
546   // load immediately, don't release texture when off stage
547   tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies04 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
548
549   Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Never);
550
551   DALI_TEST_CHECK( image );
552
553   application.SendNotification();
554   application.Render(16);
555
556   // request file loading immediately
557   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
558
559   ImageActor actor = ImageActor::New(image);
560
561   Stage::GetCurrent().Add(actor);
562
563   application.SendNotification();
564   application.Render(16);
565
566   // testing ReleasePolicy::Never
567   // fake loading image
568   std::vector<GLuint> ids;
569   ids.push_back( 23 );
570   application.GetGlAbstraction().SetNextTextureIds( ids );
571   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
572   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
573   Integration::ResourcePointer resource(bitmap);
574   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
575
576   if(request)
577   {
578     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
579   }
580   application.Render(16);
581   application.SendNotification();
582
583   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
584
585   // texture is not discarded
586   Stage::GetCurrent().Remove(actor);
587   application.Render(16);
588   application.SendNotification();
589   application.Render(16);
590   application.SendNotification();
591   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
592
593   // no load request when actor added back to stage
594   application.GetPlatform().ResetTrace();
595
596   Stage::GetCurrent().Add(actor);
597
598   application.SendNotification();
599   application.Render(16);
600   application.SendNotification();
601   application.Render(16);
602
603   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
604   END_TEST;
605 }
606
607 // 1.13
608 int UtcDaliImageNewDistanceFieldWithAttributes(void)
609 {
610   TestApplication application;
611
612   tet_infoline("UtcDaliImageNewDistanceFieldWithAttributes - Image::NewDistanceField(const std::string&, const ImageAttributes& attributes)");
613
614   // invoke default handle constructor
615   Image image;
616   Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
617
618   DALI_TEST_CHECK( !image );
619
620   // initialise handle
621   image = Image::NewDistanceField(gTestImageFilename, imageAttributes);
622
623   DALI_TEST_CHECK( image );
624   END_TEST;
625 }
626
627 // 1.14
628 int UtcDaliImageNewDistanceFieldWithAttrandPol(void)
629 {
630   TestApplication application;
631
632   tet_infoline("UtcDaliImageNewDistanceFieldWithAttrandPol - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
633
634   Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
635
636   Image image = Image::NewDistanceField(gTestImageFilename, imageAttributes, Image::OnDemand, Image::Unused);
637
638   DALI_TEST_CHECK( image );
639
640   application.SendNotification();
641   application.Render(16);
642
643   // request file loading only when actor added to stage
644   DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
645
646   ImageActor actor = ImageActor::New(image);
647
648   Stage::GetCurrent().Add(actor);
649
650   application.SendNotification();
651   application.Render(16);
652
653   DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
654
655   // testing ReleasePolicy::Unused
656   // fake loading image
657   std::vector<GLuint> ids;
658   ids.push_back( 23 );
659   application.GetGlAbstraction().SetNextTextureIds( ids );
660   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
661   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
662   Integration::ResourcePointer resource(bitmap);
663   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
664
665   if(request)
666   {
667     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
668   }
669   application.Render(16);
670   application.SendNotification();
671
672   DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
673
674   // discard texture when actor comes off stage
675   Stage::GetCurrent().Remove(actor);
676   application.Render(16);
677   application.SendNotification();
678   application.Render(16);
679   application.SendNotification();
680   DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
681   END_TEST;
682 }
683
684 // 1.15
685 int UtcDaliImageDownCast(void)
686 {
687   TestApplication application;
688   tet_infoline("Testing Dali::Image::DownCast()");
689
690   Image image = Image::New(gTestImageFilename);
691
692   BaseHandle object(image);
693
694   Image image2 = Image::DownCast(object);
695   DALI_TEST_CHECK(image2);
696
697   Image image3 = DownCast< Image >(object);
698   DALI_TEST_CHECK(image3);
699
700   BaseHandle unInitializedObject;
701   Image image4 = Image::DownCast(unInitializedObject);
702   DALI_TEST_CHECK(!image4);
703
704   Image image5 = DownCast< Image >(unInitializedObject);
705   DALI_TEST_CHECK(!image5);
706   END_TEST;
707 }
708
709 // 1.16
710 int UtcDaliImageGetImageSize(void)
711 {
712   TestApplication application;
713   TestPlatformAbstraction& platform = application.GetPlatform();
714
715   tet_infoline("UtcDaliImageGetImageSize - Image::GetImageSize()");
716
717   Vector2 testSize(8.0f, 16.0f);
718   platform.SetClosestImageSize(testSize);
719
720   Vector2 size = Image::GetImageSize(gTestImageFilename);
721
722   DALI_TEST_CHECK( application.GetPlatform().GetTrace().FindMethod("GetClosestImageSize"));
723   DALI_TEST_EQUALS( size, testSize, TEST_LOCATION);
724   END_TEST;
725 }
726
727 // 1.17
728 int UtcDaliImageGetFilename(void)
729 {
730   TestApplication application;
731
732   tet_infoline("UtcDaliImageGetFilename");
733
734   // invoke default handle constructor
735   Image image;
736
737   DALI_TEST_CHECK( !image );
738
739   // initialise handle
740   image = Image::New(gTestImageFilename);
741
742   DALI_TEST_EQUALS( image.GetFilename(), gTestImageFilename, TEST_LOCATION);
743   END_TEST;
744 }
745
746 // 1.18
747 int UtcDaliImageGetLoadingState01(void)
748 {
749   TestApplication application;
750   tet_infoline("UtcDaliImageGetLoadingState01");
751
752   Image image = Image::New(gTestImageFilename);
753   DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
754   application.SendNotification();
755   application.Render(16);
756
757   // simulate load success
758   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
759   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
760   Integration::ResourcePointer resource(bitmap);
761   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
762
763   if(request)
764   {
765     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
766   }
767   application.Render(16);
768   application.SendNotification();
769
770   // Test state == ResourceLoadingSucceeded
771   DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingSucceeded);
772   END_TEST;
773 }
774
775 // 1.19
776 int UtcDaliImageGetLoadingState02(void)
777 {
778   TestApplication application;
779
780   tet_infoline("UtcDaliImageGetLoadingState02");
781
782   // invoke default handle constructor
783   Image image;
784
785   DALI_TEST_CHECK( !image );
786
787   // initialise handle
788   image = Image::New(gTestImageFilename);
789
790   // Test state == ResourceLoading
791   DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
792   application.SendNotification();
793   application.Render(16);
794
795   // simulate load failure
796   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
797   if(request)
798   {
799     application.GetPlatform().SetResourceLoadFailed(request->GetId(), Integration::FailureUnknown);
800   }
801   application.Render(16);
802   application.SendNotification();
803
804   // Test state == ResourceLoadingFailed
805   DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingFailed);
806   END_TEST;
807 }
808
809 // 1.20
810 int UtcDaliImageGetReleasePolicy(void)
811 {
812   TestApplication application;
813
814   tet_infoline("UtcDaliImageGetReleasePolicy");
815
816   Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
817
818   DALI_TEST_CHECK( image );
819
820   DALI_TEST_CHECK( Image::Unused == image.GetReleasePolicy() );
821
822   END_TEST;
823 }
824
825 // 1.21
826 int UtcDaliImageGetLoadPolicy(void)
827 {
828   TestApplication application;
829
830   tet_infoline("UtcDaliImageGetLoadPolicy");
831
832   Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
833
834   DALI_TEST_CHECK( image );
835
836   DALI_TEST_CHECK( Image::OnDemand == image.GetLoadPolicy());
837   END_TEST;
838 }
839
840 static bool SignalLoadFlag = false;
841
842 static void SignalLoadHandler(Image image)
843 {
844   tet_infoline("Received image load finished signal");
845
846   SignalLoadFlag = true;
847 }
848
849 static bool SignalUploadedFlag = false;
850
851 static void SignalUploadedHandler(Image image)
852 {
853   tet_infoline("Received image uploaded signal");
854
855   SignalUploadedFlag = true;
856 }
857
858 // 1.22
859 int UtcDaliImageSignalLoadingFinished(void)
860 {
861   TestApplication application;
862
863   tet_infoline("UtcDaliImageSignalLoadingFinished");
864
865   SignalLoadFlag = false;
866
867   Image image = Image::New(gTestImageFilename);
868
869   image.LoadingFinishedSignal().Connect( SignalLoadHandler );
870   application.SendNotification();
871   application.Render(16);
872
873   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
874   if(request)
875   {
876     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true)));
877   }
878
879   application.Render(16);
880   application.SendNotification();
881
882   DALI_TEST_CHECK( SignalLoadFlag == true );
883   END_TEST;
884 }
885
886 // 1.23
887 int UtcDaliImageSignalUploaded(void)
888 {
889   TestApplication application;
890   tet_infoline("UtcDaliImageSignalUploaded - Image::SignalUploaded()");
891
892   // set up image in fake platform abstraction
893   Vector2 testSize(80.0f, 80.0f);
894   application.GetPlatform().SetClosestImageSize(testSize);
895
896   Image image = Image::New(gTestImageFilename);
897   image.LoadingFinishedSignal().Connect( SignalLoadHandler );
898
899   // Load image
900   application.SendNotification();
901   application.Render(16);
902   std::vector<GLuint> ids;
903   ids.push_back( 23 );
904   application.GetGlAbstraction().SetNextTextureIds( ids );
905   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
906   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
907   Integration::ResourcePointer resource(bitmap);
908   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
909   if(request)
910   {
911     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
912   }
913   application.Render(16);
914   application.SendNotification();
915
916   image.UploadedSignal().Connect( SignalUploadedHandler );
917
918   Dali::ImageActor imageActor = ImageActor::New(image);
919   Stage::GetCurrent().Add(imageActor);
920   imageActor.SetSize(80, 80);
921   imageActor.SetVisible(true);
922
923   application.SendNotification();
924   application.Render(0);
925   application.Render(16);
926   application.SendNotification();
927   application.Render(16);
928   application.SendNotification();
929   application.Render(16);
930   application.SendNotification();
931   application.Render(16);
932   application.SendNotification();
933
934   DALI_TEST_CHECK( SignalLoadFlag == true );
935   DALI_TEST_CHECK( SignalUploadedFlag == true );
936   SignalLoadFlag = false;
937   SignalUploadedFlag = false;
938
939   image.Reload();
940   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 160, 160, 160, 160);
941
942   application.SendNotification();
943   application.Render(16);
944   application.Render(16);
945   application.SendNotification();
946   DALI_TEST_CHECK( SignalLoadFlag == true );
947
948   application.Render(16);
949   application.SendNotification();
950   application.Render(16);
951   application.SendNotification();
952   DALI_TEST_CHECK( SignalUploadedFlag == true );
953   END_TEST;
954 }
955
956
957 // 1.24
958 int UtcDaliImageDiscard01(void)
959 {
960   TestApplication application;
961   tet_infoline("UtcDaliImageDiscard01 - no actors");
962
963   {
964     Image image = Image::New(gTestImageFilename);
965
966     // Load image
967     application.SendNotification();
968     application.Render(16);
969     std::vector<GLuint> ids;
970     ids.push_back( 23 );
971     application.GetGlAbstraction().SetNextTextureIds( ids );
972     Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
973     Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
974     Integration::ResourcePointer resource(bitmap);
975     bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
976     if(request)
977     {
978     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
979     }
980     application.Render(16);
981     application.SendNotification();
982   } // Drop image handle
983
984   application.SendNotification();
985   application.Render(16);
986   application.Render(16);
987   application.SendNotification();
988
989   // Shouldn't have been sent to GL...
990   const std::vector<GLuint>& texIds = application.GetGlAbstraction().GetNextTextureIds();
991   DALI_TEST_CHECK( texIds.size() == 1 );
992   DALI_TEST_CHECK( texIds[0] == 23 );
993   END_TEST;
994 }
995
996 // 1.25
997 int UtcDaliImageDiscard02(void)
998 {
999   TestApplication application;
1000   tet_infoline("UtcDaliImageDiscard02 - one actor, tests TextureCache::DiscardTexture");
1001
1002   {
1003     {
1004       ImageActor actor;
1005       {
1006         Image image = Image::New(gTestImageFilename);
1007         actor = ImageActor::New(image);
1008         Stage::GetCurrent().Add(actor);
1009
1010         application.SendNotification();
1011         application.Render(16);
1012
1013         std::vector<GLuint> ids;
1014         ids.push_back( 23 );
1015         application.GetGlAbstraction().SetNextTextureIds( ids );
1016
1017         Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1018         Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1019         Integration::ResourcePointer resource(bitmap);
1020         bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1021         if(request)
1022         {
1023           application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1024         }
1025         application.Render(16);
1026         application.SendNotification();
1027       } // lose image handle, actor should still keep one
1028       application.SendNotification();
1029       application.Render(16);
1030
1031       Stage::GetCurrent().Remove(actor);
1032       application.SendNotification();
1033       application.Render(16);
1034     } // lose actor
1035     application.SendNotification();
1036     application.Render(16);
1037   }
1038
1039   // Cleanup
1040   application.SendNotification();
1041   application.Render(16);
1042   application.Render(16);
1043   application.SendNotification();
1044
1045   // texture should have been removed:
1046   DALI_TEST_CHECK( application.GetGlAbstraction().CheckTextureDeleted( 23 ));
1047   END_TEST;
1048 }
1049
1050 // 1.26
1051 int UtcDaliImageDiscard03(void)
1052 {
1053   TestApplication application;
1054   tet_infoline("UtcDaliImageDiscard03 - one actor, tests TextureCache::RemoveObserver");
1055
1056   Image image = Image::New(gTestImageFilename);
1057   ImageActor actor = ImageActor::New(image);
1058   Stage::GetCurrent().Add(actor);
1059
1060   application.SendNotification();
1061   application.Render(16);
1062
1063   std::vector<GLuint> ids;
1064   ids.push_back( 23 );
1065   application.GetGlAbstraction().SetNextTextureIds( ids );
1066
1067   Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1068   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1069   Integration::ResourcePointer resource(bitmap);
1070   bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1071   if(request)
1072   {
1073     application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1074   }
1075   application.Render(16);
1076   application.SendNotification();
1077   application.SendNotification();
1078   application.Render(16);
1079
1080   const std::vector<GLuint>& texIds = application.GetGlAbstraction().GetNextTextureIds();
1081   DALI_TEST_CHECK( texIds.size() == 0 );
1082   const std::vector<GLuint>& boundTexIds = application.GetGlAbstraction().GetBoundTextures();
1083   DALI_TEST_CHECK( boundTexIds[0] == 23 );
1084
1085   Stage::GetCurrent().Remove(actor);
1086   application.SendNotification();
1087   application.Render(16);
1088   application.SendNotification();
1089   application.Render(16);
1090   application.SendNotification();
1091   application.Render(16); // Should remove image renderer
1092
1093   END_TEST;
1094 }