+
+int UtcDaliImageViewSetImageOnResourceReadySignal04(void)
+{
+ tet_infoline("Test texturemanager's remove queue works well within signal handler.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+ gResourceReadySignal04ComesOrder = 0;
+
+ gImageView1 = ImageView::New("invalid.jpg"); // request invalid image, to make loading failed fast.
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal04);
+ application.GetScene().Add(gImageView1);
+
+ gImageView2 = ImageView::New("invalid.png"); // request invalid image, to make loading failed fast.
+ gImageView2.ResourceReadySignal().Connect(&OnResourceReadySignal04);
+ application.GetScene().Add(gImageView2);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_infoline("Try to load 2 invalid image");
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 2, TEST_LOCATION);
+
+ tet_infoline("load done");
+
+ // We can test this UTC only if gImageView1 and gImageView2 loaded done.
+ if(gResourceReadySignal04ComesOrder == -1)
+ {
+ tet_infoline("Bad news.. gImageView3 or gImageView4 loaded faster than others. just skip this UTC");
+ }
+ else
+ {
+ // gImageView3 and gImageView4 load must not be successed yet.
+ DALI_TEST_EQUALS(gImageView3.GetRendererCount(), 0u, TEST_LOCATION);
+ DALI_TEST_EQUALS(gImageView4.GetRendererCount(), 0u, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_infoline("Try to load 2 valid image");
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 4, TEST_LOCATION);
+
+ tet_infoline("load done");
+
+ // gImageView3 and gImageView4 load must be successed now.
+ DALI_TEST_EQUALS(gImageView3.GetRendererAt(0).GetTextures().GetTextureCount(), 1u, TEST_LOCATION);
+ DALI_TEST_EQUALS(gImageView4.GetRendererAt(0).GetTextures().GetTextureCount(), 1u, TEST_LOCATION);
+ }
+
+ END_TEST;
+}
+int UtcDaliImageViewSetImageOnResourceReadySignal05(void)
+{
+ tet_infoline("Test multiple views with same image during ResourceReady load the image only 1 times");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ gImageView1 = ImageView::New("invalid.jpg"); // request invalid image, to make loading failed fast.
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal05);
+ application.GetScene().Add(gImageView1);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_infoline("Try to load 1 invalid.jpg image");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 1, TEST_LOCATION);
+
+ tet_infoline("Try to load 1 invalid2.jpg image");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ tet_infoline("Now we don't have any image to be loaded. Check event thread trigger failed.");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1, 1), false, TEST_LOCATION);
+
+ gImageView1.Unparent();
+ gImageView1.Reset();
+
+ END_TEST;
+}
+int UtcDaliImageViewSetImageOnResourceReadySignal06(void)
+{
+ tet_infoline("Test texturemanager's remove image & mask queue works well within signal handler.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+ gResourceReadySignal06ComesOrder = 0;
+
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = "invalid.jpg";
+ map[Toolkit::ImageVisual::Property::ALPHA_MASK_URL] = "invalid.png";
+
+ gImageView1 = ImageView::New(); // request invalid image, to make loading failed fast.
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal06);
+ application.GetScene().Add(gImageView1);
+
+ gImageView2 = ImageView::New(); // request invalid image, to make loading failed fast.
+ gImageView2.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView2.ResourceReadySignal().Connect(&OnResourceReadySignal06);
+ application.GetScene().Add(gImageView2);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_infoline("Try to load 2 invalid image");
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 2, TEST_LOCATION);
+
+ tet_infoline("load done");
+
+ // We can test this UTC only if gImageView1 and gImageView2 loaded done.
+ if(gResourceReadySignal06ComesOrder == -1)
+ {
+ tet_infoline("Bad news.. gImageView3 or gImageView4 loaded faster than others. just skip this UTC");
+ }
+ else
+ {
+ // gImageView3 and gImageView4 load must not be successed yet.
+ DALI_TEST_EQUALS(gImageView3.GetRendererCount(), 0u, TEST_LOCATION);
+ DALI_TEST_EQUALS(gImageView4.GetRendererCount(), 0u, TEST_LOCATION);
+
+ application.GetScene().Add(gImageView3);
+ application.GetScene().Add(gImageView4);
+ application.SendNotification();
+ application.Render();
+
+ tet_infoline("Try to load 2 valid image");
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 2, TEST_LOCATION);
+
+ tet_infoline("Note that resource ready should not come now.");
+ tet_infoline("Try to load remained 2 valid image + apply masking");
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(4), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 4, TEST_LOCATION);
+
+ tet_infoline("Check all resource ready comes now.");
+ }
+ END_TEST;
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal07(void)
+{
+ tet_infoline("Test texturemanager's remove image & mask queue works well within signal handler 02.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal07);
+ application.GetScene().Add(gImageView1);
+
+ application.SendNotification();
+ application.Render();
+
+ // Load gImageView1
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 1, TEST_LOCATION);
+
+ tet_infoline("load image1 done");
+
+ // Load gImageView2 and mask
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 1, TEST_LOCATION);
+
+ // gImageView2 mask apply done
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 2, TEST_LOCATION);
+
+ tet_infoline("load image2 done");
+ END_TEST;
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal08(void)
+{
+ tet_infoline("Test remove npatch images during resource ready");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = TEST_BROKEN_IMAGE_M;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+
+ // Case 1 : Remove all images during resource ready.
+ try
+ {
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal08);
+ application.GetScene().Add(gImageView1);
+
+ application.SendNotification();
+ application.Render();
+
+ // Load gImageView1
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 1, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(true);
+ }
+ catch(...)
+ {
+ // Exception should not happened
+ DALI_TEST_CHECK(false);
+ }
+
+ // Clear cache.
+ application.SendNotification();
+ application.Render();
+
+ gResourceReadySignalCounter = 0;
+
+ // Case 2 : Remove all images when we use cached resource.
+ try
+ {
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView1.ResourceReadySignal().Connect(&OnSimpleResourceReadySignal);
+ application.GetScene().Add(gImageView1);
+
+ application.SendNotification();
+ application.Render();
+
+ // Load gImageView1
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 1, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ gImageView2 = ImageView::New();
+ gImageView2.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView2.ResourceReadySignal().Connect(&OnResourceReadySignal08);
+ application.GetScene().Add(gImageView2);
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 2, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(true);
+ }
+ catch(...)
+ {
+ // Exception should not happened
+ DALI_TEST_CHECK(false);
+ }
+ gResourceReadySignalCounter = 0;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+
+ END_TEST;
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal09(void)
+{
+ tet_infoline("Test load invalid npatch images during invalid resource ready");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = TEST_INVALID_NPATCH_FILE_NAME_01;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+ if(gImageView3)
+ {
+ gImageView3.Reset();
+ }
+
+ // Dummy view with npatch image
+ ImageView dummyView = ImageView::New(TEST_BROKEN_IMAGE_M);
+ application.GetScene().Add(dummyView);
+
+ application.SendNotification();
+ application.Render();
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ application.SendNotification();
+ application.Render();
+
+ // Case 1 : Reload images during resource ready.
+ try
+ {
+ gResourceReadySignal09Emitted = false;
+
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal09);
+ application.GetScene().Add(gImageView1);
+
+ gImageView2 = ImageView::New();
+ application.GetScene().Add(gImageView2);
+
+ // Load TEST_INVALID_NPATCH_FILE_NAME_01
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ // Load TEST_INVALID_NPATCH_FILE_NAME_01 one more times.
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(true);
+ }
+ catch(...)
+ {
+ // Exception should not happened
+ DALI_TEST_CHECK(false);
+ }
+
+ // Clear cache.
+ application.SendNotification();
+ application.Render();
+
+ gResourceReadySignalCounter = 0;
+
+ // Case 2 : Remove all images when we use cached resource.
+ try
+ {
+ gResourceReadySignal09Emitted = false;
+
+ gImageView3 = ImageView::New();
+ gImageView3.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView3.ResourceReadySignal().Connect(&OnSimpleResourceReadySignal);
+ application.GetScene().Add(gImageView3);
+
+ gImageView2 = ImageView::New();
+ application.GetScene().Add(gImageView2);
+
+ // Load gImageView2
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal09);
+ application.GetScene().Add(gImageView1);
+
+ // Load gImageView1
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ // Load TEST_INVALID_NPATCH_FILE_NAME_01 one more times.
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK(true);
+ }
+ catch(...)
+ {
+ // Exception should not happened
+ DALI_TEST_CHECK(false);
+ }
+ gResourceReadySignalCounter = 0;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+ if(gImageView3)
+ {
+ gImageView3.Reset();
+ }
+
+ END_TEST;
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal10(void)
+{
+ tet_infoline("Test ResourceReady signal comes more than 2 times.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+
+ // Dummy view to cache image.
+ ImageView dummyView = ImageView::New(gImage_34_RGBA);
+ application.GetScene().Add(dummyView);
+
+ application.SendNotification();
+ application.Render();
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ application.SendNotification();
+ application.Render();
+
+ try
+ {
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, gImage_34_RGBA);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal10);
+ application.GetScene().Add(gImageView1); // It will call resourceReady signal 1 time.
+
+ tet_printf("ResourceReady called %d times\n", gResourceReadySignalCounter);
+
+ DALI_TEST_GREATER(gResourceReadySignal10MaxCounter, gResourceReadySignalCounter, TEST_LOCATION); // Check whether resource ready call too much.
+
+ for(int i = 0; i < gResourceReadySignal10MaxCounter; ++i)
+ {
+ tet_printf("RunIdles\n");
+ // Executes the idle callbacks.
+ application.RunIdles();
+ application.SendNotification();
+ application.Render();
+ tet_printf("RunIdles done\n");
+ }
+ tet_printf("ResourceReady called %d times\n", gResourceReadySignalCounter);
+
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, gResourceReadySignal10MaxCounter, TEST_LOCATION);
+
+ DALI_TEST_CHECK(true);
+ }
+ catch(...)
+ {
+ // Exception should not happened
+ DALI_TEST_CHECK(false);
+ }
+
+ // Clear cache.
+ application.SendNotification();
+ application.Render();
+
+ gResourceReadySignalCounter = 0;
+
+ gResourceReadySignalCounter = 0;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+
+ END_TEST;
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal11(void)
+{
+ tet_infoline("Test ResourceReady Add AnimatedImageVisual and then Remove immediately.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+ if(gImageView3)
+ {
+ gImageView3.Reset();
+ }
+
+ try
+ {
+ gImageView1 = ImageView::New();
+ gImageView1.SetProperty(Toolkit::ImageView::Property::IMAGE, TEST_GIF_FILE_NAME);
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal11);
+ application.GetScene().Add(gImageView1); // It will call resourceReady signal 1 time.
+
+ tet_printf("ResourceReady called %d times\n", gResourceReadySignalCounter);
+
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 0, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ // Load gImageView1
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ tet_printf("ResourceReady called %d times\n", gResourceReadySignalCounter);
+
+ DALI_TEST_EQUALS(gResourceReadySignalCounter, 1, TEST_LOCATION);
+
+ DALI_TEST_CHECK(true);
+ }
+ catch(...)
+ {
+ // Exception should not happened
+ DALI_TEST_CHECK(false);
+ }
+
+ // Clear cache.
+ application.SendNotification();
+ application.Render();
+
+ gResourceReadySignalCounter = 0;
+
+ // Clear image view for clear test
+
+ if(gImageView1)
+ {
+ gImageView1.Reset();
+ }
+ if(gImageView2)
+ {
+ gImageView2.Reset();
+ }
+ if(gImageView3)
+ {
+ gImageView3.Reset();
+ }
+
+ END_TEST;
+}
+
+int UtcDaliImageViewUseSameUrlWithAnimatedImageVisual(void)
+{
+ tet_infoline("Test multiple views with same image in animated image visual");
+ ToolkitTestApplication application;
+
+ gImageView1 = ImageView::New(TEST_WEBP_FILE_NAME);
+ application.GetScene().Add(gImageView1);
+
+ tet_infoline("Remove imageView and Create new imageView with same url");
+ application.GetScene().Remove(gImageView1);
+ gImageView2 = ImageView::New(TEST_WEBP_FILE_NAME);
+ application.GetScene().Add(gImageView2);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_infoline("Check the ImageView load image successfully");
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ END_TEST;
+}
+
+int UtcDaliImageViewNpatchImageCacheTest01(void)
+{
+ tet_infoline("Test npatch image cached");
+
+ ToolkitTestApplication application;
+ ImageView imageView[2];
+
+ auto& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace(true);
+ auto& textureCallStack = gl.GetTextureTrace();
+ textureCallStack.Enable(true);
+ textureCallStack.EnableLogging(true);
+
+ auto TestNPatch = [&](int index, const std::string& nPatchImageUrl, const char* location) {
+ if(imageView[index])
+ {
+ imageView[index].Unparent();
+ }
+
+ // Ensure remove npatch cache if required.
+ application.SendNotification();
+ application.Render();
+
+ imageView[index] = ImageView::New(nPatchImageUrl);
+ imageView[index].SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ application.GetScene().Add(imageView[index]);
+ };
+
+ TestNPatch(0, TEST_BROKEN_IMAGE_M, TEST_LOCATION);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_printf("trace : \n%s\n", textureCallStack.GetTraceString().c_str());
+
+ // Check we gen only 1 textures
+ DALI_TEST_EQUALS(textureCallStack.CountMethod("GenTextures"), 1, TEST_LOCATION);
+ textureCallStack.Reset();
+
+ // Let we use cached textures
+ for(int i = 0; i < 10; i++)
+ {
+ TestNPatch(1, TEST_BROKEN_IMAGE_M, TEST_LOCATION);
+ TestNPatch(0, TEST_BROKEN_IMAGE_M, TEST_LOCATION);
+ }
+
+ application.SendNotification();
+ application.Render();
+ // Check we use cached npatch data so we don't generate new texture textures
+ DALI_TEST_EQUALS(textureCallStack.CountMethod("GenTextures"), 0, TEST_LOCATION);
+
+ // Clear all cached
+ imageView[0].Unparent();
+ imageView[0].Reset();
+ imageView[1].Unparent();
+ imageView[1].Reset();
+
+ application.SendNotification();
+ application.Render();
+
+ textureCallStack.Reset();
+ // Let we use deference textures
+ TestNPatch(1, TEST_BROKEN_IMAGE_S, TEST_LOCATION);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+ // Try to load multiple times.
+ for(int i = 0; i < 3; i++)
+ {
+ TestNPatch(0, TEST_BROKEN_IMAGE_M, TEST_LOCATION);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ TestNPatch(1, TEST_BROKEN_IMAGE_S, TEST_LOCATION);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ }
+ application.SendNotification();
+ application.Render();
+
+ imageView[0].Unparent();
+ imageView[0].Reset();
+ imageView[1].Unparent();
+ imageView[1].Reset();
+
+ application.SendNotification();
+ application.Render();
+
+ // Check memory leak
+ DALI_TEST_EQUALS(textureCallStack.CountMethod("GenTextures"), textureCallStack.CountMethod("DeleteTextures"), TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliImageViewNpatchImageCacheTest02(void)
+{
+ tet_infoline("Test npatch image cached with border");
+
+ ToolkitTestApplication application;
+ ImageView imageView[2];
+
+ auto& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace(true);
+ auto& textureCallStack = gl.GetTextureTrace();
+ textureCallStack.Enable(true);
+ textureCallStack.EnableLogging(true);
+
+ auto TestBorderImage = [&](int index, const std::string& normalImageUrl, const Rect<int> border, const char* location) {
+ Property::Map map;
+ map[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::N_PATCH;
+ map[Toolkit::ImageVisual::Property::URL] = normalImageUrl;
+ map[Toolkit::ImageVisual::Property::BORDER] = border;
+
+ imageView[index] = ImageView::New();
+ imageView[index].SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView[index].SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ application.GetScene().Add(imageView[index]);
+ };
+
+ TestBorderImage(0, gImage_34_RGBA, Rect<int>(0, 0, 0, 0), TEST_LOCATION);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ tet_printf("trace : \n%s\n", textureCallStack.GetTraceString().c_str());
+
+ // Check we gen only 1 textures
+ DALI_TEST_EQUALS(textureCallStack.CountMethod("GenTextures"), 1, TEST_LOCATION);
+ textureCallStack.Reset();
+
+ // Let we use cached textures
+ for(int i = 0; i < 10; i++)
+ {
+ TestBorderImage(0, gImage_34_RGBA, Rect<int>(i, i + 1, i + 2, i + 3), TEST_LOCATION);
+ TestBorderImage(1, gImage_34_RGBA, Rect<int>(i + 1, i, i + 3, i + 2), TEST_LOCATION);
+ }
+
+ application.SendNotification();
+ application.Render();
+
+ // Check we use cached npatch data so we don't generate new texture textures
+ DALI_TEST_EQUALS(textureCallStack.CountMethod("GenTextures"), 0, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliImageViewPlaceholderImage01(void)
+{
+ tet_infoline("Test imageView use placeholder image");
+
+ ToolkitTestApplication application;
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+
+ ImageView imageView = ImageView::New();
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ application.GetScene().Add(imageView);
+
+ Property::Value value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ std::string url;
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url.empty());
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+
+ application.SendNotification();
+ application.Render();
+
+ value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url == gImage_34_RGBA);
+
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ // Replace Image test
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+ map[ImageView::Property::PLACEHOLDER_IMAGE] = gImage_34_RGBA;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_2;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ // Replace Image test2
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_2;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render(900);
+
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
+}
+
+int UtcDaliImageViewPlaceholderImage02(void)
+{
+ tet_infoline("Test imageView use placeholder image without resource ready");
+
+ ToolkitTestApplication application;
+
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+
+ ImageView imageView = ImageView::New();
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ DALI_TEST_EQUALS(imageView.IsResourceReady(), false, TEST_LOCATION);
+ imageView.ResourceReadySignal().Connect(&ResourceReadySignal);
+ application.GetScene().Add(imageView);
+
+ Property::Value value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ std::string url;
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url.empty());
+
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url == gImage_34_RGBA);
+
+ DALI_TEST_EQUALS(imageView.IsResourceReady(), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalFired, true, TEST_LOCATION);
+
+ gResourceReadySignalFired = false;
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS(imageView.IsResourceReady(), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gResourceReadySignalFired, false, TEST_LOCATION);
+
+ END_TEST;
+}
+
+int UtcDaliImageViewTransitionEffect01(void)
+{
+ tet_infoline("Test imageView use transition effect");
+
+ ToolkitTestApplication application;
+ Property::Map map;
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ map[Toolkit::Visual::Property::OPACITY] = 0.9f;
+
+ ImageView imageView = ImageView::New();
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ application.GetScene().Add(imageView);
+
+ Property::Value value = imageView.GetProperty(ImageView::Property::ENABLE_TRANSITION_EFFECT);
+ bool transition;
+ DALI_TEST_CHECK(value.Get(transition));
+ DALI_TEST_CHECK(transition == false);
+ imageView.SetProperty(Toolkit::ImageView::Property::ENABLE_TRANSITION_EFFECT, true);
+
+ application.SendNotification();
+ application.Render();
+
+ value = imageView.GetProperty(ImageView::Property::ENABLE_TRANSITION_EFFECT);
+ DALI_TEST_CHECK(value.Get(transition));
+ DALI_TEST_CHECK(transition == true);
+
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ application.SendNotification();
+ application.Render();
+
+ // Test transition effect with placeholder
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, "");
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ // Test transition effect without placeholder
+ map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_1;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = "";
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ map[Toolkit::ImageVisual::Property::URL] = gImage_600_RGB;
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ imageView.SetImage(TEST_IMAGE_1);
+ application.SendNotification();
+ application.Render();
+
+ imageView.SetImage(gImage_600_RGB);
+ application.SendNotification();
+ application.Render(9000);
+
+ imageView.SetImage("");
+ application.SendNotification();
+ application.Render();
+
+ imageView.SetImage(TEST_IMAGE_1);
+ application.SendNotification();
+ application.Render();
+
+ // Clear all cached
+ imageView.Unparent();
+ imageView.Reset();
+
+ END_TEST;
+}
+
+int UtcDaliImageViewTransitionEffect02(void)
+{
+ tet_infoline("Test imageView use transition effect with replace image");
+
+ ToolkitTestApplication application;
+
+ Property::Map map;
+
+ ImageView imageView = ImageView::New();
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ imageView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ application.GetScene().Add(imageView);
+
+ Property::Value value;
+ value = imageView.GetProperty(ImageView::Property::ENABLE_TRANSITION_EFFECT);
+ bool transition;
+ DALI_TEST_CHECK(value.Get(transition));
+ DALI_TEST_CHECK(transition == false);
+ imageView.SetProperty(Toolkit::ImageView::Property::ENABLE_TRANSITION_EFFECT, true);
+
+ value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ std::string url;
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url.empty());
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+ application.Render();
+
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, "");
+ application.SendNotification();
+ application.Render();
+
+ imageView.SetProperty(Toolkit::ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ application.SendNotification();
+ application.Render();
+
+ value = imageView.GetProperty(ImageView::Property::ENABLE_TRANSITION_EFFECT);
+ DALI_TEST_CHECK(value.Get(transition));
+ DALI_TEST_CHECK(transition == true);
+
+ value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url == gImage_34_RGBA);
+
+ imageView.SetProperty(Toolkit::ImageView::Property::IMAGE, map);
+ application.SendNotification();
+ application.Render();
+
+ // Clear all cached
+ imageView.Unparent();
+ imageView.Reset();
+
+ END_TEST;
+}
+
+int UtcDaliImageViewTransitionEffect03(void)
+{
+ tet_infoline("Test imageView use transition effect with placeholder");
+
+ ToolkitTestApplication application;
+ Property::Map map;
+
+ ImageView imageView = ImageView::New();
+ imageView.SetImage("");
+ imageView.SetProperty(Actor::Property::SIZE, Vector2(100.0f, 200.0f));
+ imageView.SetProperty(ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ imageView.SetProperty(ImageView::Property::ENABLE_TRANSITION_EFFECT, true);
+ application.GetScene().Add(imageView);
+
+ //DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render(16);
+
+ tet_infoline("(1)");
+ imageView.SetImage(gImage_600_RGB);
+ imageView.SetProperty(ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+ application.SendNotification();
+ application.Render(16);
+
+ Property::Value value;
+ value = imageView.GetProperty(ImageView::Property::ENABLE_TRANSITION_EFFECT);
+ bool transition;
+ DALI_TEST_CHECK(value.Get(transition));
+ DALI_TEST_CHECK(transition == true);
+
+ value = imageView.GetProperty(ImageView::Property::PLACEHOLDER_IMAGE);
+ std::string url;
+ DALI_TEST_CHECK(value.Get(url));
+ DALI_TEST_CHECK(url == gImage_34_RGBA);
+
+ imageView.SetImage("");
+ application.SendNotification();
+ application.Render(16);
+
+ imageView.SetImage(TEST_IMAGE_1);
+ imageView.SetProperty(ImageView::Property::PLACEHOLDER_IMAGE, gImage_34_RGBA);
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+ application.SendNotification();
+ application.Render(16);
+
+ // Clear all cached
+ imageView.Unparent();
+ imageView.Reset();
+
+ END_TEST;
+}