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-AsyncImageLoader.cpp;h=175ccfcdde3585d64e7e32421883fe588c0d7450;hp=7375515b1b146b64240044653acbab5c354be1c5;hb=HEAD;hpb=c01f2590ed7bb00d9b3600511d08dc420261ed46 diff --git a/automated-tests/src/dali-toolkit/utc-Dali-AsyncImageLoader.cpp b/automated-tests/src/dali-toolkit/utc-Dali-AsyncImageLoader.cpp index 7375515..894a23d 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-AsyncImageLoader.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-AsyncImageLoader.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -14,13 +14,14 @@ * limitations under the License. * */ -#include -#include +#include +#include +#include #include #include -#include +#include #include -#include +#include using namespace Dali; using namespace Dali::Toolkit; @@ -33,23 +34,29 @@ static const char* gImage_34_RGBA = TEST_RESOURCE_DIR "/icon-edit.png"; static const char* gImage_50_RGBA = TEST_RESOURCE_DIR "/icon-delete.png"; // resolution: 128*128, pixel format: RGB888 static const char* gImage_128_RGB = TEST_RESOURCE_DIR "/gallery-small-1.jpg"; +// animated image +static const char* gImage_gif = TEST_RESOURCE_DIR "/canvas-none.gif"; // for testing the ImageLoadedSignal class ImageLoadedSignalVerifier : public ConnectionTracker { public: - ImageLoadedSignalVerifier() - : mCount( 0 ) - {} + : mCount(0) + { + } virtual ~ImageLoadedSignalVerifier() - {} + { + } - void ImageLoaded( uint32_t id, PixelData pixelData ) + void ImageLoaded(uint32_t id, PixelData pixelData) { - mIDs.push_back( id ); - mPixelDataList.push_back( pixelData ); + if(pixelData) + { + mIDs.push_back(id); + mPixelDataList.push_back(pixelData); + } mCount++; } @@ -58,15 +65,14 @@ public: return mCount; } - bool Verify( uint32_t id, uint32_t width, uint32_t height ) + bool Verify(uint32_t id, uint32_t width, uint32_t height) { int size = mIDs.size(); - for( int i = 0; i mIDs; + std::vector mIDs; std::vector mPixelDataList; }; - } // anonymous namespace void dali_async_image_loader_startup(void) @@ -94,18 +98,18 @@ void dali_async_image_loader_cleanup(void) test_return_value = TET_PASS; } -int UtcDaliImageAtlasNew01(void) +int UtcDaliAsyncImageLoaderNew01(void) { ToolkitTestApplication application; //invoke default handle constructor AsyncImageLoader loader; - DALI_TEST_CHECK( !loader ); + DALI_TEST_CHECK(!loader); // initialise handle loader = AsyncImageLoader::New(); - DALI_TEST_CHECK( loader ); + DALI_TEST_CHECK(loader); END_TEST; } @@ -114,11 +118,27 @@ int UtcDaliAsyncImageLoaderCopyConstructor(void) { ToolkitTestApplication application; - AsyncImageLoader loader = AsyncImageLoader::New( ); - DALI_TEST_CHECK( loader ); + AsyncImageLoader loader = AsyncImageLoader::New(); + DALI_TEST_CHECK(loader); AsyncImageLoader loaderCopy(loader); - DALI_TEST_CHECK( loaderCopy ); + DALI_TEST_CHECK(loaderCopy); + + END_TEST; +} + +int UtcDaliAsyncImageLoaderMoveConstructor(void) +{ + ToolkitTestApplication application; + + AsyncImageLoader loader = AsyncImageLoader::New(); + DALI_TEST_CHECK(loader); + DALI_TEST_EQUALS(1, loader.GetBaseObject().ReferenceCount(), TEST_LOCATION); + + AsyncImageLoader moved = std::move(loader); + DALI_TEST_CHECK(moved); + DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION); + DALI_TEST_CHECK(!loader); END_TEST; } @@ -128,14 +148,31 @@ int UtcDaliAsyncImageLoaderAssignmentOperator(void) ToolkitTestApplication application; AsyncImageLoader loader = AsyncImageLoader::New(); - DALI_TEST_CHECK( loader ); + DALI_TEST_CHECK(loader); AsyncImageLoader loader2; - DALI_TEST_CHECK( !loader2 ); + DALI_TEST_CHECK(!loader2); loader2 = loader; - DALI_TEST_CHECK( loader2 ); - DALI_TEST_CHECK( loader == loader2 ); // the two handles are pointing to the same object. + DALI_TEST_CHECK(loader2); + DALI_TEST_CHECK(loader == loader2); // the two handles are pointing to the same object. + + END_TEST; +} + +int UtcDaliAsyncImageLoaderMoveAssignment(void) +{ + ToolkitTestApplication application; + + AsyncImageLoader loader = AsyncImageLoader::New(); + DALI_TEST_CHECK(loader); + DALI_TEST_EQUALS(1, loader.GetBaseObject().ReferenceCount(), TEST_LOCATION); + + AsyncImageLoader moved; + moved = std::move(loader); + DALI_TEST_CHECK(moved); + DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION); + DALI_TEST_CHECK(!loader); END_TEST; } @@ -145,11 +182,11 @@ int UtcDaliAsyncImageLoaderDownCastP(void) ToolkitTestApplication application; AsyncImageLoader asyncImageLoader = AsyncImageLoader::New(); - BaseHandle object(asyncImageLoader); + BaseHandle object(asyncImageLoader); - AsyncImageLoader asyncImageLoader2 = AsyncImageLoader::DownCast( object ); + AsyncImageLoader asyncImageLoader2 = AsyncImageLoader::DownCast(object); - DALI_TEST_CHECK( asyncImageLoader2 ); + DALI_TEST_CHECK(asyncImageLoader2); END_TEST; } @@ -158,10 +195,10 @@ int UtcDaliAsyncImageLoaderDownCastN(void) { ToolkitTestApplication application; - BaseHandle unInitializedObject; - AsyncImageLoader asyncImageLoader = AsyncImageLoader::DownCast( unInitializedObject ); + BaseHandle unInitializedObject; + AsyncImageLoader asyncImageLoader = AsyncImageLoader::DownCast(unInitializedObject); - DALI_TEST_CHECK( !asyncImageLoader ); + DALI_TEST_CHECK(!asyncImageLoader); END_TEST; } @@ -170,54 +207,76 @@ int UtcDaliAsyncImageLoaderLoadAndLoadedSignal(void) { ToolkitTestApplication application; - AsyncImageLoader loader = AsyncImageLoader::New(); + AsyncImageLoader loader = AsyncImageLoader::New(); ImageLoadedSignalVerifier loadedSignalVerifier; - loader.ImageLoadedSignal().Connect( &loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded ); + loader.ImageLoadedSignal().Connect(&loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded); + + loader.Load(gImage_34_RGBA); // Trigger 1 + uint32_t id02 = loader.Load(gImage_50_RGBA, ImageDimensions(25, 25)); // Trigger 2 + uint32_t id03 = loader.Load(gImage_128_RGB, ImageDimensions(100, 100), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true); // Trigger 3 + + // Try load animted image + Dali::AnimatedImageLoading animatedImageLoading = Dali::AnimatedImageLoading::New(gImage_gif, true); + DevelAsyncImageLoader::LoadAnimatedImage(loader, animatedImageLoading, 0, DevelAsyncImageLoader::PreMultiplyOnLoad::OFF); // Trigger 4 - loader.Load( gImage_34_RGBA ); - uint32_t id02 = loader.Load( gImage_50_RGBA, ImageDimensions( 25, 25 ) ); - uint32_t id03 = loader.Load( gImage_128_RGB, ImageDimensions( 100, 100 ), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true ); + // Try apply mask image + Devel::PixelBuffer imageData = Devel::PixelBuffer::New(50, 50, Dali::Pixel::RGBA8888); + Devel::PixelBuffer maskData = Devel::PixelBuffer::New(50, 50, Dali::Pixel::RGBA8888); + DevelAsyncImageLoader::ApplyMask(loader, imageData, maskData, 0.0f, false, DevelAsyncImageLoader::PreMultiplyOnLoad::OFF); // Trigger 5 - ApplyMask also uses AsyncTask - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 3 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(5), true, TEST_LOCATION); // Wait for 5 triggers application.SendNotification(); application.Render(); - DALI_TEST_CHECK( loadedSignalVerifier.LoadedImageCount() == 3 ); - DALI_TEST_CHECK( loadedSignalVerifier.Verify( id02, 25, 25 ) ); - DALI_TEST_CHECK( loadedSignalVerifier.Verify( id03, 100, 100 ) ); + DALI_TEST_CHECK(loadedSignalVerifier.LoadedImageCount() == 5); + DALI_TEST_CHECK(loadedSignalVerifier.Verify(id02, 25, 25)); + DALI_TEST_CHECK(loadedSignalVerifier.Verify(id03, 100, 100)); END_TEST; } // Note: This is not an ideal test, but we cannot guarantee we can call Cancel() before the image has finished loading. -int UtcDaliAsyncImageLoaderCancel(void) +int UtcDaliAsyncImageLoaderCancel01(void) { ToolkitTestApplication application; - AsyncImageLoader loader = AsyncImageLoader::New(); + AsyncImageLoader loader = AsyncImageLoader::New(); ImageLoadedSignalVerifier loadedSignalVerifier; - loader.ImageLoadedSignal().Connect( &loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded ); + loader.ImageLoadedSignal().Connect(&loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded); - uint32_t id01 = loader.Load( gImage_34_RGBA, ImageDimensions( 34, 34 ) ); - uint32_t id02 = loader.Load( gImage_50_RGBA, ImageDimensions( 25, 25 ) ); - uint32_t id03 = loader.Load( gImage_128_RGB, ImageDimensions( 100, 100 ), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true ); + uint32_t id01 = loader.Load(gImage_34_RGBA, ImageDimensions(34, 34)); + uint32_t id02 = loader.Load(gImage_50_RGBA, ImageDimensions(25, 25)); + uint32_t id03 = loader.Load(gImage_128_RGB, ImageDimensions(100, 100), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true); - DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 3 ), true, TEST_LOCATION ); + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(3), true, TEST_LOCATION); application.SendNotification(); application.Render(); - DALI_TEST_CHECK( loadedSignalVerifier.LoadedImageCount() == 3 ); + DALI_TEST_CHECK(loadedSignalVerifier.LoadedImageCount() == 3); + + DALI_TEST_CHECK(!loader.Cancel(id03)); // Cannot cancel a task that is already implemeted + + DALI_TEST_CHECK(loadedSignalVerifier.Verify(id01, 34, 34)); // first image is loaded + DALI_TEST_CHECK(loadedSignalVerifier.Verify(id02, 25, 25)); // second image is loaded + DALI_TEST_CHECK(loadedSignalVerifier.Verify(id03, 100, 100)); // third image is loaded - DALI_TEST_CHECK( !loader.Cancel( id03 ) ); // Cannot cancel a task that is already implemeted + END_TEST; +} - DALI_TEST_CHECK( loadedSignalVerifier.Verify( id01, 34, 34 ) ); // first image is loaded - DALI_TEST_CHECK( loadedSignalVerifier.Verify( id02, 25, 25 ) ); // second image is loaded - DALI_TEST_CHECK( loadedSignalVerifier.Verify( id03, 100, 100 ) ); // third image is loaded +int UtcDaliAsyncImageLoaderCancel02(void) +{ + ToolkitTestApplication application; + AsyncImageLoader loader = AsyncImageLoader::New(); + uint32_t id01 = loader.Load(gImage_34_RGBA, ImageDimensions(34, 34)); + DALI_TEST_CHECK(loader.Cancel(id01)); // Cancle a task + + application.SendNotification(); + application.Render(); END_TEST; } @@ -239,7 +298,20 @@ int UtcDaliAsyncImageLoaderCancelAll(void) // Test that cancelling a non-existing loading task will return false uint32_t id = 1; - DALI_TEST_CHECK( !(loader.Cancel( id )) ); + DALI_TEST_CHECK(!(loader.Cancel(id))); + + uint32_t id01 = loader.Load(gImage_34_RGBA, ImageDimensions(34, 34)); + uint32_t id02 = loader.Load(gImage_50_RGBA, ImageDimensions(25, 25)); + uint32_t id03 = loader.Load(gImage_128_RGB, ImageDimensions(100, 100), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true); + loader.CancelAll(); + + // Test that cancelling a non-existing loading task will return false + DALI_TEST_CHECK(!(loader.Cancel(id01))); + DALI_TEST_CHECK(!(loader.Cancel(id02))); + DALI_TEST_CHECK(!(loader.Cancel(id03))); + + application.SendNotification(); + application.Render(); END_TEST; }