Merge "fix issue in negative line spacing with key arrow down" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ProgressBar.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
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>
23 #include <dali/devel-api/actors/actor-devel.h>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27 using Dali::Toolkit::ProgressBar;
28
29 void utc_dali_toolkit_progressbar_startup(void)
30 {
31   test_return_value = TET_UNDEF;
32 }
33
34 void utc_dali_toolkit_progressbar_cleanup(void)
35 {
36   test_return_value = TET_PASS;
37 }
38
39 namespace
40 {
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;
46
47 static void TestCallback(BaseHandle handle)
48 {
49   gObjectCreatedCallBackCalled = true;
50 }
51
52 } // namespace
53
54 int UtcDaliProgressBarNew(void)
55 {
56   ToolkitTestApplication application;
57   tet_infoline(" UtcDaliProgressBarNew");
58
59   // Create the ProgressBar actor
60   ProgressBar progressBar;
61
62   DALI_TEST_CHECK(!progressBar);
63
64   progressBar = ProgressBar::New();
65
66   DALI_TEST_CHECK(progressBar);
67
68   ProgressBar progressBar2(progressBar);
69
70   DALI_TEST_CHECK(progressBar2 == progressBar);
71
72   ProgressBar progressBar3;
73   progressBar3 = progressBar2;
74
75   DALI_TEST_CHECK(progressBar3 == progressBar2);
76
77   //Additional check to ensure object is created by checking if it's registered
78   ObjectRegistry registry = application.GetCore().GetObjectRegistry();
79   DALI_TEST_CHECK(registry);
80
81   gObjectCreatedCallBackCalled = false;
82   registry.ObjectCreatedSignal().Connect(&TestCallback);
83   {
84     ProgressBar progressBar = ProgressBar::New();
85   }
86   DALI_TEST_CHECK(gObjectCreatedCallBackCalled);
87   END_TEST;
88 }
89
90 int UtcDaliProgressBarNew2(void)
91 {
92   ToolkitTestApplication application;
93   tet_infoline(" UtcDaliProgressBarNew2");
94
95   ProgressBar progressBar1 = DevelProgressBar::New(DevelProgressBar::Style::LINEAR);
96   DALI_TEST_CHECK(progressBar1);
97
98   ProgressBar progressBar2 = DevelProgressBar::New(DevelProgressBar::Style::CIRCULAR);
99   DALI_TEST_CHECK(progressBar2);
100
101   DALI_TEST_CHECK(progressBar1.GetStyleName() != progressBar2.GetStyleName());
102
103   END_TEST;
104 }
105
106 int UtcDaliProgressBarDestructor(void)
107 {
108   ToolkitTestApplication application;
109
110   ProgressBar* progressBar = new ProgressBar();
111   delete progressBar;
112
113   DALI_TEST_CHECK(true);
114   END_TEST;
115 }
116
117 int UtcDaliProgressBarCopyConstructor(void)
118 {
119   ToolkitTestApplication application;
120
121   ProgressBar progressBar = ProgressBar::New();
122   DALI_TEST_CHECK(progressBar);
123
124   ProgressBar copy(progressBar);
125   DALI_TEST_CHECK(copy);
126
127   END_TEST;
128 }
129
130 int UtcDaliProgressBarCopyAssignment(void)
131 {
132   ToolkitTestApplication application;
133
134   ProgressBar progressBar = ProgressBar::New();
135   DALI_TEST_CHECK(progressBar);
136
137   ProgressBar copy;
138   copy = progressBar;
139   DALI_TEST_CHECK(copy);
140   DALI_TEST_EQUALS(progressBar, copy, TEST_LOCATION);
141
142   END_TEST;
143 }
144
145 int UtcDaliProgressBarMoveConstructor(void)
146 {
147   ToolkitTestApplication application;
148
149   ProgressBar progressBar = ProgressBar::New();
150   DALI_TEST_EQUALS(1, progressBar.GetBaseObject().ReferenceCount(), TEST_LOCATION);
151   progressBar.SetProperty(Actor::Property::SENSITIVE, false);
152   DALI_TEST_CHECK(false == progressBar.GetProperty<bool>(Actor::Property::SENSITIVE));
153
154   ProgressBar moved = std::move(progressBar);
155   DALI_TEST_CHECK(moved);
156   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
157   DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
158   DALI_TEST_CHECK(!progressBar);
159
160   END_TEST;
161 }
162
163 int UtcDaliProgressBarMoveAssignment(void)
164 {
165   ToolkitTestApplication application;
166
167   ProgressBar progressBar = ProgressBar::New();
168   DALI_TEST_EQUALS(1, progressBar.GetBaseObject().ReferenceCount(), TEST_LOCATION);
169   progressBar.SetProperty(Actor::Property::SENSITIVE, false);
170   DALI_TEST_CHECK(false == progressBar.GetProperty<bool>(Actor::Property::SENSITIVE));
171
172   ProgressBar moved;
173   moved = std::move(progressBar);
174   DALI_TEST_CHECK(moved);
175   DALI_TEST_EQUALS(1, moved.GetBaseObject().ReferenceCount(), TEST_LOCATION);
176   DALI_TEST_CHECK(false == moved.GetProperty<bool>(Actor::Property::SENSITIVE));
177   DALI_TEST_CHECK(!progressBar);
178
179   END_TEST;
180 }
181
182 int UtcDaliProgressBarDownCast(void)
183 {
184   ToolkitTestApplication application;
185
186   Handle handle = ProgressBar::New();
187
188   ProgressBar progressBar = ProgressBar::DownCast(handle);
189
190   DALI_TEST_CHECK(progressBar == handle);
191   END_TEST;
192 }
193
194 static bool gProgressBarValueChangedCallBackCalled = false;
195
196 static void OnProgressBarValueChanged(ProgressBar progressBar, float value, float secondaryValue)
197 {
198   gProgressBarValueChangedCallBackCalled = true;
199 }
200
201 int UtcDaliProgressBarSignals(void)
202 {
203   ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
204   tet_infoline(" UtcDaliProgressBarSignals");
205
206   // Create the ProgressBar actor
207   ProgressBar progressBar = ProgressBar::New();
208   application.GetScene().Add(progressBar);
209   progressBar.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
210   progressBar.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
211   progressBar.SetProperty(Actor::Property::SIZE, Vector2(application.GetScene().GetSize().x, 20.0f));
212   progressBar.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
213   progressBar.ValueChangedSignal().Connect(&OnProgressBarValueChanged);
214
215   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
216
217   application.SendNotification();
218   application.Render();
219
220   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
221
222   //Check Secondary progress value can make signal
223   gProgressBarValueChangedCallBackCalled = false;
224   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.2f);
225
226   application.SendNotification();
227   application.Render();
228
229   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
230   END_TEST;
231 }
232
233 int UtcDaliProgressBarSetPropertyP(void)
234 {
235   ToolkitTestApplication application;
236   tet_infoline("UtcDaliProgressBarSetPropertyP");
237
238   ProgressBar progressBar = ProgressBar::New();
239   progressBar.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
240   progressBar.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
241   progressBar.SetProperty(Actor::Property::SIZE, Vector2(application.GetScene().GetSize().x, 20.0f));
242   progressBar.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
243   progressBar.ValueChangedSignal().Connect(&OnProgressBarValueChanged);
244   application.GetScene().Add(progressBar);
245   application.SendNotification();
246   application.Render();
247
248   Property::Map map;
249   map["visualType"]                        = "IMAGE";
250   map[Toolkit::ImageVisual::Property::URL] = trackImage;
251   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, map);
252
253   Property::Value value     = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
254   Property::Map*  resultMap = value.GetMap();
255   DALI_TEST_CHECK(resultMap);
256   Property::Value* urlValue = resultMap->Find(Toolkit::ImageVisual::Property::URL);
257   std::string      urlString;
258   urlValue->Get(urlString);
259   DALI_TEST_CHECK(!urlString.empty());
260   DALI_TEST_EQUALS(urlString, trackImage, TEST_LOCATION);
261
262   Property::Map colorMap;
263   colorMap["visualType"]                              = "COLOR";
264   colorMap[Toolkit::ColorVisual::Property::MIX_COLOR] = Color::RED;
265   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, colorMap);
266
267   value     = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
268   resultMap = value.GetMap();
269   DALI_TEST_CHECK(resultMap);
270   Property::Value* colorValue = resultMap->Find(Toolkit::ColorVisual::Property::MIX_COLOR);
271   Vector4          color      = Color::TRANSPARENT;
272   colorValue->Get(color);
273   DALI_TEST_CHECK(color != Color::TRANSPARENT);
274   DALI_TEST_EQUALS(color, Color::RED, TEST_LOCATION);
275
276   map[Toolkit::ImageVisual::Property::URL] = progressImage;
277   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
278
279   value     = progressBar.GetProperty(ProgressBar::Property::PROGRESS_VISUAL);
280   resultMap = value.GetMap();
281   DALI_TEST_CHECK(resultMap);
282   urlValue = resultMap->Find(Toolkit::ImageVisual::Property::URL);
283   urlValue->Get(urlString);
284   DALI_TEST_CHECK(!urlString.empty());
285   DALI_TEST_EQUALS(urlString, progressImage, TEST_LOCATION);
286
287   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
288
289   value     = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
290   resultMap = value.GetMap();
291   DALI_TEST_CHECK(resultMap);
292   urlValue = resultMap->Find(Toolkit::ImageVisual::Property::URL);
293   urlValue->Get(urlString);
294   DALI_TEST_CHECK(!urlString.empty());
295   DALI_TEST_EQUALS(urlString, secondaryProgressImage, TEST_LOCATION);
296
297   map[Toolkit::ImageVisual::Property::URL] = secondaryProgressImage;
298   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
299
300   value     = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
301   resultMap = value.GetMap();
302   DALI_TEST_CHECK(resultMap);
303   urlValue = resultMap->Find(Toolkit::ImageVisual::Property::URL);
304   urlValue->Get(urlString);
305   DALI_TEST_CHECK(!urlString.empty());
306   DALI_TEST_EQUALS(urlString, secondaryProgressImage, TEST_LOCATION);
307
308   map[Toolkit::ImageVisual::Property::URL] = indeterminateImage;
309   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
310
311   value     = progressBar.GetProperty(ProgressBar::Property::INDETERMINATE_VISUAL);
312   resultMap = value.GetMap();
313   DALI_TEST_CHECK(resultMap);
314   urlValue = resultMap->Find(Toolkit::ImageVisual::Property::URL);
315   urlValue->Get(urlString);
316   DALI_TEST_CHECK(!urlString.empty());
317   DALI_TEST_EQUALS(urlString, indeterminateImage, TEST_LOCATION);
318
319   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test1");
320
321   value     = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
322   resultMap = value.GetMap();
323   DALI_TEST_CHECK(resultMap);
324   Property::Value* textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
325
326   std::string textString;
327   textValue->Get(textString);
328   DALI_TEST_CHECK(!textString.empty());
329   DALI_TEST_EQUALS(textString, std::string("test1"), TEST_LOCATION);
330
331   Property::Map textVisualMap2;
332   textVisualMap2.Insert(Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT);
333   textVisualMap2.Insert(Toolkit::TextVisual::Property::TEXT, "test2");
334   textVisualMap2.Insert(Toolkit::TextVisual::Property::POINT_SIZE, 12.0f);
335   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, textVisualMap2);
336
337   value     = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
338   resultMap = value.GetMap();
339   DALI_TEST_CHECK(resultMap);
340   textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
341
342   textValue->Get(textString);
343   DALI_TEST_CHECK(!textString.empty());
344   DALI_TEST_EQUALS(textString, std::string("test2"), TEST_LOCATION);
345
346   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test3");
347
348   value     = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
349   resultMap = value.GetMap();
350   DALI_TEST_CHECK(resultMap);
351   textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
352
353   std::string textString2;
354   textValue->Get(textString2);
355   DALI_TEST_CHECK(!textString2.empty());
356   DALI_TEST_EQUALS(textString2, std::string("test3"), TEST_LOCATION);
357
358   Property::Map transitionMap;
359   transitionMap["target"]       = "indeterminateVisual";
360   transitionMap["property"]     = "offset";
361   transitionMap["initialValue"] = Vector2(0.0f, 0.0f);
362   transitionMap["targetValue"]  = Vector2(10.0f, 0.0f);
363   transitionMap["animator"]     = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK").Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
364   Property::Array array;
365   array.PushBack(transitionMap);
366   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, array);
367
368   Property::Map transitionMap2;
369   transitionMap2["target"]       = "indeterminateVisual";
370   transitionMap2["property"]     = "offset";
371   transitionMap2["initialValue"] = Vector2(0.0f, 0.0f);
372   transitionMap2["targetValue"]  = Vector2(15.0f, 0.0f);
373   transitionMap2["animator"]     = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK").Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
374   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap2);
375   END_TEST;
376 }
377
378 int UtcDaliProgressBarSetPropertyP1(void)
379 {
380   ToolkitTestApplication application;
381   tet_infoline("UtcDaliProgressBarSetPropertyP1");
382
383   ProgressBar progressBar = ProgressBar::New();
384   progressBar.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
385   progressBar.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
386   progressBar.SetProperty(Actor::Property::SIZE, Vector2(application.GetScene().GetSize().x, 20.0f));
387   progressBar.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
388   progressBar.ValueChangedSignal().Connect(&OnProgressBarValueChanged);
389
390   application.GetScene().Add(progressBar);
391   application.SendNotification();
392   application.Render();
393
394   float val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
395   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
396
397   // test to download a file of 100k in chunks
398   float lowerBound = 0, upperBound = 100, progressValue = 0, secondaryProgressValue = 0, chunkValue = 0;
399
400   while(chunkValue <= upperBound)
401   {
402     progressValue = (chunkValue - lowerBound) / (upperBound - lowerBound);
403     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
404     val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
405     DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
406     chunkValue = chunkValue + 10;
407   }
408
409   // test to download a file of 1000k in chunks
410   lowerBound = 0, upperBound = 1000, progressValue = 0, chunkValue = 0;
411
412   while(chunkValue <= upperBound)
413   {
414     progressValue = (chunkValue - lowerBound) / (upperBound - lowerBound);
415     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
416     val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
417     DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
418     chunkValue = chunkValue + 100;
419   }
420
421   val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
422   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
423
424   // test to download a file of 100k in chunks
425   lowerBound = 0, upperBound = 100, secondaryProgressValue = 0, chunkValue = 0;
426
427   while(chunkValue <= upperBound)
428   {
429     secondaryProgressValue = (chunkValue - lowerBound) / (upperBound - lowerBound);
430     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
431     val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
432     DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
433     chunkValue = chunkValue + 10;
434   }
435
436   // test to download a file of 1000k in chunks
437   lowerBound = 0, upperBound = 1000, secondaryProgressValue = 0, chunkValue = 0;
438
439   while(chunkValue <= upperBound)
440   {
441     secondaryProgressValue = (chunkValue - lowerBound) / (upperBound - lowerBound);
442     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
443     val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
444     DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
445     chunkValue = chunkValue + 100;
446   }
447
448   END_TEST;
449 }
450
451 int UtcDaliProgressBarSetPropertyP2(void)
452 {
453   ToolkitTestApplication application;
454   tet_infoline("UtcDaliProgressBarSetPropertyP2");
455
456   ProgressBar progressBar = ProgressBar::New();
457   progressBar.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
458   progressBar.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
459   progressBar.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
460   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test");
461   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, true);
462   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, trackImage);
463   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, progressImage);
464   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
465   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, indeterminateImage);
466
467   Property::Map transitionMap;
468   transitionMap["target"]       = "indeterminateVisual";
469   transitionMap["property"]     = "offset";
470   transitionMap["initialValue"] = Vector2(0.0f, 0.0f);
471   transitionMap["targetValue"]  = Vector2(10.0f, 0.0f);
472   transitionMap["animator"]     = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK").Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
473   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap);
474   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
475   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.3f);
476
477   progressBar.SetResizePolicy(ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS);
478   progressBar.SetProperty(Actor::Property::SIZE, Vector2(application.GetScene().GetSize().x, 20.0f));
479   application.GetScene().Add(progressBar);
480   application.SendNotification();
481   application.Render();
482
483   // Test get/set INDETERMINATE
484   bool val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
485   DALI_TEST_EQUALS(val, true, TEST_LOCATION);
486
487   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, false);
488   val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
489   DALI_TEST_EQUALS(val, false, TEST_LOCATION);
490
491   END_TEST;
492 }
493
494 int UtcDaliProgressBarSetPropertyP3(void)
495 {
496   ToolkitTestApplication application;
497   tet_infoline("UtcDaliProgressBarSetPropertyP3");
498
499   ProgressBar progressBar = ProgressBar::New();
500   progressBar.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT);
501   progressBar.SetProperty(Actor::Property::ANCHOR_POINT, ParentOrigin::TOP_LEFT);
502   progressBar.SetProperty(Actor::Property::SIZE, Vector2(application.GetScene().GetSize().x, application.GetScene().GetSize().y));
503   application.GetScene().Add(progressBar);
504   application.SendNotification();
505   application.Render();
506
507   {
508     // Set arc visual to the SECONDARY_PROGRESS_VISUAL
509     const float expected = 180.0f;
510
511     Property::Map map;
512     map["visualType"] = "ARC";
513     map["thickness"]  = 4.0f;
514     map["mixColor"]   = Color::BLUE;
515     map["sweepAngle"] = 60;
516     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
517     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.5f); // This should change visual's sweep angle.
518
519     Property::Value value     = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
520     Property::Map*  resultMap = value.GetMap();
521     DALI_TEST_CHECK(resultMap);
522
523     Property::Value* sweepAngle = resultMap->Find(DevelArcVisual::Property::SWEEP_ANGLE);
524     float            result     = 0.0f;
525     sweepAngle->Get(result);
526     DALI_TEST_EQUALS(result, expected, TEST_LOCATION);
527   }
528
529   {
530     // Set arc visual to the PROGRESS_VISUAL
531     const float expected = 90.0f;
532
533     Property::Map map;
534     map["visualType"] = "ARC";
535     map["thickness"]  = 4.0f;
536     map["mixColor"]   = Color::RED;
537     map["sweepAngle"] = 60;
538     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
539     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.25f); // This should change visual's sweep angle.
540
541     Property::Value value     = progressBar.GetProperty(ProgressBar::Property::PROGRESS_VISUAL);
542     Property::Map*  resultMap = value.GetMap();
543     DALI_TEST_CHECK(resultMap);
544
545     Property::Value* sweepAngle = resultMap->Find(DevelArcVisual::Property::SWEEP_ANGLE);
546     float            result     = 0.0f;
547     sweepAngle->Get(result);
548     DALI_TEST_EQUALS(result, expected, TEST_LOCATION);
549   }
550
551   {
552     // Set arc visual to the INDETERMINATE_VISUAL
553     const Vector4 expected = Color::GREEN;
554
555     Property::Map map;
556     map["visualType"] = "ARC";
557     map["thickness"]  = 4.0f;
558     map["mixColor"]   = expected;
559     progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
560
561     Property::Value value     = progressBar.GetProperty(ProgressBar::Property::INDETERMINATE_VISUAL);
562     Property::Map*  resultMap = value.GetMap();
563     DALI_TEST_CHECK(resultMap);
564
565     Property::Value* mixColor = resultMap->Find(Visual::Property::MIX_COLOR);
566     Vector4          result;
567     mixColor->Get(result);
568     DALI_TEST_EQUALS(result, expected, TEST_LOCATION);
569   }
570
571   {
572     // Set arc visual to the TRACK_VISUAL
573     const Vector4 expected = Color::YELLOW;
574
575     Property::Map map;
576     map["visualType"] = "ARC";
577     map["thickness"]  = 0.4f;
578     map["mixColor"]   = expected;
579     progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, map);
580     progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, true); // This should not change track visual's properties.
581
582     Property::Value value     = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
583     Property::Map*  resultMap = value.GetMap();
584     DALI_TEST_CHECK(resultMap);
585
586     Property::Value* mixColor = resultMap->Find(Visual::Property::MIX_COLOR);
587     Vector4          result;
588     mixColor->Get(result);
589     DALI_TEST_EQUALS(result, expected, TEST_LOCATION);
590   }
591
592   END_TEST;
593 }