X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-ImageView.cpp;h=96f4536d789e68c4ea9cba584a93fd2661040052;hp=29faa6d7745d4de0836cc917a1dd7b765dc6830a;hb=57f2c014e61cff22236c0459757c41134fc7785f;hpb=f1876c34a8f667f79182fa8a772ee889e27290c1 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index 29faa6d..96f4536 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -28,8 +28,12 @@ #include #include #include +#include +#include +#include #include +#include #include #include @@ -58,6 +62,13 @@ const char* TEST_IMAGE_FILE_NAME2 = "gallery_image_02.jpg"; const char* TEST_IMAGE_1 = TEST_RESOURCE_DIR "/TB-gloss.png"; const char* TEST_IMAGE_2 = TEST_RESOURCE_DIR "/tb-norm.png"; +const char* TEST_BROKEN_IMAGE_DEFAULT = TEST_RESOURCE_DIR "/broken.png"; +const char* TEST_BROKEN_IMAGE_S = TEST_RESOURCE_DIR "/broken_s.9.png"; +const char* TEST_BROKEN_IMAGE_M = TEST_RESOURCE_DIR "/broken_m.9.png"; +const char* TEST_BROKEN_IMAGE_L = TEST_RESOURCE_DIR "/broken_l.9.png"; +const char* TEST_BROKEN_IMAGE_01 = TEST_RESOURCE_DIR "/button-up.9.png"; +const char* TEST_BROKEN_IMAGE_02 = TEST_RESOURCE_DIR "/heartsframe.9.png"; + // resolution: 34*34, pixel format: RGBA8888 static const char* gImage_34_RGBA = TEST_RESOURCE_DIR "/icon-edit.png"; // resolution: 600*600, pixel format: RGB888 @@ -534,8 +545,6 @@ int UtcDaliImageViewAsyncLoadingWithoutAltasing(void) const std::vector& textures2 = gl.GetBoundTextures(); DALI_TEST_GREATER( textures2.size(), numTextures, TEST_LOCATION ); - - END_TEST; } @@ -713,6 +722,150 @@ int UtcDaliImageViewSyncLoading02(void) END_TEST; } +int UtcDaliImageViewAsyncLoadingEncodedBuffer(void) +{ + ToolkitTestApplication application; + TestGlAbstraction& gl = application.GetGlAbstraction(); + const std::vector& textures = gl.GetBoundTextures(); + size_t numTextures = textures.size(); + + // Get encoded raw-buffer image and generate url + EncodedImageBuffer buffer = ConvertFileToEncodedImageBuffer(gImage_600_RGB); + ImageUrl url = Toolkit::Image::GenerateUrl(buffer); + + // Async loading, no atlasing for big size image + ImageView imageView = ImageView::New(url.GetUrl()); + + // By default, Aysnc loading is used + application.GetScene().Add(imageView); + imageView.SetProperty( Actor::Property::SIZE, Vector2(100, 100) ); + imageView.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + application.SendNotification(); + application.Render(16); + application.SendNotification(); + + const std::vector& textures2 = gl.GetBoundTextures(); + DALI_TEST_GREATER( textures2.size(), numTextures, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewAsyncLoadingEncodedBufferWithAtlasing(void) +{ + ToolkitTestApplication application; + + // Get encoded raw-buffer image and generate url + EncodedImageBuffer buffer = ConvertFileToEncodedImageBuffer(gImage_600_RGB); + ImageUrl url = Toolkit::Image::GenerateUrl(buffer); + ImageUrl url2 = Toolkit::Image::GenerateUrl(buffer); + + // Generate url is not equal to url2 + // NOTE : This behavior may changed when ImageUrl compare operator changed. + DALI_TEST_CHECK(url != url2); + // Generate url's string is equal to url2's string + DALI_TEST_CHECK(url.GetUrl() == url2.GetUrl()); + + EncodedImageBuffer buffer2 = ConvertFileToEncodedImageBuffer(gImage_600_RGB); + url2 = Toolkit::Image::GenerateUrl(buffer2); + + // Check whethere two url are not equal + DALI_TEST_CHECK(url.GetUrl() != url2.GetUrl()); + + // Async loading, automatic atlasing for small size image + TraceCallStack& callStack = application.GetGlAbstraction().GetTextureTrace(); + callStack.Reset(); + callStack.Enable(true); + + Property::Map imageMap; + + imageMap[ ImageVisual::Property::URL ] = url.GetUrl(); + imageMap[ ImageVisual::Property::DESIRED_HEIGHT ] = 34; + imageMap[ ImageVisual::Property::DESIRED_WIDTH ] = 34; + imageMap[ ImageVisual::Property::ATLASING] = true; + + ImageView imageView = ImageView::New(); + imageView.SetProperty( ImageView::Property::IMAGE, imageMap ); + imageView.SetProperty( Toolkit::Control::Property::PADDING, Extents( 10u, 10u, 10u, 10u ) ); + + // By default, Aysnc loading is used + // loading is not started if the actor is offScene + + application.GetScene().Add( imageView ); + application.SendNotification(); + application.Render(16); + application.Render(16); + application.SendNotification(); + + // Change url to url2 + imageMap[ ImageVisual::Property::URL ] = url2.GetUrl(); + imageView.SetProperty( ImageView::Property::IMAGE, imageMap ); + + imageView.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::RIGHT_TO_LEFT ); + application.SendNotification(); + application.Render(16); + application.Render(16); + application.SendNotification(); + + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + application.SendNotification(); + application.Render(16); + + callStack.Enable(false); + + TraceCallStack::NamedParams params; + params["width"] << 34; + params["height"] << 34; + DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewSyncLoadingEncodedBuffer(void) +{ + ToolkitTestApplication application; + + tet_infoline("ImageView Testing sync loading from EncodedImageBuffer"); + + // Get encoded raw-buffer image and generate url + EncodedImageBuffer buffer = ConvertFileToEncodedImageBuffer(gImage_34_RGBA); + ImageUrl url = Toolkit::Image::GenerateUrl(buffer); + + // Sync loading, automatic atlasing for small size image + { + TraceCallStack& callStack = application.GetGlAbstraction().GetTextureTrace(); + callStack.Reset(); + callStack.Enable(true); + + ImageView imageView = ImageView::New( ); + + // Sync loading is used + Property::Map syncLoadingMap; + syncLoadingMap[ "url" ] = url.GetUrl(); + syncLoadingMap[ "desiredHeight" ] = 34; + syncLoadingMap[ "desiredWidth" ] = 34; + syncLoadingMap[ "synchronousLoading" ] = true; + syncLoadingMap[ "atlasing" ] = true; + imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap ); + + application.GetScene().Add( imageView ); + application.SendNotification(); + application.Render(16); + + TraceCallStack::NamedParams params; + params["width"] << 34; + params["height"] << 34; + DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), + true, TEST_LOCATION ); + } + + END_TEST; +} + int UtcDaliImageViewAddedTexture(void) { ToolkitTestApplication application; @@ -2738,12 +2891,122 @@ int UtcDaliImageViewSvgRasterizationFailure(void) END_TEST; } +int UtcDaliImageViewTVGLoading(void) +{ + ToolkitTestApplication application; + + tet_infoline("ImageView Testing TVG image loading"); + + { + ImageView imageView = ImageView::New( ); + + imageView.SetImage( TEST_RESOURCE_DIR "/test.tvg" ); + + application.GetScene().Add( imageView ); + DALI_TEST_CHECK( imageView ); + Vector3 naturalSize = imageView.GetNaturalSize(); + + DALI_TEST_EQUALS( naturalSize.width, 100.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( naturalSize.height, 100.0f, TEST_LOCATION ); + } + END_TEST; +} +int UtcDaliImageViewImageLoadFailure01(void) +{ + ToolkitTestApplication application; + + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::SMALL, TEST_BROKEN_IMAGE_S); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::NORMAL, TEST_BROKEN_IMAGE_M); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::LARGE, TEST_BROKEN_IMAGE_L); + + std::string brokenUrl; + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::SMALL); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_S, brokenUrl, TEST_LOCATION); + + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::NORMAL); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_M, brokenUrl, TEST_LOCATION); + + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::LARGE); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_L, brokenUrl, TEST_LOCATION); + + ImageView imageView = ImageView::New("invalidUrl.png"); + imageView.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) ); + + application.GetScene().Add( imageView ); + application.SendNotification(); + application.Render(16); + + // loading started, this waits for the loader thread + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewImageLoadFailure02(void) +{ + ToolkitTestApplication application; + + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::SMALL, TEST_BROKEN_IMAGE_DEFAULT); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::NORMAL, TEST_BROKEN_IMAGE_M); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::LARGE, TEST_BROKEN_IMAGE_L); + + std::string brokenUrl; + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::SMALL); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_DEFAULT, brokenUrl, TEST_LOCATION); + + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::NORMAL); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_M, brokenUrl, TEST_LOCATION); + + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::LARGE); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_L, brokenUrl, TEST_LOCATION); + + ImageView imageView = ImageView::New("invalidUrl.png"); + imageView.SetProperty( Actor::Property::SIZE, Vector2( 30.f, 30.f ) ); + application.GetScene().Add( imageView ); + application.SendNotification(); + application.Render(16); + + // loading started, this waits for the loader thread + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewImageLoadFailure03(void) +{ + ToolkitTestApplication application; + + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::SMALL, TEST_BROKEN_IMAGE_01); + DevelStyleManager::SetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::NORMAL, TEST_BROKEN_IMAGE_02); + + std::string brokenUrl; + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::SMALL); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_01, brokenUrl, TEST_LOCATION); + + brokenUrl = DevelStyleManager::GetBrokenImageUrl(styleManager, DevelStyleManager::BrokenImageType::NORMAL); + DALI_TEST_EQUALS( TEST_BROKEN_IMAGE_02, brokenUrl, TEST_LOCATION); + + ImageView imageView = ImageView::New("invalidUrl.png"); + imageView.SetProperty( Actor::Property::SIZE, Vector2( 100.f, 100.f ) ); + application.GetScene().Add( imageView ); + application.SendNotification(); + application.Render(16); + + // loading started, this waits for the loader thread + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + END_TEST; +} + namespace { static int gResourceReadySignalCounter = 0; -void OnResourceReadySignal( Control control ) +void OnResourceReadySignal01( Control control ) { gResourceReadySignalCounter++; @@ -2764,7 +3027,7 @@ void OnResourceReadySignal( Control control ) } } -void OnResourceReadySignal01( Control control ) +void OnResourceReadySignal02( Control control ) { if(++gResourceReadySignalCounter == 1) { @@ -2776,6 +3039,34 @@ void OnResourceReadySignal01( Control control ) } } +ImageView gImageView1; +ImageView gImageView2; +ImageView gImageView3; + +void OnResourceReadySignal03( Control control ) +{ + if(gResourceReadySignalCounter == 0) + { + // Queue loading + // 1. Use cached image, then LoadComplete will be called right after OnResourceReadySignal03. + gImageView2[ImageView::Property::IMAGE] = gImage_34_RGBA; + + // 2. Load a new image + gImageView3[ImageView::Property::IMAGE] = TEST_IMAGE_1; + + // 3. Use the new image again + gImageView1[ImageView::Property::IMAGE] = TEST_IMAGE_1; + gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal03); + } + else if(gResourceReadySignalCounter == 1) + { + // This is called from TextureManager::ProcessQueuedTextures(). + gImageView1.Unparent(); + gImageView1.Reset(); + } + gResourceReadySignalCounter++; +} + } int UtcDaliImageViewSetImageOnResourceReadySignal01(void) @@ -2787,7 +3078,7 @@ int UtcDaliImageViewSetImageOnResourceReadySignal01(void) gResourceReadySignalCounter = 0; ImageView imageView = ImageView::New( gImage_34_RGBA ); - imageView.ResourceReadySignal().Connect( &OnResourceReadySignal ); + imageView.ResourceReadySignal().Connect( &OnResourceReadySignal01 ); application.GetScene().Add( imageView ); @@ -2829,7 +3120,7 @@ int UtcDaliImageViewSetImageOnResourceReadySignal02(void) gResourceReadySignalCounter = 0; ImageView imageView = ImageView::New( gImage_34_RGBA ); - imageView.ResourceReadySignal().Connect( &OnResourceReadySignal01 ); + imageView.ResourceReadySignal().Connect( &OnResourceReadySignal02 ); application.GetScene().Add( imageView ); @@ -2847,3 +3138,32 @@ int UtcDaliImageViewSetImageOnResourceReadySignal02(void) END_TEST; } + +int UtcDaliImageViewSetImageOnResourceReadySignal03(void) +{ + tet_infoline("Test setting image from within signal handler."); + + ToolkitTestApplication application; + + gResourceReadySignalCounter = 0; + + gImageView1 = ImageView::New(gImage_34_RGBA); + application.GetScene().Add(gImageView1); + + // Wait for loading + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + gImageView2 = ImageView::New(gImage_600_RGB); + gImageView2.ResourceReadySignal().Connect(&OnResourceReadySignal03); + application.GetScene().Add(gImageView2); + + gImageView3 = ImageView::New(); + application.GetScene().Add(gImageView3); + + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + END_TEST; +}