2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 // http://floralicense.org/license/
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.
23 #include <dali/public-api/dali-core.h>
24 #include <dali/public-api/images/image.h>
25 #include <dali/public-api/images/image-attributes.h>
26 #include <dali-test-suite-utils.h>
27 #include <test-native-image.h>
31 static void Startup();
32 static void Cleanup();
35 void (*tet_startup)() = Startup;
36 void (*tet_cleanup)() = Cleanup;
39 static const char* gTestImageFilename = "icon_wrt.png";
42 POSITIVE_TC_IDX = 0x01,
46 #define MAX_NUMBER_OF_TESTS 10000
48 struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
51 TEST_FUNCTION( UtcDaliImageNew01, POSITIVE_TC_IDX ); // 01
52 TEST_FUNCTION( UtcDaliImageNew02, POSITIVE_TC_IDX ); // 02
53 TEST_FUNCTION( UtcDaliImageNew03, POSITIVE_TC_IDX ); // 03
54 TEST_FUNCTION( UtcDaliImageNewWithPolicies01, POSITIVE_TC_IDX ); // 04
55 TEST_FUNCTION( UtcDaliImageNewWithPolicies02, POSITIVE_TC_IDX ); // 05
56 TEST_FUNCTION( UtcDaliImageNewWithPolicies03, POSITIVE_TC_IDX ); // 06
57 TEST_FUNCTION( UtcDaliImageNewWithPolicies04, POSITIVE_TC_IDX ); // 07
58 TEST_FUNCTION( UtcDaliImageNewDistanceField, POSITIVE_TC_IDX ); // 08
59 TEST_FUNCTION( UtcDaliImageNewDistanceFieldWithPolicies01, POSITIVE_TC_IDX ); // 09
60 TEST_FUNCTION( UtcDaliImageNewDistanceFieldWithPolicies02, POSITIVE_TC_IDX ); // 10
61 TEST_FUNCTION( UtcDaliImageNewDistanceFieldWithPolicies03, POSITIVE_TC_IDX ); // 11
62 TEST_FUNCTION( UtcDaliImageNewDistanceFieldWithPolicies04, POSITIVE_TC_IDX ); // 12
63 TEST_FUNCTION( UtcDaliImageNewDistanceFieldWithAttributes, POSITIVE_TC_IDX ); // 13
64 TEST_FUNCTION( UtcDaliImageNewDistanceFieldWithAttrandPol, POSITIVE_TC_IDX ); // 14
65 TEST_FUNCTION( UtcDaliImageDownCast, POSITIVE_TC_IDX ); // 15
66 TEST_FUNCTION( UtcDaliImageGetImageSize, POSITIVE_TC_IDX ); // 16
67 TEST_FUNCTION( UtcDaliImageGetFilename, POSITIVE_TC_IDX ); // 17
68 TEST_FUNCTION( UtcDaliImageGetLoadingState01, POSITIVE_TC_IDX ); // 18
69 TEST_FUNCTION( UtcDaliImageGetLoadingState02, POSITIVE_TC_IDX ); // 19
70 TEST_FUNCTION( UtcDaliImageGetReleasePolicy, POSITIVE_TC_IDX ); // 20
71 TEST_FUNCTION( UtcDaliImageGetLoadPolicy, POSITIVE_TC_IDX ); // 21
72 TEST_FUNCTION( UtcDaliImageSignalLoadingFinished, POSITIVE_TC_IDX ); // 22
73 TEST_FUNCTION( UtcDaliImageSignalUploaded, POSITIVE_TC_IDX ); // 23
74 TEST_FUNCTION( UtcDaliImageDiscard01, POSITIVE_TC_IDX ); // 24
75 TEST_FUNCTION( UtcDaliImageDiscard02, POSITIVE_TC_IDX ); // 25
76 TEST_FUNCTION( UtcDaliImageDiscard03, POSITIVE_TC_IDX ); // 26
79 // Called only once before first test is run.
84 // Called only once after last test is run
90 static void UtcDaliImageNew01()
92 TestApplication application;
94 tet_infoline("UtcDaliImageNew01 - Image::New(const std::string&)");
96 // invoke default handle constructor
99 DALI_TEST_CHECK( !image );
102 image = Image::New(gTestImageFilename);
104 DALI_TEST_CHECK( image );
108 static void UtcDaliImageNew02()
110 TestApplication application;
112 tet_infoline("UtcDaliImageNew02 - Image::New(const std::string&, const ImageAttributes&)");
114 // invoke default handle constructor
117 DALI_TEST_CHECK( !image );
120 Dali::ImageAttributes imageAttributes;
121 imageAttributes.SetSize(128, 256);
122 imageAttributes.SetScalingMode(Dali::ImageAttributes::FitHeight);
123 image = Image::New(gTestImageFilename, imageAttributes);
125 DALI_TEST_CHECK( image );
129 static void UtcDaliImageNew03()
131 TestApplication application;
133 tet_infoline("UtcDaliImageNew03 - Image::New(NativeImage&)");
135 // invoke default handle constructor
137 TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
139 DALI_TEST_CHECK( !image );
142 image = Image::New(*(nativeImage.Get()));
144 DALI_TEST_CHECK( image );
148 static void UtcDaliImageNewWithPolicies01()
150 TestApplication application;
152 // testing delayed loading
153 tet_infoline("UtcDaliImageNewWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
154 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
155 Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
157 DALI_TEST_CHECK( image );
159 application.SendNotification();
160 application.Render(16);
162 // request file loading only when actor added to stage
163 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
165 ImageActor actor = ImageActor::New(image);
167 Stage::GetCurrent().Add(actor);
169 application.SendNotification();
170 application.Render(16);
172 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
174 // testing ReleasePolicy::Never
175 // fake loading image
176 std::vector<GLuint> ids;
178 application.GetGlAbstraction().SetNextTextureIds( ids );
179 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
180 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
181 Integration::ResourcePointer resource(bitmap);
182 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
186 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
188 application.Render(16);
189 application.SendNotification();
191 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
193 // never discard texture
194 Stage::GetCurrent().Remove(actor);
195 application.Render(16);
196 application.SendNotification();
197 application.Render(16);
198 application.SendNotification();
199 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
203 static void UtcDaliImageNewWithPolicies02()
205 TestApplication application;
207 // testing resource deletion when taken off stage
208 tet_infoline("UtcDaliImageNewWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
210 Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Unused);
212 DALI_TEST_CHECK( image );
214 application.SendNotification();
215 application.Render(16);
217 // request file loading only when actor added to stage
218 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
220 ImageActor actor = ImageActor::New(image);
222 Stage::GetCurrent().Add(actor);
224 application.SendNotification();
225 application.Render(16);
227 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
229 // testing ReleasePolicy::Unused
230 // fake loading image
231 std::vector<GLuint> ids;
233 application.GetGlAbstraction().SetNextTextureIds( ids );
234 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
235 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
236 Integration::ResourcePointer resource(bitmap);
237 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
241 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
243 application.Render(16);
244 application.SendNotification();
246 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
248 // discard texture when actor comes off stage
249 Stage::GetCurrent().Remove(actor);
250 application.Render(16);
251 application.SendNotification();
252 application.Render(16);
253 application.SendNotification();
254 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
258 static void UtcDaliImageNewWithPolicies03()
260 TestApplication application;
262 // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
263 tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
265 Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
267 DALI_TEST_CHECK( image );
269 application.SendNotification();
270 application.Render(16);
272 // request file loading immediately
273 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
275 ImageActor actor = ImageActor::New(image);
277 Stage::GetCurrent().Add(actor);
279 application.SendNotification();
280 application.Render(16);
282 // testing ReleasePolicy::Unused
283 // fake loading image
284 std::vector<GLuint> ids;
286 application.GetGlAbstraction().SetNextTextureIds( ids );
287 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
288 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
289 Integration::ResourcePointer resource(bitmap);
290 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
294 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
296 application.Render(16);
297 application.SendNotification();
299 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
301 // discard texture when actor comes off stage
302 Stage::GetCurrent().Remove(actor);
303 application.Render(16);
304 application.SendNotification();
305 application.Render(16);
306 application.SendNotification();
307 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
309 // check load request when actor added back to stage
310 application.GetPlatform().ResetTrace();
312 Stage::GetCurrent().Add(actor);
314 application.SendNotification();
315 application.Render(16);
316 application.SendNotification();
317 application.Render(16);
319 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
323 static void UtcDaliImageNewWithPolicies04()
325 TestApplication application;
327 // load immediately, don't release texture when off stage
328 tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
330 Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Never);
332 DALI_TEST_CHECK( image );
334 application.SendNotification();
335 application.Render(16);
337 // request file loading immediately
338 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
340 ImageActor actor = ImageActor::New(image);
342 Stage::GetCurrent().Add(actor);
344 application.SendNotification();
345 application.Render(16);
347 // testing ReleasePolicy::Never
348 // fake loading image
349 std::vector<GLuint> ids;
351 application.GetGlAbstraction().SetNextTextureIds( ids );
352 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
353 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
354 Integration::ResourcePointer resource(bitmap);
355 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
359 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
361 application.Render(16);
362 application.SendNotification();
364 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
366 // texture is not discarded
367 Stage::GetCurrent().Remove(actor);
368 application.Render(16);
369 application.SendNotification();
370 application.Render(16);
371 application.SendNotification();
372 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
374 // no load request when actor added back to stage
375 application.GetPlatform().ResetTrace();
377 Stage::GetCurrent().Add(actor);
379 application.SendNotification();
380 application.Render(16);
381 application.SendNotification();
382 application.Render(16);
384 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
388 static void UtcDaliImageNewDistanceField()
390 TestApplication application;
392 tet_infoline("UtcDaliImageNewDistanceField - Image::NewDistanceField(const std::string&)");
394 // invoke default handle constructor
397 DALI_TEST_CHECK( !image );
400 image = Image::NewDistanceField(gTestImageFilename);
402 DALI_TEST_CHECK( image );
406 static void UtcDaliImageNewDistanceFieldWithPolicies01()
408 TestApplication application;
410 // testing delayed loading
411 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
412 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
413 Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Never);
415 DALI_TEST_CHECK( image );
417 application.SendNotification();
418 application.Render(16);
420 // request file loading only when actor added to stage
421 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
423 ImageActor actor = ImageActor::New(image);
425 Stage::GetCurrent().Add(actor);
427 application.SendNotification();
428 application.Render(16);
430 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
432 // testing ReleasePolicy::Never
433 // fake loading image
434 std::vector<GLuint> ids;
436 application.GetGlAbstraction().SetNextTextureIds( ids );
437 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
438 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
439 Integration::ResourcePointer resource(bitmap);
440 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
444 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
446 application.Render(16);
447 application.SendNotification();
449 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
451 // never discard texture
452 Stage::GetCurrent().Remove(actor);
453 application.Render(16);
454 application.SendNotification();
455 application.Render(16);
456 application.SendNotification();
457 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
461 static void UtcDaliImageNewDistanceFieldWithPolicies02()
463 TestApplication application;
465 // testing resource deletion when taken off stage
466 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
468 Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Unused);
470 DALI_TEST_CHECK( image );
472 application.SendNotification();
473 application.Render(16);
475 // request file loading only when actor added to stage
476 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
478 ImageActor actor = ImageActor::New(image);
480 Stage::GetCurrent().Add(actor);
482 application.SendNotification();
483 application.Render(16);
485 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
487 // testing ReleasePolicy::Unused
488 // fake loading image
489 std::vector<GLuint> ids;
491 application.GetGlAbstraction().SetNextTextureIds( ids );
492 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
493 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
494 Integration::ResourcePointer resource(bitmap);
495 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
499 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
501 application.Render(16);
502 application.SendNotification();
504 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
506 // discard texture when actor comes off stage
507 Stage::GetCurrent().Remove(actor);
508 application.Render(16);
509 application.SendNotification();
510 application.Render(16);
511 application.SendNotification();
512 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
516 static void UtcDaliImageNewDistanceFieldWithPolicies03()
518 TestApplication application;
520 // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
521 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
523 Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Unused);
525 DALI_TEST_CHECK( image );
527 application.SendNotification();
528 application.Render(16);
530 // request file loading immediately
531 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
533 ImageActor actor = ImageActor::New(image);
535 Stage::GetCurrent().Add(actor);
537 application.SendNotification();
538 application.Render(16);
540 // testing ReleasePolicy::Unused
541 // fake loading image
542 std::vector<GLuint> ids;
544 application.GetGlAbstraction().SetNextTextureIds( ids );
545 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
546 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
547 Integration::ResourcePointer resource(bitmap);
548 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
552 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
554 application.Render(16);
555 application.SendNotification();
557 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
559 // discard texture when actor comes off stage
560 Stage::GetCurrent().Remove(actor);
561 application.Render(16);
562 application.SendNotification();
563 application.Render(16);
564 application.SendNotification();
565 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
567 // check load request when actor added back to stage
568 application.GetPlatform().ResetTrace();
570 Stage::GetCurrent().Add(actor);
572 application.SendNotification();
573 application.Render(16);
574 application.SendNotification();
575 application.Render(16);
577 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
581 static void UtcDaliImageNewDistanceFieldWithPolicies04()
583 TestApplication application;
585 // load immediately, don't release texture when off stage
586 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies04 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
588 Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Never);
590 DALI_TEST_CHECK( image );
592 application.SendNotification();
593 application.Render(16);
595 // request file loading immediately
596 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
598 ImageActor actor = ImageActor::New(image);
600 Stage::GetCurrent().Add(actor);
602 application.SendNotification();
603 application.Render(16);
605 // testing ReleasePolicy::Never
606 // fake loading image
607 std::vector<GLuint> ids;
609 application.GetGlAbstraction().SetNextTextureIds( ids );
610 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
611 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
612 Integration::ResourcePointer resource(bitmap);
613 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
617 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
619 application.Render(16);
620 application.SendNotification();
622 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
624 // texture is not discarded
625 Stage::GetCurrent().Remove(actor);
626 application.Render(16);
627 application.SendNotification();
628 application.Render(16);
629 application.SendNotification();
630 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
632 // no load request when actor added back to stage
633 application.GetPlatform().ResetTrace();
635 Stage::GetCurrent().Add(actor);
637 application.SendNotification();
638 application.Render(16);
639 application.SendNotification();
640 application.Render(16);
642 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
646 static void UtcDaliImageNewDistanceFieldWithAttributes()
648 TestApplication application;
650 tet_infoline("UtcDaliImageNewDistanceFieldWithAttributes - Image::NewDistanceField(const std::string&, const ImageAttributes& attributes)");
652 // invoke default handle constructor
654 Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
656 DALI_TEST_CHECK( !image );
659 image = Image::NewDistanceField(gTestImageFilename, imageAttributes);
661 DALI_TEST_CHECK( image );
665 static void UtcDaliImageNewDistanceFieldWithAttrandPol()
667 TestApplication application;
669 tet_infoline("UtcDaliImageNewDistanceFieldWithAttrandPol - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
671 Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
673 Image image = Image::NewDistanceField(gTestImageFilename, imageAttributes, Image::OnDemand, Image::Unused);
675 DALI_TEST_CHECK( image );
677 application.SendNotification();
678 application.Render(16);
680 // request file loading only when actor added to stage
681 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
683 ImageActor actor = ImageActor::New(image);
685 Stage::GetCurrent().Add(actor);
687 application.SendNotification();
688 application.Render(16);
690 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
692 // testing ReleasePolicy::Unused
693 // fake loading image
694 std::vector<GLuint> ids;
696 application.GetGlAbstraction().SetNextTextureIds( ids );
697 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
698 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
699 Integration::ResourcePointer resource(bitmap);
700 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
704 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
706 application.Render(16);
707 application.SendNotification();
709 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
711 // discard texture when actor comes off stage
712 Stage::GetCurrent().Remove(actor);
713 application.Render(16);
714 application.SendNotification();
715 application.Render(16);
716 application.SendNotification();
717 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
721 static void UtcDaliImageDownCast()
723 TestApplication application;
724 tet_infoline("Testing Dali::Image::DownCast()");
726 Image image = Image::New(gTestImageFilename);
728 BaseHandle object(image);
730 Image image2 = Image::DownCast(object);
731 DALI_TEST_CHECK(image2);
733 Image image3 = DownCast< Image >(object);
734 DALI_TEST_CHECK(image3);
736 BaseHandle unInitializedObject;
737 Image image4 = Image::DownCast(unInitializedObject);
738 DALI_TEST_CHECK(!image4);
740 Image image5 = DownCast< Image >(unInitializedObject);
741 DALI_TEST_CHECK(!image5);
745 static void UtcDaliImageGetImageSize()
747 TestApplication application;
748 TestPlatformAbstraction& platform = application.GetPlatform();
750 tet_infoline("UtcDaliImageGetImageSize - Image::GetImageSize()");
752 Vector2 testSize(8.0f, 16.0f);
753 platform.SetImageMetaDataSize(testSize);
755 Vector2 size = Image::GetImageSize(gTestImageFilename);
757 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadImageMetadataFunc) );
758 DALI_TEST_EQUALS( size, testSize, TEST_LOCATION);
762 static void UtcDaliImageGetFilename()
764 TestApplication application;
766 tet_infoline("UtcDaliImageGetFilename");
768 // invoke default handle constructor
771 DALI_TEST_CHECK( !image );
774 image = Image::New(gTestImageFilename);
776 DALI_TEST_EQUALS( image.GetFilename(), gTestImageFilename, TEST_LOCATION);
780 static void UtcDaliImageGetLoadingState01()
782 TestApplication application;
783 tet_infoline("UtcDaliImageGetLoadingState01");
785 Image image = Image::New(gTestImageFilename);
786 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
787 application.SendNotification();
788 application.Render(16);
790 // simulate load success
791 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
792 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
793 Integration::ResourcePointer resource(bitmap);
794 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
798 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
800 application.Render(16);
801 application.SendNotification();
803 // Test state == ResourceLoadingSucceeded
804 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingSucceeded);
808 static void UtcDaliImageGetLoadingState02()
810 TestApplication application;
812 tet_infoline("UtcDaliImageGetLoadingState02");
814 // invoke default handle constructor
817 DALI_TEST_CHECK( !image );
820 image = Image::New(gTestImageFilename);
822 // Test state == ResourceLoading
823 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
824 application.SendNotification();
825 application.Render(16);
827 // simulate load failure
828 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
831 application.GetPlatform().SetResourceLoadFailed(request->GetId(), Integration::FailureUnknown);
833 application.Render(16);
834 application.SendNotification();
836 // Test state == ResourceLoadingFailed
837 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingFailed);
841 static void UtcDaliImageGetReleasePolicy()
843 TestApplication application;
845 tet_infoline("UtcDaliImageGetReleasePolicy");
847 Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
849 DALI_TEST_CHECK( image );
851 DALI_TEST_CHECK( Image::Unused == image.GetReleasePolicy() );
856 static void UtcDaliImageGetLoadPolicy()
858 TestApplication application;
860 tet_infoline("UtcDaliImageGetLoadPolicy");
862 Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
864 DALI_TEST_CHECK( image );
866 DALI_TEST_CHECK( Image::OnDemand == image.GetLoadPolicy());
869 static bool SignalLoadFlag = false;
871 static void SignalLoadHandler(Image image)
873 tet_infoline("Received image load finished signal");
875 SignalLoadFlag = true;
878 static bool SignalUploadedFlag = false;
880 static void SignalUploadedHandler(Image image)
882 tet_infoline("Received image uploaded signal");
884 SignalUploadedFlag = true;
888 static void UtcDaliImageSignalLoadingFinished()
890 TestApplication application;
892 tet_infoline("UtcDaliImageSignalLoadingFinished");
894 SignalLoadFlag = false;
896 Image image = Image::New(gTestImageFilename);
898 image.LoadingFinishedSignal().Connect( SignalLoadHandler );
899 application.SendNotification();
900 application.Render(16);
902 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
905 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true)));
908 application.Render(16);
909 application.SendNotification();
911 DALI_TEST_CHECK( SignalLoadFlag == true );
915 static void UtcDaliImageSignalUploaded()
917 TestApplication application;
918 tet_infoline("UtcDaliImageSignalUploaded - Image::SignalUploaded()");
920 // set up image in fake platform abstraction
921 Vector2 testSize(80.0f, 80.0f);
922 application.GetPlatform().SetImageMetaDataSize(testSize);
924 Image image = Image::New(gTestImageFilename);
925 image.LoadingFinishedSignal().Connect( SignalLoadHandler );
928 application.SendNotification();
929 application.Render(16);
930 std::vector<GLuint> ids;
932 application.GetGlAbstraction().SetNextTextureIds( ids );
933 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
934 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
935 Integration::ResourcePointer resource(bitmap);
936 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
939 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
941 application.Render(16);
942 application.SendNotification();
944 image.UploadedSignal().Connect( SignalUploadedHandler );
946 Dali::ImageActor imageActor = ImageActor::New(image);
947 Stage::GetCurrent().Add(imageActor);
948 imageActor.SetSize(80, 80);
949 imageActor.SetVisible(true);
951 application.SendNotification();
952 application.Render(0);
953 application.Render(16);
954 application.SendNotification();
955 application.Render(16);
956 application.SendNotification();
957 application.Render(16);
958 application.SendNotification();
959 application.Render(16);
960 application.SendNotification();
962 DALI_TEST_CHECK( SignalLoadFlag == true );
963 DALI_TEST_CHECK( SignalUploadedFlag == true );
964 SignalLoadFlag = false;
965 SignalUploadedFlag = false;
968 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 160, 160, 160, 160);
970 application.SendNotification();
971 application.Render(16);
972 application.Render(16);
973 application.SendNotification();
974 DALI_TEST_CHECK( SignalLoadFlag == true );
976 application.Render(16);
977 application.SendNotification();
978 application.Render(16);
979 application.SendNotification();
980 DALI_TEST_CHECK( SignalUploadedFlag == true );
985 static void UtcDaliImageDiscard01()
987 TestApplication application;
988 tet_infoline("UtcDaliImageDiscard01 - no actors");
991 Image image = Image::New(gTestImageFilename);
994 application.SendNotification();
995 application.Render(16);
996 std::vector<GLuint> ids;
998 application.GetGlAbstraction().SetNextTextureIds( ids );
999 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1000 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1001 Integration::ResourcePointer resource(bitmap);
1002 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1005 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1007 application.Render(16);
1008 application.SendNotification();
1009 } // Drop image handle
1011 application.SendNotification();
1012 application.Render(16);
1013 application.Render(16);
1014 application.SendNotification();
1016 // Shouldn't have been sent to GL...
1017 const std::vector<GLuint>& texIds = application.GetGlAbstraction().GetNextTextureIds();
1018 DALI_TEST_CHECK( texIds.size() == 1 );
1019 DALI_TEST_CHECK( texIds[0] == 23 );
1023 static void UtcDaliImageDiscard02()
1025 TestApplication application;
1026 tet_infoline("UtcDaliImageDiscard02 - one actor, tests TextureCache::DiscardTexture");
1032 Image image = Image::New(gTestImageFilename);
1033 actor = ImageActor::New(image);
1034 Stage::GetCurrent().Add(actor);
1036 application.SendNotification();
1037 application.Render(16);
1039 std::vector<GLuint> ids;
1040 ids.push_back( 23 );
1041 application.GetGlAbstraction().SetNextTextureIds( ids );
1043 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1044 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1045 Integration::ResourcePointer resource(bitmap);
1046 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1049 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1051 application.Render(16);
1052 application.SendNotification();
1053 } // lose image handle, actor should still keep one
1054 application.SendNotification();
1055 application.Render(16);
1057 Stage::GetCurrent().Remove(actor);
1058 application.SendNotification();
1059 application.Render(16);
1061 application.SendNotification();
1062 application.Render(16);
1066 application.SendNotification();
1067 application.Render(16);
1068 application.Render(16);
1069 application.SendNotification();
1071 // texture should have been removed:
1072 DALI_TEST_CHECK( application.GetGlAbstraction().CheckTextureDeleted( 23 ));
1076 static void UtcDaliImageDiscard03()
1078 TestApplication application;
1079 tet_infoline("UtcDaliImageDiscard03 - one actor, tests TextureCache::RemoveObserver");
1081 Image image = Image::New(gTestImageFilename);
1082 ImageActor actor = ImageActor::New(image);
1083 Stage::GetCurrent().Add(actor);
1085 application.SendNotification();
1086 application.Render(16);
1088 std::vector<GLuint> ids;
1089 ids.push_back( 23 );
1090 application.GetGlAbstraction().SetNextTextureIds( ids );
1092 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1093 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1094 Integration::ResourcePointer resource(bitmap);
1095 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1098 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1100 application.Render(16);
1101 application.SendNotification();
1102 application.SendNotification();
1103 application.Render(16);
1105 const std::vector<GLuint>& texIds = application.GetGlAbstraction().GetNextTextureIds();
1106 DALI_TEST_CHECK( texIds.size() == 0 );
1107 const std::vector<GLuint>& boundTexIds = application.GetGlAbstraction().GetBoundTextures();
1108 DALI_TEST_CHECK( boundTexIds[0] == 23 );
1110 Stage::GetCurrent().Remove(actor);
1111 application.SendNotification();
1112 application.Render(16);
1113 application.SendNotification();
1114 application.Render(16);
1115 application.SendNotification();
1116 application.Render(16); // Should remove image renderer