+
+// Scenarios 1: ImageView from regular image
+int UtcDaliImageViewSetImageBufferImage(void)
+{
+ ToolkitTestApplication application;
+
+ ImageView imageView = ImageView::New();
+ Stage::GetCurrent().Add( imageView );
+
+ TestGlAbstraction& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace( true );
+
+ std::vector< GLuint > ids;
+ ids.push_back( 23 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ int width = 300;
+ int height = 400;
+ BufferImage image = CreateBufferImage( width, height, Color::WHITE );
+
+ imageView.SetImage( image );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream params;
+ params << GL_TEXTURE_2D << ", " << 23;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) );
+
+ END_TEST;
+}
+
+// Scenarios 2: ImageView from Native image
+int UtcDaliImageViewSetImageNativeImage(void)
+{
+ ToolkitTestApplication application;
+
+ ImageView imageView = ImageView::New();
+ Stage::GetCurrent().Add( imageView );
+
+ TestGlAbstraction& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace( true );
+
+ std::vector< GLuint > ids;
+ ids.push_back( 23 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ int width = 200;
+ int height = 500;
+ TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height );
+ NativeImage nativeImage = NativeImage::New( *(nativeImageInterface.Get()) );
+
+ imageView.SetImage( nativeImage );
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream params;
+ params << GL_TEXTURE_EXTERNAL_OES << ", " << 23;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) );
+
+ END_TEST;
+}
+
+// Scenarios 3: ImageView initially from regular image but then SetImage called with Native image
+int UtcDaliImageViewSetImageBufferImageToNativeImage(void)
+{
+ ToolkitTestApplication application;
+
+ int width = 300;
+ int height = 400;
+ BufferImage image = CreateBufferImage( width, height, Color::WHITE );
+
+ ImageView imageView = ImageView::New( image );
+ Stage::GetCurrent().Add( imageView );
+
+ TestGlAbstraction& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace( true );
+
+ std::vector< GLuint > ids;
+ ids.push_back( 23 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream params;
+ params << GL_TEXTURE_2D << ", " << 23;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) );
+
+ width = 200;
+ height = 500;
+ TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height );
+ NativeImage nativeImage = NativeImage::New( *(nativeImageInterface.Get()) );
+ imageView.SetImage( nativeImage );
+
+ ids.clear();
+ ids.push_back( 24 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream nextTextureParams;
+ nextTextureParams << GL_TEXTURE_EXTERNAL_OES << ", " << 24;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", nextTextureParams.str()) );
+
+ END_TEST;
+}
+
+// Scenarios 4: ImageView initially from Native image but then SetImage called with regular image
+int UtcDaliImageViewSetImageNativeImageToBufferImage(void)
+{
+ ToolkitTestApplication application;
+
+ int width = 300;
+ int height = 400;
+ TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height );
+ NativeImage nativeImage = NativeImage::New( *(nativeImageInterface.Get()) );
+
+ ImageView imageView = ImageView::New( nativeImage );
+ Stage::GetCurrent().Add( imageView );
+
+ TestGlAbstraction& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace( true );
+
+ std::vector< GLuint > ids;
+ ids.push_back( 23 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream params;
+ params << GL_TEXTURE_EXTERNAL_OES << ", " << 23;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) );
+
+ width = 200;
+ height = 500;
+ BufferImage image = CreateBufferImage( width, height, Color::WHITE );
+ imageView.SetImage( image );
+
+ ids.clear();
+ ids.push_back( 24 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream nextTextureParams;
+ nextTextureParams << GL_TEXTURE_2D << ", " << 24;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", nextTextureParams.str()) );
+
+ END_TEST;
+}
+
+// Scenarios 5: ImageView from Native image with custom shader
+int UtcDaliImageViewSetImageNativeImageWithCustomShader(void)
+{
+ ToolkitTestApplication application;
+
+ int width = 300;
+ int height = 400;
+
+ Property::Map customShader;
+ customShader.Insert( "vertexShader", VERTEX_SHADER );
+ customShader.Insert( "fragmentShader", FRAGMENT_SHADER );
+
+ Property::Array shaderHints;
+ shaderHints.PushBack( "requiresSelfDepthTest" );
+ shaderHints.PushBack( "outputIsTransparent" );
+ shaderHints.PushBack( "outputIsOpaque" );
+ shaderHints.PushBack( "modifiesGeometry" );
+
+ customShader.Insert( "hints", shaderHints );
+
+ Property::Map map;
+ map.Insert( "shader", customShader );
+
+ TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height );
+ NativeImage nativeImage = NativeImage::New( *(nativeImageInterface.Get()) );
+
+ ImageView imageView = ImageView::New( nativeImage );
+ imageView.SetProperty( ImageView::Property::IMAGE, map );
+ Stage::GetCurrent().Add( imageView );
+
+ TestGlAbstraction& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace( true );
+
+ std::vector< GLuint > ids;
+ ids.push_back( 23 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream params;
+ params << GL_TEXTURE_EXTERNAL_OES << ", " << 23;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) );
+
+ END_TEST;
+}
+
+// Scenarios 6: ImageView initially from regular image with custom shader but then SetImage called with Native
+int UtcDaliImageViewSetImageBufferImageWithCustomShaderToNativeImage(void)
+{
+ ToolkitTestApplication application;
+
+ int width = 300;
+ int height = 400;
+
+ Property::Map customShader;
+ customShader.Insert( "vertexShader", VERTEX_SHADER );
+ customShader.Insert( "fragmentShader", FRAGMENT_SHADER );
+
+ Property::Array shaderHints;
+ shaderHints.PushBack( "requiresSelfDepthTest" );
+ shaderHints.PushBack( "outputIsTransparent" );
+ shaderHints.PushBack( "outputIsOpaque" );
+ shaderHints.PushBack( "modifiesGeometry" );
+
+ customShader.Insert( "hints", shaderHints );
+
+ Property::Map map;
+ map.Insert( "shader", customShader );
+
+ BufferImage image = CreateBufferImage( width, height, Color::WHITE );
+
+ ImageView imageView = ImageView::New( image );
+ imageView.SetProperty( ImageView::Property::IMAGE, map );
+ Stage::GetCurrent().Add( imageView );
+
+ TestGlAbstraction& gl = application.GetGlAbstraction();
+ gl.EnableTextureCallTrace( true );
+
+ std::vector< GLuint > ids;
+ ids.push_back( 23 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream params;
+ params << GL_TEXTURE_2D << ", " << 23;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) );
+
+ TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height );
+ NativeImage nativeImage = NativeImage::New( *(nativeImageInterface.Get()) );
+ imageView.SetImage( nativeImage );
+
+ ids.clear();
+ ids.push_back( 24 );
+ application.GetGlAbstraction().SetNextTextureIds( ids );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") );
+
+ std::stringstream nativeImageParams;
+ nativeImageParams << GL_TEXTURE_EXTERNAL_OES << ", " << 24;
+ DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", nativeImageParams.str()) );
+
+
+ END_TEST;
+}
+
+int UtcDaliImageViewGetImageP1(void)
+{
+ ToolkitTestApplication application;
+
+ ImageView imageView = ImageView::New();
+ DALI_TEST_CHECK( ! imageView.GetImage() );
+
+ Image image = CreateBufferImage();
+ imageView.SetImage( image );
+ DALI_TEST_CHECK( imageView.GetImage() == image );
+
+ END_TEST;
+}
+
+int UtcDaliImageViewGetImageP2(void)
+{
+ ToolkitTestApplication application;
+
+ BufferImage image = CreateBufferImage();
+ ImageView imageView = ImageView::New( image );
+ DALI_TEST_CHECK( imageView.GetImage() == image );
+
+ END_TEST;
+}
+
+int UtcDaliImageViewGetImageN(void)
+{
+ ToolkitTestApplication application;
+
+ ImageView imageView = ImageView::New( TEST_IMAGE_FILE_NAME );
+ DALI_TEST_CHECK( ! imageView.GetImage() );
+
+ Image image = CreateBufferImage();
+ imageView.SetImage( image );
+ DALI_TEST_CHECK( imageView.GetImage() == image );
+
+ imageView.SetImage( TEST_IMAGE_FILE_NAME );
+ DALI_TEST_CHECK( ! imageView.GetImage() );
+
+ 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( imageView.IsResourceReady(), false, TEST_LOCATION );
+
+ imageView.ResourceReadySignal().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( imageView.IsResourceReady(), 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<Impl::DummyControl&>(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;
+}
+
+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<Extents>( 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<Vector3>( 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<Extents>( 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;
+}