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=32d987f5e9e3fef76a6f5add2c2014ffe775edd0;hp=e40862c13eba403678b550d48cbc42dc5295892f;hb=8a37fe59c9b77bc32c6998721d335cc1c41c44db;hpb=df4e976c9228a4ceeaa2622d86ad7b21e8eb65b8 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index e40862c..32d987f 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -21,6 +21,11 @@ #include #include +#include +#include + +#include +#include using namespace Dali; using namespace Toolkit; @@ -37,6 +42,35 @@ 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"; @@ -53,11 +87,11 @@ void TestImage( ImageView imageView, BufferImage image ) int width = 0; DALI_TEST_CHECK( map[ "width" ].Get( width ) ); - DALI_TEST_EQUALS( width, image.GetWidth(), TEST_LOCATION ); + DALI_TEST_EQUALS( (unsigned int)width, image.GetWidth(), TEST_LOCATION ); int height = 0; DALI_TEST_CHECK( map[ "height" ].Get( height ) ); - DALI_TEST_EQUALS( height, image.GetHeight(), TEST_LOCATION ); + DALI_TEST_EQUALS( (unsigned int)height, image.GetHeight(), TEST_LOCATION ); std::string type; DALI_TEST_CHECK( map[ "type" ].Get( type ) ); @@ -75,14 +109,14 @@ void TestImage( ImageView imageView, ResourceImage image ) { int width = 0; DALI_TEST_CHECK( map[ "width" ].Get( width ) ); - DALI_TEST_EQUALS( width, image.GetWidth(), TEST_LOCATION ); + 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( height, image.GetHeight(), TEST_LOCATION ); + DALI_TEST_EQUALS( (unsigned int)height, image.GetHeight(), TEST_LOCATION ); } DALI_TEST_CHECK( map.Find( "type" ) ); @@ -238,7 +272,7 @@ int UtcDaliImageViewSetGetProperty01(void) ImageView imageView = ImageView::New(); Property::Index idx = imageView.GetPropertyIndex( "image" ); - DALI_TEST_EQUALS( idx, ImageView::Property::IMAGE, TEST_LOCATION ); + DALI_TEST_EQUALS( idx, (Property::Index)ImageView::Property::IMAGE, TEST_LOCATION ); imageView.SetProperty( idx, TEST_IMAGE_FILE_NAME ); TestUrl( imageView, TEST_IMAGE_FILE_NAME ); @@ -246,6 +280,90 @@ int UtcDaliImageViewSetGetProperty01(void) 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 + Material material = imageView.GetRendererAt( 0 ).GetMaterial(); + BlendingFactor::Type srcFactorRgb; + BlendingFactor::Type destFactorRgb; + BlendingFactor::Type srcFactorAlpha; + BlendingFactor::Type destFactorAlpha; + material.GetBlendFunc(srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha); + DALI_TEST_CHECK( srcFactorRgb == BlendingFactor::SRC_ALPHA ); + DALI_TEST_CHECK( destFactorRgb == BlendingFactor::ONE_MINUS_SRC_ALPHA ); + DALI_TEST_CHECK( srcFactorAlpha == BlendingFactor::ONE ); + DALI_TEST_CHECK( destFactorAlpha == BlendingFactor::ONE_MINUS_SRC_ALPHA ); + + TestGlAbstraction& gl = application.GetGlAbstraction(); + + float alphaBlendingUniform; + DALI_TEST_CHECK( gl.GetUniformValue( "uAlphaBlending", alphaBlendingUniform ) ); + DALI_TEST_EQUALS( alphaBlendingUniform, 1.f, TEST_LOCATION ); + + // pre-multiplied alpha blending + imageView.SetProperty( Toolkit::ImageView::Property::PRE_MULTIPLIED_ALPHA, true ); + application.SendNotification(); + application.Render(); + + material.GetBlendFunc(srcFactorRgb, destFactorRgb, srcFactorAlpha, destFactorAlpha); + 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 ); + + DALI_TEST_CHECK( gl.GetUniformValue( "uAlphaBlending", alphaBlendingUniform ) ); + DALI_TEST_EQUALS( alphaBlendingUniform, 0.f, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliImageViewSizeWithBackground(void) { ToolkitTestApplication application; @@ -260,8 +378,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; } @@ -285,8 +403,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; } @@ -333,8 +451,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; } @@ -505,3 +623,349 @@ int UtcDaliImageViewSetImageN(void) 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( "rendererType", "imageRenderer" ); + 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 ); + + imageView.SetProperty( ImageView::Property::IMAGE, map ); + + 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( "rendererType", "imageRenderer" ); + 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 ); + + imageView.SetProperty( ImageView::Property::IMAGE, map ); + + 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; +}