2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali/public-api/dali-core.h>
22 #include <dali-test-suite-utils.h>
23 #include <test-native-image.h>
27 void utc_dali_image_startup(void)
29 test_return_value = TET_UNDEF;
32 void utc_dali_image_cleanup(void)
34 test_return_value = TET_PASS;
37 static const char* gTestImageFilename = "icon_wrt.png";
41 int UtcDaliImageNew01(void)
43 TestApplication application;
45 tet_infoline("UtcDaliImageNew01 - Image::New(const std::string&)");
47 // invoke default handle constructor
50 DALI_TEST_CHECK( !image );
53 image = Image::New(gTestImageFilename);
55 DALI_TEST_CHECK( image );
60 int UtcDaliImageNew02(void)
62 TestApplication application;
64 tet_infoline("UtcDaliImageNew02 - Image::New(const std::string&, const ImageAttributes&)");
66 // invoke default handle constructor
69 DALI_TEST_CHECK( !image );
72 Dali::ImageAttributes imageAttributes;
73 imageAttributes.SetSize(128, 256);
74 imageAttributes.SetScalingMode(Dali::ImageAttributes::FitHeight);
75 image = Image::New(gTestImageFilename, imageAttributes);
77 DALI_TEST_CHECK( image );
82 int UtcDaliImageNew03(void)
84 TestApplication application;
86 tet_infoline("UtcDaliImageNew03 - Image::New(NativeImage&)");
88 // invoke default handle constructor
90 TestNativeImagePointer nativeImage = TestNativeImage::New(16, 16);
92 DALI_TEST_CHECK( !image );
95 image = Image::New(*(nativeImage.Get()));
97 DALI_TEST_CHECK( image );
102 int UtcDaliImageNewWithPolicies01(void)
104 TestApplication application;
106 // testing delayed loading
107 tet_infoline("UtcDaliImageNewWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
108 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
109 Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
111 DALI_TEST_CHECK( image );
113 application.SendNotification();
114 application.Render(16);
116 // request file loading only when actor added to stage
117 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
119 ImageActor actor = ImageActor::New(image);
121 Stage::GetCurrent().Add(actor);
123 application.SendNotification();
124 application.Render(16);
126 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
128 // testing ReleasePolicy::Never
129 // fake loading image
130 std::vector<GLuint> ids;
132 application.GetGlAbstraction().SetNextTextureIds( ids );
133 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
134 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
135 Integration::ResourcePointer resource(bitmap);
136 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
140 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
142 application.Render(16);
143 application.SendNotification();
145 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
147 // never discard texture
148 Stage::GetCurrent().Remove(actor);
149 application.Render(16);
150 application.SendNotification();
151 application.Render(16);
152 application.SendNotification();
153 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
158 int UtcDaliImageNewWithPolicies02(void)
160 TestApplication application;
161 const Vector2 closestImageSize( 80, 45);
162 application.GetPlatform().SetClosestImageSize(closestImageSize);
164 // testing resource deletion when taken off stage
165 tet_infoline("UtcDaliImageNewWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
167 Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Unused);
169 DALI_TEST_CHECK( image );
171 application.SendNotification();
172 application.Render(16);
174 // request file loading only when actor added to stage
175 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
177 ImageActor actor = ImageActor::New(image);
179 Stage::GetCurrent().Add(actor);
181 application.SendNotification();
182 application.Render(16);
184 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
186 // testing ReleasePolicy::Unused
187 // fake loading image
188 std::vector<GLuint> ids;
190 application.GetGlAbstraction().SetNextTextureIds( ids );
191 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
192 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
193 Integration::ResourcePointer resource(bitmap);
194 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
198 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
200 application.Render(16);
201 application.SendNotification();
203 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
205 // discard texture when actor comes off stage
206 Stage::GetCurrent().Remove(actor);
207 application.Render(16);
208 application.SendNotification();
209 application.Render(16);
210 application.SendNotification();
211 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
216 int UtcDaliImageNewWithPolicies03(void)
218 TestApplication application;
219 const Vector2 closestImageSize( 80, 45);
220 application.GetPlatform().SetClosestImageSize(closestImageSize);
222 // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
223 tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
225 Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
227 DALI_TEST_CHECK( image );
229 application.SendNotification();
230 application.Render(16);
232 // request file loading immediately
233 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
235 ImageActor actor = ImageActor::New(image);
237 Stage::GetCurrent().Add(actor);
239 application.SendNotification();
240 application.Render(16);
242 // testing ReleasePolicy::Unused
243 // fake loading image
244 std::vector<GLuint> ids;
246 application.GetGlAbstraction().SetNextTextureIds( ids );
247 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
248 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
249 Integration::ResourcePointer resource(bitmap);
250 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
254 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
256 application.Render(16);
257 application.SendNotification();
259 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
261 // discard texture when actor comes off stage
262 Stage::GetCurrent().Remove(actor);
263 application.Render(16);
264 application.SendNotification();
265 application.Render(16);
266 application.SendNotification();
267 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
269 // check load request when actor added back to stage
270 application.GetPlatform().ResetTrace();
272 Stage::GetCurrent().Add(actor);
274 application.SendNotification();
275 application.Render(16);
276 application.SendNotification();
277 application.Render(16);
279 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
284 int UtcDaliImageNewWithPolicies04(void)
286 TestApplication application;
288 // load immediately, don't release texture when off stage
289 tet_infoline("UtcDaliImageNewWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
291 Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Never);
293 DALI_TEST_CHECK( image );
295 application.SendNotification();
296 application.Render(16);
298 // request file loading immediately
299 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
301 ImageActor actor = ImageActor::New(image);
303 Stage::GetCurrent().Add(actor);
305 application.SendNotification();
306 application.Render(16);
308 // testing ReleasePolicy::Never
309 // fake loading image
310 std::vector<GLuint> ids;
312 application.GetGlAbstraction().SetNextTextureIds( ids );
313 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
314 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
315 Integration::ResourcePointer resource(bitmap);
316 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
320 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
322 application.Render(16);
323 application.SendNotification();
325 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
327 // texture is not discarded
328 Stage::GetCurrent().Remove(actor);
329 application.Render(16);
330 application.SendNotification();
331 application.Render(16);
332 application.SendNotification();
333 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
335 // no load request when actor added back to stage
336 application.GetPlatform().ResetTrace();
338 Stage::GetCurrent().Add(actor);
340 application.SendNotification();
341 application.Render(16);
342 application.SendNotification();
343 application.Render(16);
345 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
350 int UtcDaliImageNewDistanceField(void)
352 TestApplication application;
354 tet_infoline("UtcDaliImageNewDistanceField - Image::NewDistanceField(const std::string&)");
356 // invoke default handle constructor
359 DALI_TEST_CHECK( !image );
362 image = Image::NewDistanceField(gTestImageFilename);
364 DALI_TEST_CHECK( image );
369 int UtcDaliImageNewDistanceFieldWithPolicies01(void)
371 TestApplication application;
373 // testing delayed loading
374 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies01 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Never");
375 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
376 Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Never);
378 DALI_TEST_CHECK( image );
380 application.SendNotification();
381 application.Render(16);
383 // request file loading only when actor added to stage
384 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
386 ImageActor actor = ImageActor::New(image);
388 Stage::GetCurrent().Add(actor);
390 application.SendNotification();
391 application.Render(16);
393 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
395 // testing ReleasePolicy::Never
396 // fake loading image
397 std::vector<GLuint> ids;
399 application.GetGlAbstraction().SetNextTextureIds( ids );
400 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
401 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
402 Integration::ResourcePointer resource(bitmap);
403 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
407 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
409 application.Render(16);
410 application.SendNotification();
412 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
414 // never discard texture
415 Stage::GetCurrent().Remove(actor);
416 application.Render(16);
417 application.SendNotification();
418 application.Render(16);
419 application.SendNotification();
420 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
425 int UtcDaliImageNewDistanceFieldWithPolicies02(void)
427 TestApplication application;
429 const Vector2 closestImageSize( 80, 45);
430 application.GetPlatform().SetClosestImageSize(closestImageSize);
432 // testing resource deletion when taken off stage
433 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies02 - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
435 Image image = Image::NewDistanceField(gTestImageFilename, Image::OnDemand, Image::Unused);
437 DALI_TEST_CHECK( image );
439 application.SendNotification();
440 application.Render(16);
442 // request file loading only when actor added to stage
443 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
445 ImageActor actor = ImageActor::New(image);
447 Stage::GetCurrent().Add(actor);
449 application.SendNotification();
450 application.Render(16);
452 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
454 // testing ReleasePolicy::Unused
455 // fake loading image
456 std::vector<GLuint> ids;
458 application.GetGlAbstraction().SetNextTextureIds( ids );
459 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
460 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
461 Integration::ResourcePointer resource(bitmap);
462 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
466 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
468 application.Render(16);
469 application.SendNotification();
471 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
473 // discard texture when actor comes off stage
474 Stage::GetCurrent().Remove(actor);
475 application.Render(16);
476 application.SendNotification();
477 application.Render(16);
478 application.SendNotification();
479 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
484 int UtcDaliImageNewDistanceFieldWithPolicies03(void)
486 TestApplication application;
487 const Vector2 closestImageSize( 80, 45);
488 application.GetPlatform().SetClosestImageSize(closestImageSize);
490 // load immediately -> resource deletion when taken off stage -> put actor back on stage -> load resource again
491 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies03 - Load image with LoadPolicy::Immediate, ReleasePolicy::Unused");
493 Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Unused);
495 DALI_TEST_CHECK( image );
497 application.SendNotification();
498 application.Render(16);
500 // request file loading immediately
501 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
503 ImageActor actor = ImageActor::New(image);
505 Stage::GetCurrent().Add(actor);
507 application.SendNotification();
508 application.Render(16);
510 // testing ReleasePolicy::Unused
511 // fake loading image
512 std::vector<GLuint> ids;
514 application.GetGlAbstraction().SetNextTextureIds( ids );
515 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
516 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
517 Integration::ResourcePointer resource(bitmap);
518 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
522 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
524 application.Render(16);
525 application.SendNotification();
527 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
529 // discard texture when actor comes off stage
530 Stage::GetCurrent().Remove(actor);
531 application.Render(16);
532 application.SendNotification();
533 application.Render(16);
534 application.SendNotification();
535 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
537 // check load request when actor added back to stage
538 application.GetPlatform().ResetTrace();
540 Stage::GetCurrent().Add(actor);
542 application.SendNotification();
543 application.Render(16);
544 application.SendNotification();
545 application.Render(16);
547 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
552 int UtcDaliImageNewDistanceFieldWithPolicies04(void)
554 TestApplication application;
556 // load immediately, don't release texture when off stage
557 tet_infoline("UtcDaliImageNewDistanceFieldWithPolicies04 - Load image with LoadPolicy::Immediate, ReleasePolicy::Never");
559 Image image = Image::NewDistanceField(gTestImageFilename, Image::Immediate, Image::Never);
561 DALI_TEST_CHECK( image );
563 application.SendNotification();
564 application.Render(16);
566 // request file loading immediately
567 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
569 ImageActor actor = ImageActor::New(image);
571 Stage::GetCurrent().Add(actor);
573 application.SendNotification();
574 application.Render(16);
576 // testing ReleasePolicy::Never
577 // fake loading image
578 std::vector<GLuint> ids;
580 application.GetGlAbstraction().SetNextTextureIds( ids );
581 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
582 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
583 Integration::ResourcePointer resource(bitmap);
584 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
588 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
590 application.Render(16);
591 application.SendNotification();
593 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
595 // texture is not discarded
596 Stage::GetCurrent().Remove(actor);
597 application.Render(16);
598 application.SendNotification();
599 application.Render(16);
600 application.SendNotification();
601 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
603 // no load request when actor added back to stage
604 application.GetPlatform().ResetTrace();
606 Stage::GetCurrent().Add(actor);
608 application.SendNotification();
609 application.Render(16);
610 application.SendNotification();
611 application.Render(16);
613 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
618 int UtcDaliImageNewDistanceFieldWithAttributes(void)
620 TestApplication application;
622 tet_infoline("UtcDaliImageNewDistanceFieldWithAttributes - Image::NewDistanceField(const std::string&, const ImageAttributes& attributes)");
624 // invoke default handle constructor
626 Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
628 DALI_TEST_CHECK( !image );
631 image = Image::NewDistanceField(gTestImageFilename, imageAttributes);
633 DALI_TEST_CHECK( image );
638 int UtcDaliImageNewDistanceFieldWithAttrandPol(void)
640 TestApplication application;
642 const Vector2 closestImageSize( 80, 45);
643 application.GetPlatform().SetClosestImageSize(closestImageSize);
645 tet_infoline("UtcDaliImageNewDistanceFieldWithAttrandPol - Load image with LoadPolicy::OnDemand, ReleasePolicy::Unused");
647 Dali::ImageAttributes imageAttributes = Dali::ImageAttributes::NewDistanceField(6.0f, 12);
649 Image image = Image::NewDistanceField(gTestImageFilename, imageAttributes, Image::OnDemand, Image::Unused);
651 DALI_TEST_CHECK( image );
653 application.SendNotification();
654 application.Render(16);
656 // request file loading only when actor added to stage
657 DALI_TEST_CHECK( !application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
659 ImageActor actor = ImageActor::New(image);
661 Stage::GetCurrent().Add(actor);
663 application.SendNotification();
664 application.Render(16);
666 DALI_TEST_CHECK( application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc) );
668 // testing ReleasePolicy::Unused
669 // fake loading image
670 std::vector<GLuint> ids;
672 application.GetGlAbstraction().SetNextTextureIds( ids );
673 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
674 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
675 Integration::ResourcePointer resource(bitmap);
676 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
680 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
682 application.Render(16);
683 application.SendNotification();
685 DALI_TEST_CHECK ( !application.GetGlAbstraction().CheckTextureDeleted(23) );
687 // discard texture when actor comes off stage
688 Stage::GetCurrent().Remove(actor);
689 application.Render(16);
690 application.SendNotification();
691 application.Render(16);
692 application.SendNotification();
693 DALI_TEST_CHECK ( application.GetGlAbstraction().CheckTextureDeleted(23) );
698 int UtcDaliImageDownCast(void)
700 TestApplication application;
701 tet_infoline("Testing Dali::Image::DownCast()");
703 Image image = Image::New(gTestImageFilename);
705 BaseHandle object(image);
707 Image image2 = Image::DownCast(object);
708 DALI_TEST_CHECK(image2);
710 Image image3 = DownCast< Image >(object);
711 DALI_TEST_CHECK(image3);
713 BaseHandle unInitializedObject;
714 Image image4 = Image::DownCast(unInitializedObject);
715 DALI_TEST_CHECK(!image4);
717 Image image5 = DownCast< Image >(unInitializedObject);
718 DALI_TEST_CHECK(!image5);
723 int UtcDaliImageGetImageSize(void)
725 TestApplication application;
726 TestPlatformAbstraction& platform = application.GetPlatform();
728 tet_infoline("UtcDaliImageGetImageSize - Image::GetImageSize()");
730 Vector2 testSize(8.0f, 16.0f);
731 platform.SetClosestImageSize(testSize);
733 Vector2 size = Image::GetImageSize(gTestImageFilename);
735 DALI_TEST_CHECK( application.GetPlatform().GetTrace().FindMethod("GetClosestImageSize"));
736 DALI_TEST_EQUALS( size, testSize, TEST_LOCATION);
741 int UtcDaliImageGetFilename(void)
743 TestApplication application;
745 tet_infoline("UtcDaliImageGetFilename");
747 // invoke default handle constructor
750 DALI_TEST_CHECK( !image );
753 image = Image::New(gTestImageFilename);
755 DALI_TEST_EQUALS( image.GetFilename(), gTestImageFilename, TEST_LOCATION);
760 int UtcDaliImageGetLoadingState01(void)
762 TestApplication application;
763 tet_infoline("UtcDaliImageGetLoadingState01");
765 Image image = Image::New(gTestImageFilename);
766 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
767 application.SendNotification();
768 application.Render(16);
770 // simulate load success
771 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
772 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
773 Integration::ResourcePointer resource(bitmap);
774 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
778 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
780 application.Render(16);
781 application.SendNotification();
783 // Test state == ResourceLoadingSucceeded
784 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingSucceeded);
789 int UtcDaliImageGetLoadingState02(void)
791 TestApplication application;
793 tet_infoline("UtcDaliImageGetLoadingState02");
795 // invoke default handle constructor
798 DALI_TEST_CHECK( !image );
801 image = Image::New(gTestImageFilename);
803 // Test state == ResourceLoading
804 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoading);
805 application.SendNotification();
806 application.Render(16);
808 // simulate load failure
809 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
812 application.GetPlatform().SetResourceLoadFailed(request->GetId(), Integration::FailureUnknown);
814 application.Render(16);
815 application.SendNotification();
817 // Test state == ResourceLoadingFailed
818 DALI_TEST_CHECK(image.GetLoadingState() == ResourceLoadingFailed);
823 int UtcDaliImageGetReleasePolicy(void)
825 TestApplication application;
827 tet_infoline("UtcDaliImageGetReleasePolicy");
829 Image image = Image::New(gTestImageFilename, Image::Immediate, Image::Unused);
831 DALI_TEST_CHECK( image );
833 DALI_TEST_CHECK( Image::Unused == image.GetReleasePolicy() );
839 int UtcDaliImageGetLoadPolicy(void)
841 TestApplication application;
843 tet_infoline("UtcDaliImageGetLoadPolicy");
845 Image image = Image::New(gTestImageFilename, Image::OnDemand, Image::Never);
847 DALI_TEST_CHECK( image );
849 DALI_TEST_CHECK( Image::OnDemand == image.GetLoadPolicy());
853 static bool SignalLoadFlag = false;
855 static void SignalLoadHandler(Image image)
857 tet_infoline("Received image load finished signal");
859 SignalLoadFlag = true;
862 static bool SignalUploadedFlag = false;
864 static void SignalUploadedHandler(Image image)
866 tet_infoline("Received image uploaded signal");
868 SignalUploadedFlag = true;
872 int UtcDaliImageSignalLoadingFinished(void)
874 TestApplication application;
876 tet_infoline("UtcDaliImageSignalLoadingFinished");
878 SignalLoadFlag = false;
880 Image image = Image::New(gTestImageFilename);
882 image.LoadingFinishedSignal().Connect( SignalLoadHandler );
883 application.SendNotification();
884 application.Render(16);
886 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
889 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true)));
892 application.Render(16);
893 application.SendNotification();
895 DALI_TEST_CHECK( SignalLoadFlag == true );
900 int UtcDaliImageSignalUploaded(void)
902 TestApplication application;
903 tet_infoline("UtcDaliImageSignalUploaded - Image::SignalUploaded()");
905 // set up image in fake platform abstraction
906 Vector2 testSize(80.0f, 80.0f);
907 application.GetPlatform().SetClosestImageSize(testSize);
909 Image image = Image::New(gTestImageFilename);
910 image.LoadingFinishedSignal().Connect( SignalLoadHandler );
913 application.SendNotification();
914 application.Render(16);
915 std::vector<GLuint> ids;
917 application.GetGlAbstraction().SetNextTextureIds( ids );
918 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
919 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
920 Integration::ResourcePointer resource(bitmap);
921 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
924 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
926 application.Render(16);
927 application.SendNotification();
929 image.UploadedSignal().Connect( SignalUploadedHandler );
931 Dali::ImageActor imageActor = ImageActor::New(image);
932 Stage::GetCurrent().Add(imageActor);
933 imageActor.SetSize(80, 80);
934 imageActor.SetVisible(true);
936 application.SendNotification();
937 application.Render(0);
938 application.Render(16);
939 application.SendNotification();
940 application.Render(16);
941 application.SendNotification();
942 application.Render(16);
943 application.SendNotification();
944 application.Render(16);
945 application.SendNotification();
947 DALI_TEST_CHECK( SignalLoadFlag == true );
948 DALI_TEST_CHECK( SignalUploadedFlag == true );
949 SignalLoadFlag = false;
950 SignalUploadedFlag = false;
953 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 160, 160, 160, 160);
955 application.SendNotification();
956 application.Render(16);
957 application.Render(16);
958 application.SendNotification();
959 DALI_TEST_CHECK( SignalLoadFlag == true );
961 application.Render(16);
962 application.SendNotification();
963 application.Render(16);
964 application.SendNotification();
965 DALI_TEST_CHECK( SignalUploadedFlag == true );
971 int UtcDaliImageDiscard01(void)
973 TestApplication application;
974 tet_infoline("UtcDaliImageDiscard01 - no actors");
977 Image image = Image::New(gTestImageFilename);
980 application.SendNotification();
981 application.Render(16);
982 std::vector<GLuint> ids;
984 application.GetGlAbstraction().SetNextTextureIds( ids );
985 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
986 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
987 Integration::ResourcePointer resource(bitmap);
988 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
991 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
993 application.Render(16);
994 application.SendNotification();
995 } // Drop image handle
997 application.SendNotification();
998 application.Render(16);
999 application.Render(16);
1000 application.SendNotification();
1002 // Shouldn't have been sent to GL...
1003 const std::vector<GLuint>& texIds = application.GetGlAbstraction().GetNextTextureIds();
1004 DALI_TEST_CHECK( texIds.size() == 1 );
1005 DALI_TEST_CHECK( texIds[0] == 23 );
1010 int UtcDaliImageDiscard02(void)
1012 TestApplication application;
1013 application.GetGlAbstraction().EnableTextureCallTrace( true );
1014 tet_infoline("UtcDaliImageDiscard02 - one actor, tests TextureCache::DiscardTexture");
1020 ImageAttributes attrs;
1021 const Vector2 requestedSize( 40, 30 );
1022 attrs.SetSize( requestedSize.width, requestedSize.height );
1023 Image image = Image::New(gTestImageFilename, attrs);
1024 actor = ImageActor::New(image);
1025 Stage::GetCurrent().Add(actor);
1027 application.SendNotification();
1028 application.Render(16);
1030 std::vector<GLuint> ids;
1031 ids.push_back( 23 );
1032 application.GetGlAbstraction().SetNextTextureIds( ids );
1034 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1035 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1036 Integration::ResourcePointer resource(bitmap);
1037 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1040 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1042 application.Render(16);
1043 application.SendNotification();
1044 DALI_TEST_CHECK( application.GetGlAbstraction().GetTextureTrace().FindMethod("BindTexture") );
1045 } // lose image handle, actor should still keep one
1046 application.SendNotification();
1047 application.Render(16);
1049 Stage::GetCurrent().Remove(actor);
1050 application.SendNotification();
1051 application.Render(16);
1053 application.SendNotification();
1054 application.Render(16);
1058 application.SendNotification();
1059 application.Render(16);
1060 application.Render(16);
1061 application.SendNotification();
1063 // texture should have been removed:
1064 DALI_TEST_CHECK( application.GetGlAbstraction().CheckTextureDeleted( 23 ));
1069 int UtcDaliImageDiscard03(void)
1071 TestApplication application;
1072 tet_infoline("UtcDaliImageDiscard03 - one actor, tests TextureCache::RemoveObserver");
1074 const Vector2 closestImageSize( 1, 1);
1075 application.GetPlatform().SetClosestImageSize(closestImageSize);
1077 Image image = Image::New(gTestImageFilename);
1078 ImageActor actor = ImageActor::New(image);
1079 Stage::GetCurrent().Add(actor);
1081 application.SendNotification();
1082 application.Render(16);
1084 std::vector<GLuint> ids;
1085 ids.push_back( 23 );
1086 application.GetGlAbstraction().SetNextTextureIds( ids );
1088 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
1089 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, true );
1090 Integration::ResourcePointer resource(bitmap);
1091 bitmap->GetPackedPixelsProfile()->ReserveBuffer(Pixel::RGBA8888, 80, 80, 80, 80);
1094 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resource);
1096 application.Render(16);
1097 application.SendNotification();
1098 application.SendNotification();
1099 application.Render(16);
1101 const std::vector<GLuint>& texIds = application.GetGlAbstraction().GetNextTextureIds();
1102 DALI_TEST_CHECK( texIds.size() == 0 );
1103 const std::vector<GLuint>& boundTexIds = application.GetGlAbstraction().GetBoundTextures();
1104 DALI_TEST_CHECK( boundTexIds[0] == 23 );
1106 Stage::GetCurrent().Remove(actor);
1107 application.SendNotification();
1108 application.Render(16);
1109 application.SendNotification();
1110 application.Render(16);
1111 application.SendNotification();
1112 application.Render(16); // Should remove image renderer