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-SuperBlurView.cpp;h=26d72f1e196ebfed5d0f54a1ae572ac6246e55a6;hp=055d63221f846a9d1516314775269b6be0922890;hb=268f651469300b3950b3f314fa33803b6c24273e;hpb=d5e3ed5f5b1c8fdba3ae97ead8729620f54b3836 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp index 055d632..26d72f1 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-SuperBlurView.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -24,6 +24,7 @@ #include #include +#include using namespace Dali; using namespace Dali::Toolkit; @@ -43,7 +44,7 @@ namespace { const int BLUR_LEVELS = 3; const int RENDER_FRAME_INTERVAL = 16; - +static const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; static bool gObjectCreatedCallBackCalled; static void TestCallback(BaseHandle handle) { @@ -73,31 +74,50 @@ int Wait(ToolkitTestApplication& application, int duration = 0) return time; } -Image CreateSolidColorImage( ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height ) +Texture CreateSolidColorTexture( ToolkitTestApplication& application, const Vector4& color, unsigned int width, unsigned int height ) { - BitmapImage imageData = BitmapImage::New( width, height, Pixel::RGBA8888 ); - - // Create the image - PixelBuffer* pixbuf = imageData.GetBuffer(); unsigned int size = width * height; + uint8_t* pixbuf = new uint8_t[size*4]; for( size_t i = 0; i < size; i++ ) - { - pixbuf[i*4+0] = 0xFF * color.r; - pixbuf[i*4+1] = 0xFF * color.g; - pixbuf[i*4+2] = 0xFF * color.b; - pixbuf[i*4+3] = 0xFF * color.a; - } - imageData.Update(); + { + pixbuf[i*4+0] = 0xFF * color.r; + pixbuf[i*4+1] = 0xFF * color.g; + pixbuf[i*4+2] = 0xFF * color.b; + pixbuf[i*4+3] = 0xFF * color.a; + } - application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - application.SendNotification(); - application.Render(RENDER_FRAME_INTERVAL); - application.Render(RENDER_FRAME_INTERVAL); - application.SendNotification(); + PixelData pixels = PixelData::New( pixbuf, size, width, height, Pixel::RGBA8888, PixelData::ReleaseFunction::DELETE_ARRAY ); - return imageData; + Texture texture = Texture::New( TextureType::TEXTURE_2D, pixels.GetPixelFormat(), pixels.GetWidth(), pixels.GetHeight() ); + texture.Upload( pixels, 0, 0, 0, 0, pixels.GetWidth(), pixels.GetHeight() ); + + return texture; } + +class SignalHandler : public Dali::ConnectionTracker +{ +public: + SignalHandler() : + mCalls( 0 ) + { + } + + void Callback( SuperBlurView handle ) + { + mCalls++; + tet_infoline( "Signal called" ); + } + + unsigned int GetCalls() const + { + return mCalls; + } + +private: + unsigned int mCalls; ///< Keeps track of how many times the signal has been called. +}; + }//namespace @@ -116,7 +136,7 @@ int UtcDaliSuperBlurViewNew(void) DALI_TEST_CHECK( blurView ); //Additional check to ensure object is created by checking if it's registered - ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry(); + ObjectRegistry registry = application.GetCore().GetObjectRegistry(); DALI_TEST_CHECK( registry ); gObjectCreatedCallBackCalled = false; @@ -138,23 +158,166 @@ int UtcDaliSuperBlurViewNew(void) END_TEST; } -int UtcDaliSuperBlurViewSetImage(void) +int UtcDaliSuperBlurViewCreate(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewNew "); + + // Test default constructor. + SuperBlurView blurView; + DALI_TEST_CHECK( !blurView ); + + // Test object creation + TypeInfo type = TypeRegistry::Get().GetTypeInfo("SuperBlurView"); + if( type ) + { + Dali::BaseHandle handle = type.CreateInstance(); + if( handle ) + { + blurView = Dali::Toolkit::SuperBlurView::DownCast( handle ); + } + } + + DALI_TEST_CHECK( blurView ); + + END_TEST; +} + + +int UtcDaliSuperBlurViewSetTexture(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewSetTexture "); + + SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); + blurView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) ); + + Texture inputTexture = CreateSolidColorTexture( application, Color::GREEN, 50, 50 ); + blurView.SetTexture( inputTexture ); + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK( application.GetScene().GetRenderTaskList().GetTaskCount() == 1+BLUR_LEVELS*2); + + { + // create renderers for the original image and each blurred image + application.GetScene().Add( blurView ); + Wait(application); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS+1, TEST_LOCATION ); + + Wait(application); + application.GetScene().Remove( blurView ); + } + + END_TEST; +} + +int UtcDaliSuperBlurViewSetTexture2(void) +{ + ToolkitTestApplication application; + Integration::Scene stage = application.GetScene(); + + tet_infoline(" UtcDaliSuperBlurViewSetTexture2 - test setting a second texture "); + + SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); + blurView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) ); + + tet_infoline("Call SetTexture and add blurview to stage"); + Texture inputTexture = CreateSolidColorTexture( application, Color::GREEN, 50, 50 ); + blurView.SetTexture( inputTexture ); + + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK( application.GetScene().GetRenderTaskList().GetTaskCount() == 1+BLUR_LEVELS*2); + { + // create renderers for the original image and each blurred image + stage.Add( blurView ); + Wait(application); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS+1, TEST_LOCATION ); + + tet_infoline("Wait for a second to allow blur to finish"); + Wait(application, 1000); + + tet_infoline("Remove from stage"); + application.GetScene().Remove( blurView ); + } + + tet_infoline("Test that there are no render tasks remaining"); + DALI_TEST_EQUALS(blurView.GetRendererCount(), 0, TEST_LOCATION ); + + tet_infoline("Call SetTexture a second time and add blurview back to stage"); + Texture inputTexture2 = CreateSolidColorTexture( application, Color::CYAN, 50, 50 ); + blurView.SetTexture( inputTexture2 ); + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK( application.GetScene().GetRenderTaskList().GetTaskCount() == 1+BLUR_LEVELS*2); + + { + // create renderers for the original image and each blurred image + application.GetScene().Add( blurView ); + Wait(application); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS+1, TEST_LOCATION ); + + tet_infoline("Wait for a second to allow blur to finish"); + Wait(application, 1000); + + tet_infoline("Remove from stage"); + application.GetScene().Remove( blurView ); + } + + tet_infoline("Test that there are no render tasks remaining"); + DALI_TEST_EQUALS(blurView.GetRendererCount(), 0, TEST_LOCATION ); + + END_TEST; +} + + +int UtcDaliSuperBlurViewSetProperty(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliSuperBlurViewSetImage "); + tet_infoline(" UtcDaliSuperBlurViewSetProperty "); SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); - // create image actors for the original image and each blurred image - DALI_TEST_CHECK( blurView.GetChildCount() == BLUR_LEVELS+1 ); + // create renderers for the original image and each blurred image + application.GetScene().Add( blurView ); + blurView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) ); + + // Will create ResourceImage + blurView.SetProperty(SuperBlurView::Property::IMAGE_URL, TEST_IMAGE_FILE_NAME); + Wait(application); - Image inputImage = CreateSolidColorImage( application, Color::GREEN, 50, 50 ); - blurView.SetImage( inputImage ); // start multiple guassian blur call, each guassian blur creates two render tasks - DALI_TEST_CHECK( Stage::GetCurrent().GetRenderTaskList().GetTaskCount() == BLUR_LEVELS*2 + 1); + + unsigned int count = application.GetScene().GetRenderTaskList().GetTaskCount(); + DALI_TEST_CHECK( count == 1+BLUR_LEVELS*2 ); + + Wait(application); + END_TEST; } + +int UtcDaliSuperBlurViewGetProperty(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewSetProperty "); + + SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); + blurView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) ); + + blurView.SetProperty(SuperBlurView::Property::IMAGE_URL, TEST_IMAGE_FILE_NAME); + Wait(application); + + // create renderers for the original image and each blurred image + application.GetScene().Add( blurView ); + + std::string imageUrl = blurView.GetProperty( SuperBlurView::Property::IMAGE_URL ); + DALI_TEST_EQUALS( imageUrl, TEST_IMAGE_FILE_NAME, TEST_LOCATION ); + + END_TEST; +} + + int UtcDaliSuperBlurViewSetGetBlurStrength(void) { ToolkitTestApplication application; @@ -190,28 +353,55 @@ int UtcDaliSuperBlurViewGetBlurStrengthPropertyIndex(void) END_TEST; } -int UtcDaliSuperBlurViewGetBlurredImage(void) +int UtcDaliSuperBlurViewGetBlurredTexture(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliSuperBlurViewGetBlurredImage" ); + tet_infoline( "UtcDaliSuperBlurViewGetBlurredTexture" ); SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); - blurView.SetSize( 100.f,100.f ); - Image inputImage = CreateSolidColorImage( application, Color::GREEN, 100, 100 ); - blurView.SetImage( inputImage ); + blurView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) ); + Texture inputTexture = CreateSolidColorTexture( application, Color::GREEN, 100, 100 ); + blurView.SetTexture( inputTexture ); Wait(application, 200); // Make sure all the gaussian blur finished - Image image1 = blurView.GetBlurredImage( 1 ); - DALI_TEST_CHECK( image1 ); + Texture texture1 = blurView.GetBlurredTexture( 1 ); + DALI_TEST_CHECK( texture1 ); + + Texture texture2 = blurView.GetBlurredTexture( 2 ); + DALI_TEST_EQUALS( texture2.GetWidth(), 25u, TEST_LOCATION ); + DALI_TEST_EQUALS( texture2.GetHeight(), 25u, TEST_LOCATION ); + + Texture texture3 = blurView.GetBlurredTexture( 3 ); + DALI_TEST_CHECK( texture3 ); + + END_TEST; +} + +int UtcDaliSuperBlurViewBlurSignal(void) +{ + ToolkitTestApplication application; + + tet_infoline(" UtcDaliSuperBlurViewSignal "); + + SuperBlurView blurView = SuperBlurView::New( BLUR_LEVELS ); + blurView.SetProperty( Actor::Property::SIZE, Vector2(100.0f, 100.0f) ); + + Texture inputTexture = CreateSolidColorTexture( application, Color::GREEN, 50, 50 ); + blurView.SetTexture( inputTexture ); + // start multiple guassian blur call, each guassian blur creates two render tasks + DALI_TEST_CHECK( application.GetScene().GetRenderTaskList().GetTaskCount() == 1+BLUR_LEVELS*2); + + SignalHandler signalHandler; + blurView.BlurFinishedSignal().Connect(&signalHandler, &SignalHandler::Callback); - Image image2 = blurView.GetBlurredImage( 2 ); - DALI_TEST_CHECK( image2.GetWidth() == 25 ); - DALI_TEST_CHECK( image2.GetHeight() == 25 ); + // create renderers for the original image and each blurred image + application.GetScene().Add( blurView ); + Wait(application, 1000); - Image image3 = blurView.GetBlurredImage( 3 ); - DALI_TEST_CHECK( FrameBufferImage::DownCast( image2 ) ); + DALI_TEST_EQUALS(blurView.GetRendererCount(), BLUR_LEVELS+1, TEST_LOCATION ); + //DALI_TEST_EQUALS(signalHandler.GetCalls(), 1, TEST_LOCATION); END_TEST; }