X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-ImageView.cpp;h=31909d972d2f666097dbd2d7810348e32097cc59;hb=74c8fd064793430f586e7f2572e3a0bd0fb50af4;hp=596d09a4f74ba88c3597a2fdb89a22d7ddb172da;hpb=95a302ea0e9bf69e55e92e08f5be759db1971b2a;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index 596d09a..31909d9 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -18,16 +18,19 @@ // Need to override adaptor classes for toolkit test harness, so include // test harness headers before dali headers. #include -#include #include #include #include #include +#include #include #include #include +#include + +#include "dummy-control.h" using namespace Dali; using namespace Toolkit; @@ -76,6 +79,9 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg"; 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"; + // resolution: 34*34, pixel format: RGBA8888 static const char* gImage_34_RGBA = TEST_RESOURCE_DIR "/icon-edit.png"; // resolution: 600*600, pixel format: RGB888 @@ -426,20 +432,28 @@ int UtcDaliImageViewPixelArea(void) int UtcDaliImageViewAsyncLoadingWithoutAltasing(void) { ToolkitTestApplication application; + TestGlAbstraction& gl = application.GetGlAbstraction(); + const std::vector& textures = gl.GetBoundTextures(); + size_t numTextures = textures.size(); // Async loading, no atlasing for big size image ImageView imageView = ImageView::New( gImage_600_RGB ); // By default, Aysnc loading is used Stage::GetCurrent().Add( imageView ); + imageView.SetSize(100, 100); + imageView.SetParentOrigin( ParentOrigin::CENTER ); + + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + application.SendNotification(); application.Render(16); - application.Render(16); application.SendNotification(); - // BitmapLoader is not used - BitmapLoader loader = BitmapLoader::GetLatestCreated(); - DALI_TEST_CHECK( !loader ); + const std::vector& textures2 = gl.GetBoundTextures(); + DALI_TEST_GREATER( textures2.size(), numTextures, TEST_LOCATION ); + + END_TEST; } @@ -546,35 +560,22 @@ int UtcDaliImageViewSyncLoading(void) // Sync loading is used syncLoadingMap[ ImageVisual::Property::URL ] = gImage_600_RGB; imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap ); - - - // BitmapLoader is used, and the loading is started immediately even the actor is not on stage. - BitmapLoader loader = BitmapLoader::GetLatestCreated(); - DALI_TEST_CHECK( loader ); } // Sync loading, automatic atlasing for small size image { - BitmapLoader::ResetLatestCreated(); TraceCallStack& callStack = application.GetGlAbstraction().GetTextureTrace(); callStack.Reset(); callStack.Enable(true); ImageView imageView = ImageView::New( ); + // Sync loading is used syncLoadingMap[ ImageVisual::Property::URL ] = gImage_34_RGBA; syncLoadingMap[ ImageVisual::Property::DESIRED_HEIGHT ] = 34; syncLoadingMap[ ImageVisual::Property::DESIRED_WIDTH ] = 34; imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap ); - // loading is started even if the actor is offStage - BitmapLoader loader = BitmapLoader::GetLatestCreated(); - DALI_TEST_CHECK( loader ); - - loader.WaitForLoading(); - - DALI_TEST_CHECK( loader.IsLoaded() ); - Stage::GetCurrent().Add( imageView ); application.SendNotification(); application.Render(16); @@ -597,7 +598,6 @@ int UtcDaliImageViewSyncLoading02(void) // Sync loading, automatic atlasing for small size image { - BitmapLoader::ResetLatestCreated(); TraceCallStack& callStack = application.GetGlAbstraction().GetTextureTrace(); callStack.Reset(); callStack.Enable(true); @@ -613,14 +613,6 @@ int UtcDaliImageViewSyncLoading02(void) syncLoadingMap[ "atlasing" ] = true; imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap ); - // loading is started even if the actor is offStage - BitmapLoader loader = BitmapLoader::GetLatestCreated(); - DALI_TEST_CHECK( loader ); - - loader.WaitForLoading(); - - DALI_TEST_CHECK( loader.IsLoaded() ); - Stage::GetCurrent().Add( imageView ); application.SendNotification(); application.Render(16); @@ -840,6 +832,47 @@ int UtcDaliImageViewSetImageOffstageP(void) END_TEST; } +bool gResourceReadySignalFired = false; +Vector3 gNaturalSize; + +void ResourceReadySignal( Control control ) +{ + gResourceReadySignalFired = true; +} + +int UtcDaliImageViewCheckResourceReady(void) +{ + ToolkitTestApplication application; + + gResourceReadySignalFired = false; + + + int width = 100; + int height = 200; + Image image = CreateBufferImage( width, height, Vector4(1.f, 1.f, 1.f, 1.f) ); + + // Check ImageView with background and main image, to ensure both visuals are marked as loaded + ImageView imageView = ImageView::New( TEST_GIF_FILE_NAME ); + + imageView.SetBackgroundImage( image ); + + DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), false, TEST_LOCATION ); + + Toolkit::DevelControl::ResourceReadySignal( imageView ).Connect( &ResourceReadySignal); + + Stage::GetCurrent().Add( imageView ); + + application.SendNotification(); + application.Render(16); + + + DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), true, TEST_LOCATION ); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliImageViewSetImageOffstageN(void) { ToolkitTestApplication application; @@ -1275,3 +1308,101 @@ int UtcDaliImageViewGetImageN(void) END_TEST; } + + +int UtcDaliImageViewReplaceImage(void) +{ + ToolkitTestApplication application; + + gResourceReadySignalFired = false; + + int width = 100; + int height = 200; + Image image = CreateBufferImage( width, height, Vector4(1.f, 1.f, 1.f, 1.f) ); + + // Check ImageView with background and main image, to ensure both visuals are marked as loaded + ImageView imageView = ImageView::New( TEST_IMAGE_1 ); + + DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), false, TEST_LOCATION ); + + Toolkit::DevelControl::ResourceReadySignal( imageView ).Connect( &ResourceReadySignal); + + Stage::GetCurrent().Add( imageView ); + + application.SendNotification(); + application.Render(16); + + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + DALI_TEST_EQUALS( imageView.GetRendererCount(), 1u, TEST_LOCATION ); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + gResourceReadySignalFired = false; + + imageView.SetImage(TEST_IMAGE_2); + + application.SendNotification(); + application.Render(16); + + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + DALI_TEST_EQUALS( imageView.GetRendererCount(), 1u, TEST_LOCATION ); + + DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), true, TEST_LOCATION ); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + +void OnRelayoutOverride( Size size ) +{ + gNaturalSize = size; // Size Relayout is using +} + +int UtcDaliImageViewReplaceImageAndGetNaturalSize(void) +{ + ToolkitTestApplication application; + + // Check ImageView with background and main image, to ensure both visuals are marked as loaded + ImageView imageView = ImageView::New( TEST_IMAGE_1 ); + imageView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); + + DummyControl dummyControl = DummyControl::New( true ); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyControl.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + + dummyControl.Add( imageView ); + dummyImpl.SetRelayoutCallback( &OnRelayoutOverride ); + Stage::GetCurrent().Add( dummyControl ); + + application.SendNotification(); + application.Render(); + + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + DALI_TEST_EQUALS( gNaturalSize.width, 1024.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( gNaturalSize.height, 1024.0f, TEST_LOCATION ); + + gNaturalSize = Vector3::ZERO; + + imageView.SetImage(gImage_600_RGB); + + // Waiting for resourceReady so SendNotifcation not called here. + + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + // Trigger a potential relayout + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( gNaturalSize.width, 600.0f, TEST_LOCATION ); + DALI_TEST_EQUALS( gNaturalSize.height, 600.0f, TEST_LOCATION ); + + END_TEST; +}