2 * Copyright (c) 2017 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.
18 #include <dali-toolkit-test-suite-utils.h>
19 #include <dali-toolkit/dali-toolkit.h>
20 #include <dali-toolkit/devel-api/controls/progress-bar/progress-bar-devel.h>
21 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
22 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
25 using namespace Dali::Toolkit;
26 using Dali::Toolkit::ProgressBar;
29 void utc_dali_toolkit_progressbar_startup(void)
31 test_return_value = TET_UNDEF;
34 void utc_dali_toolkit_progressbar_cleanup(void)
36 test_return_value = TET_PASS;
41 static const char* trackImage = TEST_RESOURCE_DIR "/progress-bar-skin-track-progress.png";
42 static const char* progressImage = TEST_RESOURCE_DIR "/progress-bar-skin-progress-progress.png";
43 static const char* secondaryProgressImage = TEST_RESOURCE_DIR "/progress-bar-skin-secondary-progress.png";
44 static const char* indeterminateImage = TEST_RESOURCE_DIR "/progress-bar-skin-indeterminate.png";
45 static bool gObjectCreatedCallBackCalled;
47 static void TestCallback(BaseHandle handle)
49 gObjectCreatedCallBackCalled = true;
54 int UtcDaliProgressBarNew(void)
56 ToolkitTestApplication application;
57 tet_infoline(" UtcDaliProgressBarNew");
59 // Create the ProgressBar actor
60 ProgressBar progressBar;
62 DALI_TEST_CHECK( !progressBar );
64 progressBar = ProgressBar::New();
66 DALI_TEST_CHECK( progressBar );
68 ProgressBar progressBar2(progressBar);
70 DALI_TEST_CHECK( progressBar2 == progressBar );
72 ProgressBar progressBar3;
73 progressBar3 = progressBar2;
75 DALI_TEST_CHECK( progressBar3 == progressBar2 );
77 //Additional check to ensure object is created by checking if it's registered
78 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
79 DALI_TEST_CHECK( registry );
81 gObjectCreatedCallBackCalled = false;
82 registry.ObjectCreatedSignal().Connect( &TestCallback );
84 ProgressBar progressBar = ProgressBar::New();
86 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
90 int UtcDaliProgressBarNew2(void)
92 ToolkitTestApplication application;
93 tet_infoline(" UtcDaliProgressBarNew2");
95 ProgressBar progressBar1 = DevelProgressBar::New( DevelProgressBar::Style::LINEAR );
96 DALI_TEST_CHECK( progressBar1 );
98 ProgressBar progressBar2 = DevelProgressBar::New( DevelProgressBar::Style::CIRCULAR );
99 DALI_TEST_CHECK( progressBar2 );
101 DALI_TEST_CHECK( progressBar1.GetStyleName() != progressBar2.GetStyleName() );
106 int UtcDaliProgressBarDestructor(void)
108 ToolkitTestApplication application;
110 ProgressBar* progressBar = new ProgressBar();
113 DALI_TEST_CHECK( true );
117 int UtcDaliProgressBarDownCast(void)
119 ToolkitTestApplication application;
121 Handle handle = ProgressBar::New();
123 ProgressBar progressBar = ProgressBar::DownCast( handle );
125 DALI_TEST_CHECK( progressBar == handle );
129 static bool gProgressBarValueChangedCallBackCalled = false;
131 static void OnProgressBarValueChanged( ProgressBar progressBar, float value, float secondaryValue )
133 gProgressBarValueChangedCallBackCalled = true;
136 int UtcDaliProgressBarSignals(void)
138 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
139 tet_infoline(" UtcDaliProgressBarSignals");
141 // Create the ProgressBar actor
142 ProgressBar progressBar = ProgressBar::New();
143 Stage::GetCurrent().Add( progressBar );
144 progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
145 progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
146 progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
147 progressBar.SetPosition( 0.0f, 0.0f );
148 progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
150 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
152 application.SendNotification();
153 application.Render();
155 DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
157 //Check Secondary progress value can make signal
158 gProgressBarValueChangedCallBackCalled = false;
159 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.2f);
161 application.SendNotification();
162 application.Render();
164 DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
168 int UtcDaliProgressBarSetPropertyP(void)
170 ToolkitTestApplication application;
171 tet_infoline( "UtcDaliProgressBarSetPropertyP" );
173 ProgressBar progressBar = ProgressBar::New();
174 progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
175 progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
176 progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
177 progressBar.SetPosition( 0.0f, 0.0f );
178 progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
179 Stage::GetCurrent().Add(progressBar);
180 application.SendNotification();
181 application.Render();
184 map["visualType"] = "IMAGE";
185 map[Toolkit::ImageVisual::Property::URL] = trackImage;
186 progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, map);
188 Property::Value value = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
189 Property::Map* resultMap = value.GetMap();
190 DALI_TEST_CHECK( resultMap );
191 Property::Value* urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
192 std::string urlString;
193 urlValue->Get( urlString );
194 DALI_TEST_CHECK( !urlString.empty() ) ;
195 DALI_TEST_EQUALS( urlString, trackImage, TEST_LOCATION );
197 Property::Map colorMap;
198 colorMap["visualType"] = "COLOR";
199 colorMap[Toolkit::ColorVisual::Property::MIX_COLOR] = Color::RED;
200 progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, colorMap);
202 value = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
203 resultMap = value.GetMap();
204 DALI_TEST_CHECK( resultMap );
205 Property::Value* colorValue = resultMap->Find( Toolkit::ColorVisual::Property::MIX_COLOR );
206 Vector4 color = Color::TRANSPARENT;
207 colorValue->Get( color );
208 DALI_TEST_CHECK( color != Color::TRANSPARENT );
209 DALI_TEST_EQUALS( color, Color::RED, TEST_LOCATION );
211 map[Toolkit::ImageVisual::Property::URL] = progressImage;
212 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
214 value = progressBar.GetProperty(ProgressBar::Property::PROGRESS_VISUAL);
215 resultMap = value.GetMap();
216 DALI_TEST_CHECK( resultMap );
217 urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
218 urlValue->Get( urlString );
219 DALI_TEST_CHECK( !urlString.empty() ) ;
220 DALI_TEST_EQUALS( urlString, progressImage, TEST_LOCATION );
222 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
224 value = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
225 resultMap = value.GetMap();
226 DALI_TEST_CHECK( resultMap );
227 urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
228 urlValue->Get( urlString );
229 DALI_TEST_CHECK( !urlString.empty() ) ;
230 DALI_TEST_EQUALS( urlString, secondaryProgressImage, TEST_LOCATION );
232 map[Toolkit::ImageVisual::Property::URL] = secondaryProgressImage;
233 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
235 value = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
236 resultMap = value.GetMap();
237 DALI_TEST_CHECK( resultMap );
238 urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
239 urlValue->Get( urlString );
240 DALI_TEST_CHECK( !urlString.empty() ) ;
241 DALI_TEST_EQUALS( urlString, secondaryProgressImage, TEST_LOCATION );
243 map[Toolkit::ImageVisual::Property::URL] = indeterminateImage;
244 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
246 value = progressBar.GetProperty(ProgressBar::Property::INDETERMINATE_VISUAL);
247 resultMap = value.GetMap();
248 DALI_TEST_CHECK( resultMap );
249 urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
250 urlValue->Get( urlString );
251 DALI_TEST_CHECK( !urlString.empty() ) ;
252 DALI_TEST_EQUALS( urlString, indeterminateImage, TEST_LOCATION );
254 progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test1");
256 value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
257 resultMap = value.GetMap();
258 DALI_TEST_CHECK( resultMap );
259 Property::Value* textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
261 std::string textString;
262 textValue->Get( textString );
263 DALI_TEST_CHECK( !textString.empty() );
264 DALI_TEST_EQUALS( textString, std::string( "test1" ), TEST_LOCATION );
266 Property::Map textVisualMap2;
267 textVisualMap2.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT );
268 textVisualMap2.Insert( Toolkit::TextVisual::Property::TEXT, "test2" );
269 textVisualMap2.Insert( Toolkit::TextVisual::Property::POINT_SIZE, 12.0f );
270 progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, textVisualMap2);
272 value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
273 resultMap = value.GetMap();
274 DALI_TEST_CHECK( resultMap );
275 textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
277 textValue->Get( textString );
278 DALI_TEST_CHECK( !textString.empty() );
279 DALI_TEST_EQUALS( textString, std::string( "test2" ), TEST_LOCATION );
281 progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test3");
283 value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
284 resultMap = value.GetMap();
285 DALI_TEST_CHECK( resultMap );
286 textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
288 std::string textString2;
289 textValue->Get( textString2 );
290 DALI_TEST_CHECK( !textString2.empty() );
291 DALI_TEST_EQUALS( textString2, std::string( "test3" ), TEST_LOCATION );
293 Property::Map transitionMap;
294 transitionMap["target"] = "indeterminateVisual";
295 transitionMap["property"] = "offset";
296 transitionMap["initialValue"] = Vector2( 0.0f, 0.0f );
297 transitionMap["targetValue"] = Vector2( 10.0f, 0.0f );
298 transitionMap["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
299 .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
300 Property::Array array;
301 array.PushBack( transitionMap );
302 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, array);
304 Property::Map transitionMap2;
305 transitionMap2["target"] = "indeterminateVisual";
306 transitionMap2["property"] = "offset";
307 transitionMap2["initialValue"] = Vector2( 0.0f, 0.0f );
308 transitionMap2["targetValue"] = Vector2( 15.0f, 0.0f );
309 transitionMap2["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
310 .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
311 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap2);
315 int UtcDaliProgressBarSetPropertyP1(void)
317 ToolkitTestApplication application;
318 tet_infoline( "UtcDaliProgressBarSetPropertyP1" );
320 ProgressBar progressBar = ProgressBar::New();
321 progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
322 progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
323 progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
324 progressBar.SetPosition( 0.0f, 0.0f );
325 progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
327 Stage::GetCurrent().Add(progressBar);
328 application.SendNotification();
329 application.Render();
331 float val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
332 DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
334 // test to download a file of 100k in chunks
335 float lowerBound = 0, upperBound = 100, progressValue = 0, secondaryProgressValue = 0, chunkValue = 0;
337 while( chunkValue <= upperBound )
339 progressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
340 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
341 val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
342 DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
343 chunkValue = chunkValue + 10;
346 // test to download a file of 1000k in chunks
347 lowerBound = 0, upperBound = 1000, progressValue = 0, chunkValue = 0;
349 while( chunkValue <= upperBound )
351 progressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
352 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
353 val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
354 DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
355 chunkValue = chunkValue + 100;
358 val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
359 DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
361 // test to download a file of 100k in chunks
362 lowerBound = 0, upperBound = 100, secondaryProgressValue = 0, chunkValue = 0;
364 while( chunkValue <= upperBound )
366 secondaryProgressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
367 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
368 val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
369 DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
370 chunkValue = chunkValue + 10;
373 // test to download a file of 1000k in chunks
374 lowerBound = 0, upperBound = 1000, secondaryProgressValue = 0, chunkValue = 0;
376 while( chunkValue <= upperBound )
378 secondaryProgressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
379 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
380 val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
381 DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
382 chunkValue = chunkValue + 100;
388 int UtcDaliProgressBarSetPropertyP2(void)
390 ToolkitTestApplication application;
391 tet_infoline( "UtcDaliProgressBarSetPropertyP2" );
393 ProgressBar progressBar = ProgressBar::New();
394 progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
395 progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
396 progressBar.SetPosition( 0.0f, 0.0f );
397 progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test");
398 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, true);
399 progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, trackImage);
400 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, progressImage);
401 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
402 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, indeterminateImage);
404 Property::Map transitionMap;
405 transitionMap["target"] = "indeterminateVisual";
406 transitionMap["property"] = "offset";
407 transitionMap["initialValue"] = Vector2( 0.0f, 0.0f );
408 transitionMap["targetValue"] = Vector2( 10.0f, 0.0f );
409 transitionMap["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
410 .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
411 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap);
412 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
413 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.3f);
415 progressBar.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
416 progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
417 Stage::GetCurrent().Add(progressBar);
418 application.SendNotification();
419 application.Render();
421 // Test get/set INDETERMINATE
422 bool val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
423 DALI_TEST_EQUALS(val, true, TEST_LOCATION);
425 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, false);
426 val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
427 DALI_TEST_EQUALS(val, false, TEST_LOCATION);
432 int UtcDaliProgressBarSetPropertyP3(void)
434 ToolkitTestApplication application;
435 tet_infoline( "UtcDaliProgressBarSetPropertyP3" );
437 ProgressBar progressBar = ProgressBar::New();
438 progressBar.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
439 progressBar.SetProperty( Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
440 progressBar.SetProperty( Actor::Property::SIZE, Vector2( Stage::GetCurrent().GetSize().x, Stage::GetCurrent().GetSize().y ) );
441 Stage::GetCurrent().Add( progressBar );
442 application.SendNotification();
443 application.Render();
446 // Set arc visual to the SECONDARY_PROGRESS_VISUAL
447 const float expected = 180.0f;
450 map["visualType"] = "ARC";
451 map["thickness"] = 4.0f;
452 map["mixColor"] = Color::BLUE;
453 map["sweepAngle"] = 60;
454 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
455 progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.5f); // This should change visual's sweep angle.
457 Property::Value value = progressBar.GetProperty( ProgressBar::Property::SECONDARY_PROGRESS_VISUAL );
458 Property::Map* resultMap = value.GetMap();
459 DALI_TEST_CHECK( resultMap );
461 Property::Value* sweepAngle = resultMap->Find( DevelArcVisual::Property::SWEEP_ANGLE );
463 sweepAngle->Get( result );
464 DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
468 // Set arc visual to the PROGRESS_VISUAL
469 const float expected = 90.0f;
472 map["visualType"] = "ARC";
473 map["thickness"] = 4.0f;
474 map["mixColor"] = Color::RED;
475 map["sweepAngle"] = 60;
476 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
477 progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.25f); // This should change visual's sweep angle.
479 Property::Value value = progressBar.GetProperty( ProgressBar::Property::PROGRESS_VISUAL );
480 Property::Map* resultMap = value.GetMap();
481 DALI_TEST_CHECK( resultMap );
483 Property::Value* sweepAngle = resultMap->Find( DevelArcVisual::Property::SWEEP_ANGLE );
485 sweepAngle->Get( result );
486 DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
490 // Set arc visual to the INDETERMINATE_VISUAL
491 const Vector4 expected = Color::GREEN;
494 map["visualType"] = "ARC";
495 map["thickness"] = 4.0f;
496 map["mixColor"] = expected;
497 progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
499 Property::Value value = progressBar.GetProperty( ProgressBar::Property::INDETERMINATE_VISUAL );
500 Property::Map* resultMap = value.GetMap();
501 DALI_TEST_CHECK( resultMap );
503 Property::Value* mixColor = resultMap->Find( Visual::Property::MIX_COLOR );
505 mixColor->Get( result );
506 DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
510 // Set arc visual to the TRACK_VISUAL
511 const Vector4 expected = Color::YELLOW;
514 map["visualType"] = "ARC";
515 map["thickness"] = 0.4f;
516 map["mixColor"] = expected;
517 progressBar.SetProperty( ProgressBar::Property::TRACK_VISUAL, map );
518 progressBar.SetProperty( ProgressBar::Property::INDETERMINATE, true ); // This should not change track visual's properties.
520 Property::Value value = progressBar.GetProperty( ProgressBar::Property::TRACK_VISUAL );
521 Property::Map* resultMap = value.GetMap();
522 DALI_TEST_CHECK( resultMap );
524 Property::Value* mixColor = resultMap->Find( Visual::Property::MIX_COLOR );
526 mixColor->Get( result );
527 DALI_TEST_EQUALS( result, expected, TEST_LOCATION );