[Tizen] Add circular ProgressBar style
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-ProgressBar.cpp
1 /*
2  * Copyright (c) 2017 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
24 using namespace Dali;
25 using namespace Dali::Toolkit;
26 using Dali::Toolkit::ProgressBar;
27
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 }
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 = Stage::GetCurrent().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 UtcDaliProgressBarDownCast(void)
118 {
119   ToolkitTestApplication application;
120
121   Handle handle = ProgressBar::New();
122
123   ProgressBar progressBar = ProgressBar::DownCast( handle );
124
125   DALI_TEST_CHECK( progressBar == handle );
126   END_TEST;
127 }
128
129 static bool gProgressBarValueChangedCallBackCalled = false;
130
131 static void OnProgressBarValueChanged( ProgressBar progressBar, float value, float secondaryValue )
132 {
133   gProgressBarValueChangedCallBackCalled = true;
134 }
135
136 int UtcDaliProgressBarSignals(void)
137 {
138   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
139   tet_infoline(" UtcDaliProgressBarSignals");
140
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 );
149
150   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
151
152   application.SendNotification();
153   application.Render();
154
155   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
156
157   //Check Secondary progress value can make signal
158   gProgressBarValueChangedCallBackCalled = false;
159   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.2f);
160
161   application.SendNotification();
162   application.Render();
163
164   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
165   END_TEST;
166 }
167
168 int UtcDaliProgressBarSetPropertyP(void)
169 {
170   ToolkitTestApplication application;
171   tet_infoline( "UtcDaliProgressBarSetPropertyP" );
172
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();
182
183   Property::Map map;
184   map["visualType"] = "IMAGE";
185   map[Toolkit::ImageVisual::Property::URL] = trackImage;
186   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, map);
187
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 );
196
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);
201
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 );
210
211   map[Toolkit::ImageVisual::Property::URL] = progressImage;
212   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
213
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 );
221
222   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
223
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 );
231
232   map[Toolkit::ImageVisual::Property::URL] = secondaryProgressImage;
233   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
234
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 );
242
243   map[Toolkit::ImageVisual::Property::URL] = indeterminateImage;
244   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
245
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 );
253
254   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test1");
255
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);
260
261   std::string textString;
262   textValue->Get( textString );
263   DALI_TEST_CHECK( !textString.empty() );
264   DALI_TEST_EQUALS( textString, std::string( "test1" ), TEST_LOCATION );
265
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);
271
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);
276
277   textValue->Get( textString );
278   DALI_TEST_CHECK( !textString.empty() );
279   DALI_TEST_EQUALS( textString, std::string( "test2" ), TEST_LOCATION );
280
281   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test3");
282
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);
287
288   std::string textString2;
289   textValue->Get( textString2 );
290   DALI_TEST_CHECK( !textString2.empty() );
291   DALI_TEST_EQUALS( textString2, std::string( "test3" ), TEST_LOCATION );
292
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);
303
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);
312   END_TEST;
313 }
314
315 int UtcDaliProgressBarSetPropertyP1(void)
316 {
317   ToolkitTestApplication application;
318   tet_infoline( "UtcDaliProgressBarSetPropertyP1" );
319
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 );
326
327   Stage::GetCurrent().Add(progressBar);
328   application.SendNotification();
329   application.Render();
330
331   float val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
332   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
333
334   // test to download a file of 100k in chunks
335   float lowerBound = 0, upperBound = 100, progressValue = 0, secondaryProgressValue = 0, chunkValue = 0;
336
337   while( chunkValue <= upperBound )
338   {
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;
344   }
345
346   // test to download a file of 1000k in chunks
347   lowerBound = 0, upperBound = 1000, progressValue = 0, chunkValue = 0;
348
349   while( chunkValue <= upperBound )
350   {
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;
356   }
357
358   val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
359   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
360
361   // test to download a file of 100k in chunks
362   lowerBound = 0, upperBound = 100, secondaryProgressValue = 0, chunkValue = 0;
363
364   while( chunkValue <= upperBound )
365   {
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;
371   }
372
373   // test to download a file of 1000k in chunks
374   lowerBound = 0, upperBound = 1000, secondaryProgressValue = 0, chunkValue = 0;
375
376   while( chunkValue <= upperBound )
377   {
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;
383   }
384
385   END_TEST;
386 }
387
388 int UtcDaliProgressBarSetPropertyP2(void)
389 {
390   ToolkitTestApplication application;
391   tet_infoline( "UtcDaliProgressBarSetPropertyP2" );
392
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);
403
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);
414
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();
420
421   // Test get/set INDETERMINATE
422   bool val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
423   DALI_TEST_EQUALS(val, true, TEST_LOCATION);
424
425   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, false);
426   val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
427   DALI_TEST_EQUALS(val, false, TEST_LOCATION);
428
429   END_TEST;
430 }
431
432 int UtcDaliProgressBarSetPropertyP3(void)
433 {
434   ToolkitTestApplication application;
435   tet_infoline( "UtcDaliProgressBarSetPropertyP3" );
436
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();
444
445   {
446     // Set arc visual to the SECONDARY_PROGRESS_VISUAL
447     const float expected = 180.0f;
448
449     Property::Map map;
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.
456
457     Property::Value value = progressBar.GetProperty( ProgressBar::Property::SECONDARY_PROGRESS_VISUAL );
458     Property::Map* resultMap = value.GetMap();
459     DALI_TEST_CHECK( resultMap );
460
461     Property::Value* sweepAngle = resultMap->Find( DevelArcVisual::Property::SWEEP_ANGLE );
462     float result = 0.0f;
463     sweepAngle->Get( result );
464     DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
465   }
466
467   {
468     // Set arc visual to the PROGRESS_VISUAL
469     const float expected = 90.0f;
470
471     Property::Map map;
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.
478
479     Property::Value value = progressBar.GetProperty( ProgressBar::Property::PROGRESS_VISUAL );
480     Property::Map* resultMap = value.GetMap();
481     DALI_TEST_CHECK( resultMap );
482
483     Property::Value* sweepAngle = resultMap->Find( DevelArcVisual::Property::SWEEP_ANGLE );
484     float result = 0.0f;
485     sweepAngle->Get( result );
486     DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
487   }
488
489   {
490     // Set arc visual to the INDETERMINATE_VISUAL
491     const Vector4 expected = Color::GREEN;
492
493     Property::Map map;
494     map["visualType"] = "ARC";
495     map["thickness"] = 4.0f;
496     map["mixColor"] = expected;
497     progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
498
499     Property::Value value = progressBar.GetProperty( ProgressBar::Property::INDETERMINATE_VISUAL );
500     Property::Map* resultMap = value.GetMap();
501     DALI_TEST_CHECK( resultMap );
502
503     Property::Value* mixColor = resultMap->Find( Visual::Property::MIX_COLOR );
504     Vector4 result;
505     mixColor->Get( result );
506     DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
507   }
508
509   {
510     // Set arc visual to the TRACK_VISUAL
511     const Vector4 expected = Color::YELLOW;
512
513     Property::Map map;
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.
519
520     Property::Value value = progressBar.GetProperty( ProgressBar::Property::TRACK_VISUAL );
521     Property::Map* resultMap = value.GetMap();
522     DALI_TEST_CHECK( resultMap );
523
524     Property::Value* mixColor = resultMap->Find( Visual::Property::MIX_COLOR );
525     Vector4 result;
526     mixColor->Get( result );
527     DALI_TEST_EQUALS( result, expected, TEST_LOCATION );
528   }
529
530   END_TEST;
531 }