2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <dali/dali.h>
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <toolkit-event-thread-callback.h>
22 #include <dali-toolkit/devel-api/image-loader/async-image-loader.h>
25 using namespace Dali::Toolkit;
29 // resolution: 34*34, pixel format: RGBA8888
30 static const char* gImage_34_RGBA = TEST_RESOURCE_DIR "/icon-edit.png";
31 // resolution: 50*50, pixel format: RGBA8888
32 static const char* gImage_50_RGBA = TEST_RESOURCE_DIR "/icon-delete.png";
33 // resolution: 128*128, pixel format: RGB888
34 static const char* gImage_128_RGB = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
36 // for testing the ImageLoadedSignal
37 class ImageLoadedSignalVerifier : public ConnectionTracker
41 ImageLoadedSignalVerifier()
45 virtual ~ImageLoadedSignalVerifier()
48 void ImageLoaded( uint32_t id, PixelData pixelData )
51 mPixelDataList.push_back( pixelData );
55 int LoadedImageCount()
60 bool Verify( uint32_t id, uint32_t width, uint32_t height )
62 int size = mIDs.size();
63 for( int i = 0; i<size; i++ )
67 return mPixelDataList[i].GetWidth() == width
68 && mPixelDataList[i].GetHeight() == height;
79 std::vector<uint32_t> mIDs;
80 std::vector<PixelData> mPixelDataList;
84 } // anonymous namespace
86 void dali_async_image_loader_startup(void)
88 test_return_value = TET_UNDEF;
91 void dali_async_image_loader_cleanup(void)
93 test_return_value = TET_PASS;
96 int UtcDaliImageAtlasNew01(void)
98 ToolkitTestApplication application;
100 //invoke default handle constructor
101 AsyncImageLoader loader;
103 DALI_TEST_CHECK( !loader );
106 loader = AsyncImageLoader::New();
107 DALI_TEST_CHECK( loader );
112 int UtcDaliAsyncImageLoaderCopyConstructor(void)
114 ToolkitTestApplication application;
116 AsyncImageLoader loader = AsyncImageLoader::New( );
117 DALI_TEST_CHECK( loader );
119 AsyncImageLoader loaderCopy(loader);
120 DALI_TEST_CHECK( loaderCopy );
125 int UtcDaliAsyncImageLoaderAssignmentOperator(void)
127 ToolkitTestApplication application;
129 AsyncImageLoader loader = AsyncImageLoader::New();
130 DALI_TEST_CHECK( loader );
132 AsyncImageLoader loader2;
133 DALI_TEST_CHECK( !loader2 );
136 DALI_TEST_CHECK( loader2 );
137 DALI_TEST_CHECK( loader == loader2 ); // the two handles are pointing to the same object.
142 int UtcDaliAsyncImageLoaderLoadAndLoadedSignal(void)
144 ToolkitTestApplication application;
146 AsyncImageLoader loader = AsyncImageLoader::New();
147 ImageLoadedSignalVerifier loadedSignalVerifier;
149 loader.ImageLoadedSignal().Connect( &loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded );
151 loader.Load( gImage_34_RGBA );
152 uint32_t id02 = loader.Load( gImage_50_RGBA, ImageDimensions( 25, 25 ) );
153 uint32_t id03 = loader.Load( gImage_128_RGB, ImageDimensions( 100, 100 ), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true );
155 EventThreadCallback* eventTrigger = EventThreadCallback::Get();
156 CallbackBase* callback = eventTrigger->GetCallback();
158 eventTrigger->WaitingForTrigger( 3 );// waiting until all three images are loaded
160 CallbackBase::Execute( *callback );
162 application.SendNotification();
163 application.Render();
165 DALI_TEST_CHECK( loadedSignalVerifier.LoadedImageCount() == 3 );
166 DALI_TEST_CHECK( loadedSignalVerifier.Verify( id02, 25, 25 ) );
167 DALI_TEST_CHECK( loadedSignalVerifier.Verify( id03, 100, 100 ) );
172 int UtcDaliAsyncImageLoaderCancel(void)
174 ToolkitTestApplication application;
176 AsyncImageLoader loader = AsyncImageLoader::New();
177 ImageLoadedSignalVerifier loadedSignalVerifier;
179 loader.ImageLoadedSignal().Connect( &loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded );
181 uint32_t id01 = loader.Load( gImage_34_RGBA, ImageDimensions( 34, 34 ) );
182 uint32_t id02 = loader.Load( gImage_50_RGBA, ImageDimensions( 25, 25 ) );
183 uint32_t id03 = loader.Load( gImage_128_RGB, ImageDimensions( 100, 100 ), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true );
185 // cancel the loading of the second image
186 DALI_TEST_CHECK( loader.Cancel( id02 ) );
188 EventThreadCallback* eventTrigger = EventThreadCallback::Get();
189 CallbackBase* callback = eventTrigger->GetCallback();
191 eventTrigger->WaitingForTrigger( 2 );// waiting until first and third images are loaded
193 CallbackBase::Execute( *callback );
195 DALI_TEST_CHECK( ! loader.Cancel( id03 ) ); // can not cancel a task that is already implemeted
197 application.SendNotification();
198 application.Render();
200 DALI_TEST_CHECK( loadedSignalVerifier.LoadedImageCount() == 2 );
202 DALI_TEST_CHECK( loadedSignalVerifier.Verify( id01, 34, 34 ) ); // first image is successfully loaded
203 DALI_TEST_CHECK( !loadedSignalVerifier.Verify( id02, 25, 25 ) ); // second image is not loaded
204 DALI_TEST_CHECK( loadedSignalVerifier.Verify( id03, 100, 100 ) ); // third image is successfully loaded
209 int UtcDaliAsyncImageLoaderCancelAll(void)
211 ToolkitTestApplication application;
213 AsyncImageLoader loader = AsyncImageLoader::New();
214 ImageLoadedSignalVerifier loadedSignalVerifier;
216 loader.ImageLoadedSignal().Connect( &loadedSignalVerifier, &ImageLoadedSignalVerifier::ImageLoaded );
218 uint32_t id01 = loader.Load( gImage_34_RGBA, ImageDimensions( 34, 34 ) );
219 uint32_t id02 = loader.Load( gImage_50_RGBA, ImageDimensions( 25, 25 ) );
221 // cancel the loading of the first and second image
224 uint32_t id03 = loader.Load( gImage_128_RGB, ImageDimensions( 100, 100 ), FittingMode::SCALE_TO_FILL, SamplingMode::BOX_THEN_LINEAR, true );
226 EventThreadCallback* eventTrigger = EventThreadCallback::Get();
227 CallbackBase* callback = eventTrigger->GetCallback();
229 eventTrigger->WaitingForTrigger( 1 );// waiting until the third images is loaded
231 CallbackBase::Execute( *callback );
233 application.SendNotification();
234 application.Render();
236 DALI_TEST_CHECK( loadedSignalVerifier.LoadedImageCount() == 1 );
238 DALI_TEST_CHECK( !loadedSignalVerifier.Verify( id01, 34, 34 ) ); // first image is not loaded
239 DALI_TEST_CHECK( !loadedSignalVerifier.Verify( id02, 25, 25 ) ); // second image is not loaded
240 DALI_TEST_CHECK( loadedSignalVerifier.Verify( id03, 100, 100 ) ); // third image is successfully loaded