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=709282a88628cb60dafcd72eaf7e898d7385b773;hp=8e9f8fe88ac917252a2836d0a9c7d024d176e3f7;hb=9aece33ac67480cc57ed5d86ab4370fe313330ee;hpb=e80261307788b4656435c4dd964beff7c85e7e8c diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index 8e9f8fe..709282a 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -18,8 +18,15 @@ // 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 using namespace Dali; using namespace Toolkit; @@ -36,7 +43,108 @@ void utc_dali_toolkit_image_view_cleanup(void) namespace { + +const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( + attribute mediump vec2 aPosition;\n + varying mediump vec2 vTexCoord;\n + uniform mediump mat4 uMvpMatrix;\n + uniform mediump vec3 uSize;\n + \n + void main()\n + {\n + mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n + vertexPosition.xyz *= uSize;\n + vertexPosition = uMvpMatrix * vertexPosition;\n + \n + vTexCoord = aPosition + vec2(0.5);\n + gl_Position = vertexPosition;\n + }\n +); + +const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( + varying mediump vec2 vTexCoord;\n + uniform sampler2D sTexture;\n + uniform lowp vec4 uColor;\n + \n + void main()\n + {\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n + }\n +); + const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg"; +const char* TEST_IMAGE_FILE_NAME2 = "gallery_image_02.jpg"; + +// resolution: 34*34, pixel format: RGBA8888 +static const char* gImage_34_RGBA = TEST_RESOURCE_DIR "/icon-edit.png"; +// resolution: 600*600, pixel format: RGB888 +static const char* gImage_600_RGB = TEST_RESOURCE_DIR "/test-image-600.jpg"; + +void TestImage( ImageView imageView, BufferImage image ) +{ + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + Property::Map map; + DALI_TEST_CHECK( value.Get( map ) ); + + DALI_TEST_CHECK( map.Find( "width" ) ); + DALI_TEST_CHECK( map.Find( "height" ) ); + DALI_TEST_CHECK( map.Find( "type" ) ); + + int width = 0; + DALI_TEST_CHECK( map[ "width" ].Get( width ) ); + DALI_TEST_EQUALS( (unsigned int)width, image.GetWidth(), TEST_LOCATION ); + + int height = 0; + DALI_TEST_CHECK( map[ "height" ].Get( height ) ); + DALI_TEST_EQUALS( (unsigned int)height, image.GetHeight(), TEST_LOCATION ); + + std::string type; + DALI_TEST_CHECK( map[ "type" ].Get( type ) ); + DALI_TEST_EQUALS( type, "BufferImage", TEST_LOCATION ); +} + +void TestImage( ImageView imageView, ResourceImage image ) +{ + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + Property::Map map; + DALI_TEST_CHECK( value.Get( map ) ); + + if( map.Find( "width" ) ) + { + int width = 0; + DALI_TEST_CHECK( map[ "width" ].Get( width ) ); + DALI_TEST_EQUALS( (unsigned int)width, image.GetWidth(), TEST_LOCATION ); + } + + if( map.Find( "height" ) ) + { + int height = 0; + DALI_TEST_CHECK( map[ "height" ].Get( height ) ); + DALI_TEST_EQUALS( (unsigned int)height, image.GetHeight(), TEST_LOCATION ); + } + + DALI_TEST_CHECK( map.Find( "type" ) ); + + std::string type; + DALI_TEST_CHECK( map[ "type" ].Get( type ) ); + DALI_TEST_EQUALS( type, "ResourceImage", TEST_LOCATION ); + + std::string filename; + DALI_TEST_CHECK( map[ "filename" ].Get( filename ) ); + DALI_TEST_EQUALS( filename, image.GetUrl(), TEST_LOCATION ); +} + +void TestUrl( ImageView imageView, const std::string url ) +{ + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + std::string urlActual; + DALI_TEST_CHECK( value.Get( urlActual ) ); + DALI_TEST_EQUALS( urlActual, url, TEST_LOCATION ); +} + } // namespace int UtcDaliImageViewNewP(void) @@ -54,11 +162,11 @@ int UtcDaliImageViewNewImageP(void) { TestApplication application; - Image image = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + BufferImage image = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) ); ImageView imageView = ImageView::New( image ); DALI_TEST_CHECK( imageView ); - DALI_TEST_EQUALS( image, imageView.GetImage(), TEST_LOCATION ); + TestImage( imageView, image ); END_TEST; } @@ -69,19 +177,8 @@ int UtcDaliImageViewNewUrlP(void) ImageView imageView = ImageView::New( TEST_IMAGE_FILE_NAME ); DALI_TEST_CHECK( imageView ); - DALI_TEST_CHECK( imageView.GetImage() ); - Property::Value val = imageView.GetProperty( imageView.GetPropertyIndex( "resource-url" ) ); - std::string resource_url; - DALI_TEST_CHECK( val.Get( resource_url ) ); - DALI_TEST_EQUALS( resource_url, TEST_IMAGE_FILE_NAME, TEST_LOCATION ); - - Image image = imageView.GetImage(); - DALI_TEST_CHECK( image ); - - ResourceImage resourceImage = ResourceImage::DownCast( image ); - DALI_TEST_CHECK( resourceImage ); - DALI_TEST_EQUALS( resourceImage.GetUrl(), TEST_IMAGE_FILE_NAME, TEST_LOCATION ); + TestUrl( imageView, TEST_IMAGE_FILE_NAME ); END_TEST; } @@ -174,31 +271,223 @@ int UtcDaliImageViewTypeRegistry(void) END_TEST; } -int UtcDaliImageViewSetGetProperty(void) +int UtcDaliImageViewSetGetProperty01(void) { ToolkitTestApplication application; ImageView imageView = ImageView::New(); - Property::Index idx = imageView.GetPropertyIndex( "resource-url" ); - DALI_TEST_EQUALS( idx, ImageView::Property::RESOURCE_URL, TEST_LOCATION ); + Property::Index idx = imageView.GetPropertyIndex( "image" ); + DALI_TEST_EQUALS( idx, (Property::Index)ImageView::Property::IMAGE, TEST_LOCATION ); imageView.SetProperty( idx, TEST_IMAGE_FILE_NAME ); - Property::Value val = imageView.GetProperty( idx ); - std::string resource_url; - DALI_TEST_CHECK( val.Get( resource_url ) ); - DALI_TEST_EQUALS( resource_url, TEST_IMAGE_FILE_NAME, TEST_LOCATION ); + TestUrl( imageView, TEST_IMAGE_FILE_NAME ); + + END_TEST; +} + +int UtcDaliImageViewSetGetProperty02(void) +{ + ToolkitTestApplication application; + + Image image = CreateBufferImage( 10, 10, Color::WHITE ); + ImageView imageView = ImageView::New(image); + Vector4 fullImageRect( 0.f, 0.f, 1.f, 1.f ); + + Stage::GetCurrent().Add( imageView ); + + application.SendNotification(); + application.Render(); + TestGlAbstraction& gl = application.GetGlAbstraction(); + + Vector4 pixelAreaUniform; + DALI_TEST_CHECK( gl.GetUniformValue( "pixelArea", pixelAreaUniform ) ); + DALI_TEST_EQUALS( pixelAreaUniform, fullImageRect, TEST_LOCATION ); + + Property::Value value = imageView.GetProperty( ImageView::Property::PIXEL_AREA ); + Vector4 pixelAreaValue; + DALI_TEST_CHECK( value.Get(pixelAreaValue) ); + DALI_TEST_EQUALS( pixelAreaValue, fullImageRect, TEST_LOCATION ); + + Vector4 pixelAreaSet( 0.2f, 0.2f, 0.3f, 0.3f ); + imageView.SetProperty( ImageView::Property::PIXEL_AREA, pixelAreaSet); + + application.SendNotification(); + application.Render(); + + value = imageView.GetProperty( ImageView::Property::PIXEL_AREA ); + value.Get(pixelAreaValue); + DALI_TEST_EQUALS( pixelAreaValue, pixelAreaSet, TEST_LOCATION ); + + DALI_TEST_CHECK( gl.GetUniformValue( "pixelArea", pixelAreaUniform ) ); + DALI_TEST_EQUALS( pixelAreaUniform, pixelAreaSet, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewSetGetProperty03(void) +{ + ToolkitTestApplication application; + + Image image = CreateBufferImage( 10, 10, Color::WHITE ); + ImageView imageView = ImageView::New(image); + Stage::GetCurrent().Add( imageView ); + application.SendNotification(); + application.Render(); + + // conventional alpha blending + Renderer renderer = imageView.GetRendererAt( 0 ); + Property::Value value = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); + bool enable; + DALI_TEST_CHECK( value.Get( enable ) ); + DALI_TEST_CHECK( !enable ); + + // pre-multiplied alpha blending + imageView.SetProperty( Toolkit::ImageView::Property::PRE_MULTIPLIED_ALPHA, true ); + application.SendNotification(); + application.Render(); + + int srcFactorRgb = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_SRC_RGB ); + int destFactorRgb = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB ); + int srcFactorAlpha = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_SRC_ALPHA ); + int destFactorAlpha = renderer.GetProperty( Renderer::Property::BLEND_FACTOR_DEST_ALPHA ); + DALI_TEST_CHECK( srcFactorRgb == BlendingFactor::ONE ); + DALI_TEST_CHECK( destFactorRgb == BlendingFactor::ONE_MINUS_SRC_ALPHA ); + DALI_TEST_CHECK( srcFactorAlpha == BlendingFactor::ONE ); + DALI_TEST_CHECK( destFactorAlpha == BlendingFactor::ONE ); + + value = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); + DALI_TEST_CHECK( value.Get( enable ) ); + DALI_TEST_CHECK( enable ); - Image image = imageView.GetImage(); - DALI_TEST_CHECK( image ); + END_TEST; +} + +int UtcDaliImageViewAsyncLoadingWithoutAltasing(void) +{ + ToolkitTestApplication application; + + // 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 ); + application.SendNotification(); + application.Render(16); + application.Render(16); + application.SendNotification(); - ResourceImage resourceImage = ResourceImage::DownCast( image ); - DALI_TEST_CHECK( resourceImage ); - DALI_TEST_EQUALS( resourceImage.GetUrl(), TEST_IMAGE_FILE_NAME, TEST_LOCATION ); + // BitmapLoader is not used + BitmapLoader loader = BitmapLoader::GetLatestCreated(); + DALI_TEST_CHECK( !loader ); END_TEST; } +int UtcDaliImageViewAsyncLoadingWithAltasing(void) +{ + ToolkitTestApplication application; + + //Async loading, automatic atlasing for small size image + TraceCallStack& callStack = application.GetGlAbstraction().GetTextureTrace(); + callStack.Reset(); + callStack.Enable(true); + + ImageView imageView = ImageView::New( gImage_34_RGBA, ImageDimensions( 34, 34 ) ); + + // By default, Aysnc loading is used + // loading is not started if the actor is offStage + BitmapLoader loader = BitmapLoader::GetLatestCreated(); + DALI_TEST_CHECK( !loader ); + + Stage::GetCurrent().Add( imageView ); + application.SendNotification(); + application.Render(16); + application.Render(16); + application.SendNotification(); + + // loading started + loader = BitmapLoader::GetLatestCreated(); + DALI_TEST_CHECK( loader ); + + // worker thread is created + EventThreadCallback* eventTrigger = EventThreadCallback::Get(); + DALI_TEST_CHECK( eventTrigger ); + + loader.WaitForLoading();// waiting until the image to be loaded + DALI_TEST_CHECK( loader.IsLoaded() ); + + CallbackBase* callback = eventTrigger->GetCallback(); + CallbackBase::Execute( *callback ); + + application.SendNotification(); + application.Render(16); + + callStack.Enable(false); + + TraceCallStack::NamedParams params; + params["width"] = ToString(34); + params["height"] = ToString(34); + DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), true, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliImageViewSyncLoading(void) +{ + ToolkitTestApplication application; + + Property::Map syncLoadingMap; + syncLoadingMap[ "synchronousLoading" ] = true; + + // Sync loading, no atlasing for big size image + { + ImageView imageView = ImageView::New(); + + // Sync loading is used + syncLoadingMap[ "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[ "url" ] = gImage_34_RGBA; + syncLoadingMap[ "desiredHeight" ] = 34; + syncLoadingMap[ "desiredWidth" ] = 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); + + TraceCallStack::NamedParams params; + params["width"] = ToString(34); + params["height"] = ToString(34); + DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), + true, TEST_LOCATION ); + } + END_TEST; +} + int UtcDaliImageViewSizeWithBackground(void) { ToolkitTestApplication application; @@ -213,8 +502,8 @@ int UtcDaliImageViewSizeWithBackground(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( imageView.GetCurrentSize().width, width, TEST_LOCATION ); - DALI_TEST_EQUALS( imageView.GetCurrentSize().height, height, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.GetCurrentSize().width, (float)width, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.GetCurrentSize().height, (float)height, TEST_LOCATION ); END_TEST; } @@ -238,8 +527,8 @@ int UtcDaliImageViewSizeWithBackgroundAndImage(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( imageView.GetCurrentSize().width, width, TEST_LOCATION ); - DALI_TEST_EQUALS( imageView.GetCurrentSize().height, height, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.GetCurrentSize().width, (float)width, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.GetCurrentSize().height, (float)height, TEST_LOCATION ); END_TEST; } @@ -286,8 +575,8 @@ int UtcDaliImageViewHeightForWidthBackgroundAndImage(void) application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( imageView.GetHeightForWidth( width ), height, TEST_LOCATION ); - DALI_TEST_EQUALS( imageView.GetWidthForHeight( height ), width, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.GetHeightForWidth( width ), (float)height, TEST_LOCATION ); + DALI_TEST_EQUALS( imageView.GetWidthForHeight( height ), (float)width, TEST_LOCATION ); END_TEST; } @@ -296,32 +585,35 @@ int UtcDaliImageViewSetBufferImage(void) { ToolkitTestApplication application; - int width = 300; - int height = 400; - Image image = CreateBufferImage( width, height, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + int width1 = 300; + int height1 = 400; + BufferImage image1 = CreateBufferImage( width1, height1, Vector4( 1.f, 1.f, 1.f, 1.f ) ); ImageView imageView = ImageView::New(); - imageView.SetImage( image ); + imageView.SetImage( image1 ); - std::string resource_url; - Property::Value val = imageView.GetProperty( imageView.GetPropertyIndex( "resource-url" ) ); - DALI_TEST_CHECK( val.Get( resource_url ) ); - DALI_TEST_CHECK( resource_url.empty() ); + TestImage( imageView, image1 ); + + int width2 = 600; + int height2 = 500; + BufferImage image2 = CreateBufferImage( width2, height2, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + imageView.SetImage( image2 ); + + TestImage( imageView, image2 ); END_TEST; } -int UtcDaliImageViewSetResourceImage(void) +int UtcDaliImageViewSetImageUrl(void) { ToolkitTestApplication application; - Image image = ResourceImage::New( TEST_IMAGE_FILE_NAME ); ImageView imageView = ImageView::New(); - imageView.SetImage( image ); + imageView.SetImage( TEST_IMAGE_FILE_NAME ); + TestUrl( imageView, TEST_IMAGE_FILE_NAME ); - std::string resource_url; - Property::Value val = imageView.GetProperty( imageView.GetPropertyIndex( "resource-url" ) ); - DALI_TEST_CHECK( val.Get( resource_url ) ); - DALI_TEST_EQUALS( resource_url, TEST_IMAGE_FILE_NAME, TEST_LOCATION ); + + imageView.SetImage( TEST_IMAGE_FILE_NAME2 ); + TestUrl( imageView, TEST_IMAGE_FILE_NAME2 ); END_TEST; } @@ -336,19 +628,15 @@ int UtcDaliImageViewSetImageOnstageP(void) application.SendNotification(); application.Render(); - Image image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); + ResourceImage image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); imageView.SetImage( image1 ); - - Image image2 = imageView.GetImage(); - DALI_TEST_EQUALS( image1, image2, TEST_LOCATION ); + TestImage( imageView, image1 ); int width = 300; int height = 400; - Image image3 = CreateBufferImage( width, height, Vector4( 1.f, 1.f, 1.f, 1.f ) ); - imageView.SetImage( image3 ); - - Image image4 = imageView.GetImage(); - DALI_TEST_EQUALS( image3, image4, TEST_LOCATION ); + BufferImage image2 = CreateBufferImage( width, height, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + imageView.SetImage( image2 ); + TestImage( imageView, image2 ); END_TEST; } @@ -363,17 +651,21 @@ int UtcDaliImageViewSetImageOnstageN(void) application.SendNotification(); application.Render(); - Image image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); + ResourceImage image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); imageView.SetImage( image1 ); + TestImage( imageView, image1 ); + + Image image2; + imageView.SetImage( image2 ); - Image image2 = imageView.GetImage(); - DALI_TEST_EQUALS( image1, image2, TEST_LOCATION ); + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); - Image image3; - imageView.SetImage( image3 ); + //the value should be empty + std::string url; + DALI_TEST_CHECK( !value.Get( url ) ); - Image image4 = imageView.GetImage(); - DALI_TEST_CHECK( !image4 ); + Property::Map map; + DALI_TEST_CHECK( !value.Get( map ) ); END_TEST; } @@ -389,19 +681,15 @@ int UtcDaliImageViewSetImageOffstageP(void) application.Render(); Stage::GetCurrent().Remove( imageView ); - Image image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); + ResourceImage image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); imageView.SetImage( image1 ); - - Image image2 = imageView.GetImage(); - DALI_TEST_EQUALS( image1, image2, TEST_LOCATION ); + TestImage( imageView, image1 ); int width = 300; int height = 400; - Image image3 = CreateBufferImage( width, height, Vector4( 1.f, 1.f, 1.f, 1.f ) ); - imageView.SetImage( image3 ); - - Image image4 = imageView.GetImage(); - DALI_TEST_EQUALS( image3, image4, TEST_LOCATION ); + BufferImage image2 = CreateBufferImage( width, height, Vector4( 1.f, 1.f, 1.f, 1.f ) ); + imageView.SetImage( image2 ); + TestImage( imageView, image2 ); END_TEST; } @@ -417,17 +705,21 @@ int UtcDaliImageViewSetImageOffstageN(void) application.Render(); Stage::GetCurrent().Remove( imageView ); - Image image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); + ResourceImage image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); imageView.SetImage( image1 ); + TestImage( imageView, image1 ); + + Image image2; + imageView.SetImage( image2 ); - Image image2 = imageView.GetImage(); - DALI_TEST_EQUALS( image1, image2, TEST_LOCATION ); + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); - Image image3; - imageView.SetImage( image3 ); + //the value should be empty + std::string url; + DALI_TEST_CHECK( !value.Get( url ) ); - Image image4 = imageView.GetImage(); - DALI_TEST_CHECK( !image4 ); + Property::Map map; + DALI_TEST_CHECK( !value.Get( map ) ); END_TEST; } @@ -440,13 +732,400 @@ int UtcDaliImageViewSetImageN(void) ImageView imageView = ImageView::New(); imageView.SetImage( image1 ); - Image image2 = imageView.GetImage(); - DALI_TEST_CHECK( !image2 ); + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + //the value should be empty + std::string url; + DALI_TEST_CHECK( !value.Get( url ) ); + + Property::Map map; + DALI_TEST_CHECK( !value.Get( map ) ); std::string resource_url; - Property::Value val = imageView.GetProperty( imageView.GetPropertyIndex( "resource-url" ) ); - DALI_TEST_CHECK( val.Get( resource_url ) ); - DALI_TEST_CHECK( resource_url.empty() ); + Property::Value val = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + DALI_TEST_CHECK( !val.Get( resource_url ) ); + + END_TEST; +} + +int UtcDaliImageViewSetImageTypeChangesP(void) +{ + ToolkitTestApplication application; + + ImageView imageView = ImageView::New(); + + + std::string url; + Property::Map map; + + Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + + // Set a URL + imageView.SetImage( "TEST_URL" ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + DALI_TEST_CHECK( value.Get( url ) ); // Value should NOT be empty + DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + + // Set an empty Image + imageView.SetImage( Image() ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + + // Set an Image + ResourceImage image1 = ResourceImage::New( TEST_IMAGE_FILE_NAME ); + imageView.SetImage( image1 ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( value.Get( map ) ); // Value should NOT be empty + + // Set an empty URL + imageView.SetImage( "" ); + value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); + + DALI_TEST_CHECK( ! value.Get( url ) ); // Value should be empty + DALI_TEST_CHECK( ! value.Get( map ) ); // Value should be empty + + END_TEST; +} + +int UtcDaliImageViewResourceUrlP(void) +{ + ToolkitTestApplication application; + + ImageView imageView = ImageView::New(); + DALI_TEST_CHECK( imageView.GetProperty( ImageView::Property::RESOURCE_URL ).Get< std::string >().empty() ); + + imageView.SetProperty( ImageView::Property::RESOURCE_URL, "TestString" ); + DALI_TEST_EQUALS( imageView.GetProperty( ImageView::Property::RESOURCE_URL ).Get< std::string >(), "TestString", TEST_LOCATION ); + + END_TEST; +} + +// 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_2D << ", " << 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_2D << ", " << 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_2D << ", " << 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_2D << ", " << 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_2D << ", " << 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; }