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=02446a08b7c56b51d65b5a1e8cdec000d9414a9f;hp=31909d972d2f666097dbd2d7810348e32097cc59;hb=59314022f6789147a47a8b098433e211b6185625;hpb=c5224d3802b89aa7e9c043bf4e1bc0d8056f1121 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index 31909d9..02446a0 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -22,14 +22,17 @@ #include #include -#include #include -#include +#include +#include +#include +#include #include #include #include + #include "dummy-control.h" using namespace Dali; @@ -364,7 +367,7 @@ int UtcDaliImageViewSetGetProperty03(void) DALI_TEST_CHECK( srcFactorRgb == BlendFactor::ONE ); DALI_TEST_CHECK( destFactorRgb == BlendFactor::ONE_MINUS_SRC_ALPHA ); DALI_TEST_CHECK( srcFactorAlpha == BlendFactor::ONE ); - DALI_TEST_CHECK( destFactorAlpha == BlendFactor::ONE ); + DALI_TEST_CHECK( destFactorAlpha == BlendFactor::ONE_MINUS_SRC_ALPHA ); value = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); DALI_TEST_CHECK( value.Get( enable ) ); @@ -472,10 +475,11 @@ int UtcDaliImageViewAsyncLoadingWithAtlasing(void) imageMap[ ImageVisual::Property::URL ] = gImage_34_RGBA; imageMap[ ImageVisual::Property::DESIRED_HEIGHT ] = 34; imageMap[ ImageVisual::Property::DESIRED_WIDTH ] = 34; - imageMap[ DevelImageVisual::Property::ATLASING] = true; + 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 offStage @@ -486,6 +490,12 @@ int UtcDaliImageViewAsyncLoadingWithAtlasing(void) application.Render(16); application.SendNotification(); + 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 ); @@ -551,7 +561,7 @@ int UtcDaliImageViewSyncLoading(void) Property::Map syncLoadingMap; syncLoadingMap[ ImageVisual::Property::SYNCHRONOUS_LOADING ] = true; - syncLoadingMap[ DevelImageVisual::Property::ATLASING ] = true; + syncLoadingMap[ ImageVisual::Property::ATLASING ] = true; // Sync loading, no atlasing for big size image { @@ -589,7 +599,6 @@ int UtcDaliImageViewSyncLoading(void) END_TEST; } - int UtcDaliImageViewSyncLoading02(void) { ToolkitTestApplication application; @@ -626,6 +635,30 @@ int UtcDaliImageViewSyncLoading02(void) END_TEST; } +int UtcDaliImageViewAddedTexture(void) +{ + ToolkitTestApplication application; + + tet_infoline("ImageView Testing image view with texture provided manager url"); + + ImageView imageView = ImageView::New(); + + // empty texture is ok, though pointless from app point of view + TextureSet empty; + std::string url = TextureManager::AddTexture(empty); + DALI_TEST_CHECK(url.size() > 0u); + + Property::Map propertyMap; + propertyMap[ImageVisual::Property::URL] = url; + imageView.SetProperty(ImageView::Property::IMAGE, propertyMap); + + Stage::GetCurrent().Add( imageView ); + application.SendNotification(); + application.Render(); + + END_TEST; +} + int UtcDaliImageViewSizeWithBackground(void) { ToolkitTestApplication application; @@ -856,9 +889,9 @@ int UtcDaliImageViewCheckResourceReady(void) imageView.SetBackgroundImage( image ); - DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), false, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.IsResourceReady(), false, TEST_LOCATION ); - Toolkit::DevelControl::ResourceReadySignal( imageView ).Connect( &ResourceReadySignal); + imageView.ResourceReadySignal().Connect( &ResourceReadySignal); Stage::GetCurrent().Add( imageView ); @@ -866,7 +899,7 @@ int UtcDaliImageViewCheckResourceReady(void) application.Render(16); - DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION ); DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); @@ -932,43 +965,119 @@ int UtcDaliImageViewSetImageTypeChangesP(void) ToolkitTestApplication application; ImageView imageView = ImageView::New(); + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( imageView ); + Stage::GetCurrent().Add( imageView ); std::string url; Property::Map map; + Toolkit::Visual::Base visual; Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); + + application.SendNotification(); + application.Render( 16 ); + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + DALI_TEST_CHECK( ! visual ); // Visual should be invalid // Set a URL imageView.SetImage( "TEST_URL" ); + + application.SendNotification(); + application.Render( 16 ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); DALI_TEST_CHECK( value.Get( url ) ); // Value should NOT be empty DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + DALI_TEST_CHECK( visual ); // Visual should be valid // Set an empty Image imageView.SetImage( Image() ); + + application.SendNotification(); + application.Render( 16 ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + DALI_TEST_CHECK( ! visual ); // Visual should be invalid // Set an Image ResourceImage image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); imageView.SetImage( image1 ); + + application.SendNotification(); + application.Render( 16 ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty DALI_TEST_CHECK( value.Get( map ) ); // Value should NOT be empty + DALI_TEST_CHECK( visual ); // Visual should be valid // Set an empty URL imageView.SetImage( "" ); + + application.SendNotification(); + application.Render( 16 ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + DALI_TEST_CHECK( ! visual ); // Visual should be invalid + + // Set a URL in property map + Property::Map propertyMap; + propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME; + imageView.SetProperty( ImageView::Property::IMAGE, propertyMap ); + + application.SendNotification(); + application.Render( 16 ); + + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); + + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( value.Get( map ) ); // Value should NOT be empty + DALI_TEST_CHECK( visual ); // Visual should be valid + + // Set a URL in property map again + propertyMap[ImageVisual::Property::URL] = gImage_34_RGBA; + imageView.SetProperty( ImageView::Property::IMAGE, propertyMap ); + + application.SendNotification(); + application.Render( 16 ); + + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); + + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( value.Get( map ) ); // Value should NOT be empty + DALI_TEST_CHECK( visual ); // Visual should be valid + + // Set an empty URL in property map + propertyMap[ImageVisual::Property::URL] = std::string(); + imageView.SetProperty( ImageView::Property::IMAGE, propertyMap ); + + application.SendNotification(); + application.Render( 16 ); + + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + visual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); + + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( value.Get( map ) ); // Value should NOT be empty + DALI_TEST_CHECK( ! visual ); // Visual should be invalid END_TEST; } @@ -1323,9 +1432,9 @@ int UtcDaliImageViewReplaceImage(void) // 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 ); + DALI_TEST_EQUALS( imageView.IsResourceReady(), false, TEST_LOCATION ); - Toolkit::DevelControl::ResourceReadySignal( imageView ).Connect( &ResourceReadySignal); + imageView.ResourceReadySignal().Connect( &ResourceReadySignal); Stage::GetCurrent().Add( imageView ); @@ -1351,7 +1460,7 @@ int UtcDaliImageViewReplaceImage(void) DALI_TEST_EQUALS( imageView.GetRendererCount(), 1u, TEST_LOCATION ); - DALI_TEST_EQUALS( Toolkit::DevelControl::IsResourceReady( imageView ), true, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION ); DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); @@ -1406,3 +1515,196 @@ int UtcDaliImageViewReplaceImageAndGetNaturalSize(void) END_TEST; } + +int UtcDaliImageViewResourceReadySignalWithImmediateLoad(void) +{ + tet_infoline("Test Setting Image with IMMEDIATE load and receving ResourceReadySignal before staged."); + + ToolkitTestApplication application; + + gResourceReadySignalFired = false; + + Property::Map imageMap; + + imageMap[ ImageVisual::Property::URL ] = gImage_34_RGBA; + imageMap[ ImageVisual::Property::LOAD_POLICY ] = ImageVisual::LoadPolicy::IMMEDIATE; + + tet_infoline("Creating ImageView without URL so image does not start loading"); + ImageView imageView = ImageView::New(); + tet_infoline("Connect to image loaded signal before setting image"); + imageView.ResourceReadySignal().Connect( &ResourceReadySignal); + tet_infoline("Setting Image with IMMEDIATE load, signal already connected so will be triggered."); + imageView.SetProperty( ImageView::Property::IMAGE, imageMap ); + + // loading started, this waits for the loader thread + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + application.SendNotification(); + application.Render(16); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewResourceReadySignalWithReusedImage(void) +{ + tet_infoline("Test Setting Image that was already loaded by another ImageView and still getting ResourceReadySignal."); + + ToolkitTestApplication application; + + gResourceReadySignalFired = false; + + Property::Map imageMap; + + imageMap[ ImageVisual::Property::URL ] = gImage_34_RGBA; + imageMap[ ImageVisual::Property::LOAD_POLICY ] = ImageVisual::LoadPolicy::IMMEDIATE; + + ImageView imageView = ImageView::New(); + imageView.ResourceReadySignal().Connect( &ResourceReadySignal); + imageView.SetProperty( ImageView::Property::IMAGE, imageMap ); + + // loading started, this waits for the loader thread + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + application.SendNotification(); + application.Render(16); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + gResourceReadySignalFired = false; + + ImageView imageViewWithExistingImage = ImageView::New(); + imageViewWithExistingImage.ResourceReadySignal().Connect( &ResourceReadySignal); + imageViewWithExistingImage.SetProperty( ImageView::Property::IMAGE, imageMap ); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewResourceReadySignalWithReusedImage02(void) +{ + tet_infoline("Test Setting Image that was already loaded by another ImageView and still getting ResourceReadySignal when staged."); + + ToolkitTestApplication application; + + gResourceReadySignalFired = false; + + Property::Map imageImmediateLoadingMap; + imageImmediateLoadingMap[ ImageVisual::Property::URL ] = gImage_34_RGBA; + imageImmediateLoadingMap[ ImageVisual::Property::LOAD_POLICY ] = ImageVisual::LoadPolicy::IMMEDIATE; + + tet_infoline("Immediate load an image"); + ImageView imageView = ImageView::New(); + imageView.ResourceReadySignal().Connect( &ResourceReadySignal); + imageView.SetProperty( ImageView::Property::IMAGE, imageImmediateLoadingMap ); + + // loading started, this waits for the loader thread + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + application.SendNotification(); + application.Render(16); + + tet_infoline("Check image loaded"); + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + gResourceReadySignalFired = false; + + tet_infoline("Create another ImageView with the same URL"); + ImageView imageViewWithExistingImage = ImageView::New( gImage_34_RGBA ); + tet_infoline("Connect to ResourceReady signal for second ImageView, it should still fire as resource is ready"); + imageViewWithExistingImage.ResourceReadySignal().Connect( &ResourceReadySignal); + + Stage::GetCurrent().Add( imageViewWithExistingImage ); + + DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewPaddingProperty(void) +{ + ToolkitTestApplication application; + + ImageView imageView = ImageView::New(); + Property::Map imagePropertyMap; + imagePropertyMap[ Toolkit::Visual::Property::TYPE ] = Toolkit::Visual::IMAGE; + imagePropertyMap[ Toolkit::ImageVisual::Property::URL ] = TEST_RESOURCE_DIR "/gallery-small-1.jpg" ; + imagePropertyMap[ ImageVisual::Property::DESIRED_WIDTH ] = 128; + imagePropertyMap[ ImageVisual::Property::DESIRED_HEIGHT ] = 128; + imageView.SetProperty( Toolkit::ImageView::Property::IMAGE , imagePropertyMap ); + imageView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + imageView.SetParentOrigin( ParentOrigin::TOP_LEFT ); + imageView.SetProperty( Control::Property::PADDING, Extents( 15, 10, 5, 10 ) ); + Stage::GetCurrent().Add( imageView ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( imageView.GetProperty( Control::Property::PADDING ), Extents( 15, 10, 5, 10 ), TEST_LOCATION ); + + ImageView childImage = ImageView::New(); + childImage.SetBackgroundColor( Color::BLACK ); + childImage.SetSize( 10.f, 10.f ); + imageView.Add( childImage ); + + application.SendNotification(); + application.Render(); + + // Child ImageView should be positioned dependinig on Parent ImageView's Padding value + DALI_TEST_EQUALS( childImage.GetProperty( Dali::Actor::Property::POSITION ), Vector3( 15, 5, 0 ), TEST_LOCATION ); + + // Check whether Image Visual transforms on ImageVieiw::OnRelayout() + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( imageView ); + Toolkit::Visual::Base imageVisual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); + Property::Map resultMap; + imageVisual.CreatePropertyMap( resultMap ); + + Property::Value* transformValue = resultMap.Find( Visual::Property::TRANSFORM ); + DALI_TEST_CHECK( transformValue ); + Property::Map* retMap = transformValue->GetMap(); + DALI_TEST_CHECK( retMap ); + + // Image Visual should be positioned depending on ImageView's padding + DALI_TEST_EQUALS( retMap->Find( Visual::Transform::Property::OFFSET )->Get< Vector2 >(), Vector2( 15, 5 ), TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewPaddingProperty02(void) +{ + ToolkitTestApplication application; + + ImageView imageView = ImageView::New(); + Property::Map imagePropertyMap; + imagePropertyMap[ Toolkit::Visual::Property::TYPE ] = Toolkit::Visual::IMAGE; + imagePropertyMap[ Toolkit::ImageVisual::Property::URL ] = TEST_RESOURCE_DIR "/Kid1.svg" ; + imagePropertyMap[ ImageVisual::Property::DESIRED_WIDTH ] = 128; + imagePropertyMap[ ImageVisual::Property::DESIRED_HEIGHT ] = 128; + imagePropertyMap[ DevelVisual::Property::VISUAL_FITTING_MODE ] = Toolkit::DevelVisual::FIT_KEEP_ASPECT_RATIO; + imageView.SetProperty( Toolkit::ImageView::Property::IMAGE , imagePropertyMap ); + imageView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + imageView.SetParentOrigin( ParentOrigin::TOP_LEFT ); + imageView.SetProperty( Control::Property::PADDING, Extents( 15, 10, 5, 10 ) ); + Stage::GetCurrent().Add( imageView ); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( imageView.GetProperty( Control::Property::PADDING ), Extents( 15, 10, 5, 10 ), TEST_LOCATION ); + + // Check whether Image Visual transforms on ImageVieiw::OnRelayout() + Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( imageView ); + Toolkit::Visual::Base imageVisual = DevelControl::GetVisual( controlImpl, ImageView::Property::IMAGE ); + Property::Map resultMap; + imageVisual.CreatePropertyMap( resultMap ); + + Property::Value* transformValue = resultMap.Find( Visual::Property::TRANSFORM ); + DALI_TEST_CHECK( transformValue ); + Property::Map* retMap = transformValue->GetMap(); + DALI_TEST_CHECK( retMap ); + + // Image Visual should be positioned depending on ImageView's padding + DALI_TEST_EQUALS( retMap->Find( Visual::Transform::Property::OFFSET )->Get< Vector2 >(), Vector2( 15, 5 ), TEST_LOCATION ); + + END_TEST; +}