X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=automated-tests%2Fsrc%2Fdali-toolkit%2Futc-Dali-ImageView.cpp;h=721bfecf87e8c2505b16010d881079bad19e41db;hb=139f1932acd42bbc9ad3c89c86d4f500052e1ef1;hp=5955748f51f40f87063402698eab0b8002c2b9b3;hpb=1b0a5f5931b61343586de7cd62fd44793c79ae73;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 5955748..721bfec 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,7 +23,7 @@ #include #include -#include +#include #include #include @@ -80,6 +80,9 @@ 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"; +// resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame +const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif"; + void TestImage( ImageView imageView, BufferImage image ) { Property::Value value = imageView.GetProperty( imageView.GetPropertyIndex( "image" ) ); @@ -351,10 +354,10 @@ int UtcDaliImageViewSetGetProperty03(void) 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 ); + 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 ); value = renderer.GetProperty( Renderer::Property::BLEND_PRE_MULTIPLIED_ALPHA ); DALI_TEST_CHECK( value.Get( enable ) ); @@ -363,6 +366,62 @@ int UtcDaliImageViewSetGetProperty03(void) END_TEST; } +int UtcDaliImageViewPixelArea(void) +{ + // Test pixel area property + ToolkitTestApplication application; + + // Gif image, use AnimatedImageVisual internally + // Atlasing is applied to pack multiple frames, use custom wrap mode + ImageView gifView = ImageView::New(); + const Vector4 pixelAreaVisual( 0.f, 0.f, 2.f, 2.f ); + gifView.SetProperty( ImageView::Property::IMAGE, + Property::Map().Add( ImageVisual::Property::URL, TEST_GIF_FILE_NAME ) + .Add( ImageVisual::Property::PIXEL_AREA, pixelAreaVisual ) ); + + // Add to stage + Stage stage = Stage::GetCurrent(); + stage.Add( gifView ); + + // loading started + application.SendNotification(); + application.Render(16); + DALI_TEST_CHECK( gifView.GetRendererCount() == 1u ); + + const Vector4 fullTextureRect( 0.f, 0.f, 1.f, 1.f ); + // test that the pixel area value defined in the visual property map is registered on renderer + Renderer renderer = gifView.GetRendererAt(0); + Property::Value pixelAreaValue = renderer.GetProperty( renderer.GetPropertyIndex( "pixelArea" ) ); + DALI_TEST_EQUALS( pixelAreaValue.Get(), pixelAreaVisual, TEST_LOCATION ); + + // test that the shader has the default pixel area value registered. + Shader shader = renderer.GetShader(); + pixelAreaValue = shader.GetProperty( shader.GetPropertyIndex( "pixelArea" ) ); + DALI_TEST_EQUALS( pixelAreaValue.Get(), fullTextureRect, TEST_LOCATION ); + + // test that the uniform uses the pixelArea property on the renderer. + TestGlAbstraction& gl = application.GetGlAbstraction(); + Vector4 pixelAreaUniform; + DALI_TEST_CHECK( gl.GetUniformValue( "pixelArea", pixelAreaUniform ) ); + DALI_TEST_EQUALS( pixelAreaVisual, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + // set the pixelArea property on the control + const Vector4 pixelAreaControl( -1.f, -1.f, 3.f, 3.f ); + gifView.SetProperty( ImageView::Property::PIXEL_AREA, pixelAreaControl ); + application.SendNotification(); + application.Render(16); + + // check the pixelArea property on the control + pixelAreaValue = gifView.GetProperty( gifView.GetPropertyIndex( "pixelArea" ) ); + DALI_TEST_EQUALS( pixelAreaValue.Get(), pixelAreaControl, TEST_LOCATION ); + // test that the uniform uses the pixelArea property on the control. + DALI_TEST_CHECK( gl.GetUniformValue( "pixelArea", pixelAreaUniform ) ); + DALI_TEST_EQUALS( pixelAreaControl, pixelAreaUniform, Math::MACHINE_EPSILON_100, TEST_LOCATION ); + + + END_TEST; +} + int UtcDaliImageViewAsyncLoadingWithoutAltasing(void) { ToolkitTestApplication application; @@ -384,7 +443,7 @@ int UtcDaliImageViewAsyncLoadingWithoutAltasing(void) END_TEST; } -int UtcDaliImageViewAsyncLoadingWithAltasing(void) +int UtcDaliImageViewAsyncLoadingWithAtlasing(void) { ToolkitTestApplication application; @@ -397,8 +456,6 @@ int UtcDaliImageViewAsyncLoadingWithAltasing(void) // 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(); @@ -406,27 +463,58 @@ int UtcDaliImageViewAsyncLoadingWithAltasing(void) application.Render(16); application.SendNotification(); - // loading started - loader = BitmapLoader::GetLatestCreated(); - DALI_TEST_CHECK( loader ); + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); + + 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; +} - // worker thread is created - EventThreadCallback* eventTrigger = EventThreadCallback::Get(); - DALI_TEST_CHECK( eventTrigger ); +int UtcDaliImageViewAsyncLoadingWithAtlasing02(void) +{ + ToolkitTestApplication application; + + //Async loading, automatic atlasing for small size image + TraceCallStack& callStack = application.GetGlAbstraction().GetTextureTrace(); + callStack.Reset(); + callStack.Enable(true); - loader.WaitForLoading();// waiting until the image to be loaded - DALI_TEST_CHECK( loader.IsLoaded() ); + Property::Map asyncLoadingMap; + asyncLoadingMap[ "url" ] = gImage_34_RGBA; + asyncLoadingMap[ "desiredHeight" ] = 34; + asyncLoadingMap[ "desiredWidth" ] = 34; + asyncLoadingMap[ "synchronousLoading" ] = false; - CallbackBase* callback = eventTrigger->GetCallback(); - CallbackBase::Execute( *callback ); + ImageView imageView = ImageView::New(); + imageView.SetProperty( ImageView::Property::IMAGE, asyncLoadingMap ); + Stage::GetCurrent().Add( imageView ); application.SendNotification(); application.Render(16); + application.Render(16); + application.SendNotification(); - callStack.Enable(false); + // loading started, this waits for the loader thread for max 30 seconds + DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION ); - DALI_TEST_CHECK( callStack.FindMethodAndParams("TexSubImage2D", "0, 0, 34, 34" ) ); + 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; } @@ -435,14 +523,17 @@ int UtcDaliImageViewSyncLoading(void) { ToolkitTestApplication application; + tet_infoline("ImageView Testing sync loading and size using index key property map"); + Property::Map syncLoadingMap; - syncLoadingMap[ "synchronousLoading" ] = true; + syncLoadingMap[ ImageVisual::Property::SYNCHRONOUS_LOADING ] = true; // Sync loading, no atlasing for big size image { - ImageView imageView = ImageView::New( gImage_600_RGB ); + ImageView imageView = ImageView::New(); // 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. @@ -459,9 +550,54 @@ int UtcDaliImageViewSyncLoading(void) 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); + + TraceCallStack::NamedParams params; + params["width"] = ToString(34); + params["height"] = ToString(34); + DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), + true, TEST_LOCATION ); + } + END_TEST; +} + + +int UtcDaliImageViewSyncLoading02(void) +{ + ToolkitTestApplication application; + + tet_infoline("ImageView Testing sync loading and size using string key property map"); + + // 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 + Property::Map syncLoadingMap; syncLoadingMap[ "url" ] = gImage_34_RGBA; syncLoadingMap[ "desiredHeight" ] = 34; syncLoadingMap[ "desiredWidth" ] = 34; + syncLoadingMap[ "synchronousLoading" ] = true; imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap ); // loading is started even if the actor is offStage @@ -475,9 +611,13 @@ int UtcDaliImageViewSyncLoading(void) Stage::GetCurrent().Add( imageView ); application.SendNotification(); application.Render(16); - DALI_TEST_CHECK( callStack.FindMethodAndParams("TexSubImage2D", "0, 0, 34, 34" ) ); - } + TraceCallStack::NamedParams params; + params["width"] = ToString(34); + params["height"] = ToString(34); + DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), + true, TEST_LOCATION ); + } END_TEST; } @@ -860,7 +1000,7 @@ int UtcDaliImageViewSetImageNativeImage(void) DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") ); std::stringstream params; - params << GL_TEXTURE_2D << ", " << 23; + params << GL_TEXTURE_EXTERNAL_OES << ", " << 23; DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) ); END_TEST; @@ -910,7 +1050,7 @@ int UtcDaliImageViewSetImageBufferImageToNativeImage(void) DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") ); std::stringstream nextTextureParams; - nextTextureParams << GL_TEXTURE_2D << ", " << 24; + nextTextureParams << GL_TEXTURE_EXTERNAL_OES << ", " << 24; DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", nextTextureParams.str()) ); END_TEST; @@ -942,7 +1082,7 @@ int UtcDaliImageViewSetImageNativeImageToBufferImage(void) DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") ); std::stringstream params; - params << GL_TEXTURE_2D << ", " << 23; + params << GL_TEXTURE_EXTERNAL_OES << ", " << 23; DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) ); width = 200; @@ -987,7 +1127,6 @@ int UtcDaliImageViewSetImageNativeImageWithCustomShader(void) customShader.Insert( "hints", shaderHints ); Property::Map map; - map.Insert( "rendererType", "image" ); map.Insert( "shader", customShader ); TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height ); @@ -997,8 +1136,6 @@ int UtcDaliImageViewSetImageNativeImageWithCustomShader(void) imageView.SetProperty( ImageView::Property::IMAGE, map ); Stage::GetCurrent().Add( imageView ); - imageView.SetProperty( ImageView::Property::IMAGE, map ); - TestGlAbstraction& gl = application.GetGlAbstraction(); gl.EnableTextureCallTrace( true ); @@ -1012,7 +1149,7 @@ int UtcDaliImageViewSetImageNativeImageWithCustomShader(void) DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") ); std::stringstream params; - params << GL_TEXTURE_2D << ", " << 23; + params << GL_TEXTURE_EXTERNAL_OES << ", " << 23; DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", params.str()) ); END_TEST; @@ -1039,7 +1176,6 @@ int UtcDaliImageViewSetImageBufferImageWithCustomShaderToNativeImage(void) customShader.Insert( "hints", shaderHints ); Property::Map map; - map.Insert( "rendererType", "image" ); map.Insert( "shader", customShader ); BufferImage image = CreateBufferImage( width, height, Color::WHITE ); @@ -1048,8 +1184,6 @@ int UtcDaliImageViewSetImageBufferImageWithCustomShaderToNativeImage(void) imageView.SetProperty( ImageView::Property::IMAGE, map ); Stage::GetCurrent().Add( imageView ); - imageView.SetProperty( ImageView::Property::IMAGE, map ); - TestGlAbstraction& gl = application.GetGlAbstraction(); gl.EnableTextureCallTrace( true ); @@ -1080,7 +1214,7 @@ int UtcDaliImageViewSetImageBufferImageWithCustomShaderToNativeImage(void) DALI_TEST_CHECK( gl.GetTextureTrace().FindMethod("BindTexture") ); std::stringstream nativeImageParams; - nativeImageParams << GL_TEXTURE_2D << ", " << 24; + nativeImageParams << GL_TEXTURE_EXTERNAL_OES << ", " << 24; DALI_TEST_CHECK( gl.GetTextureTrace().FindMethodAndParams("BindTexture", nativeImageParams.str()) ); @@ -1128,4 +1262,3 @@ int UtcDaliImageViewGetImageN(void) END_TEST; } -