Move Progress Bar from Devel to Public API
[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/visuals/text-visual-properties.h>
21 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
22 #include <dali-toolkit/public-api/visuals/image-visual-properties.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 UtcDaliProgressBarDestructor(void)
91 {
92   ToolkitTestApplication application;
93
94   ProgressBar* progressBar = new ProgressBar();
95   delete progressBar;
96
97   DALI_TEST_CHECK( true );
98   END_TEST;
99 }
100
101 int UtcDaliProgressBarDownCast(void)
102 {
103   ToolkitTestApplication application;
104
105   Handle handle = ProgressBar::New();
106
107   ProgressBar progressBar = ProgressBar::DownCast( handle );
108
109   DALI_TEST_CHECK( progressBar == handle );
110   END_TEST;
111 }
112
113 static bool gProgressBarValueChangedCallBackCalled = false;
114
115 static void OnProgressBarValueChanged( ProgressBar progressBar, float value, float secondaryValue )
116 {
117   gProgressBarValueChangedCallBackCalled = true;
118 }
119
120 int UtcDaliProgressBarSignals(void)
121 {
122   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
123   tet_infoline(" UtcDaliProgressBarSignals");
124
125   // Create the ProgressBar actor
126   ProgressBar progressBar = ProgressBar::New();
127   Stage::GetCurrent().Add( progressBar );
128   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
129   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
130   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
131   progressBar.SetPosition( 0.0f, 0.0f );
132   progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
133
134   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
135
136   application.SendNotification();
137   application.Render();
138
139   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
140
141   //Check Secondary progress value can make signal
142   gProgressBarValueChangedCallBackCalled = false;
143   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.2f);
144
145   application.SendNotification();
146   application.Render();
147
148   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
149   END_TEST;
150 }
151
152 int UtcDaliProgressBarSetPropertyP(void)
153 {
154   ToolkitTestApplication application;
155   tet_infoline( "UtcDaliProgressBarSetPropertyP" );
156
157   ProgressBar progressBar = ProgressBar::New();
158   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
159   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
160   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
161   progressBar.SetPosition( 0.0f, 0.0f );
162   progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
163   Stage::GetCurrent().Add(progressBar);
164   application.SendNotification();
165   application.Render();
166
167   Property::Map map;
168   map["visualType"] = "IMAGE";
169   map[Toolkit::ImageVisual::Property::URL] = trackImage;
170   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, map);
171
172   Property::Value value = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
173   Property::Map* resultMap = value.GetMap();
174   DALI_TEST_CHECK( resultMap );
175   Property::Value* urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
176   std::string urlString;
177   urlValue->Get( urlString );
178   DALI_TEST_CHECK( !urlString.empty() ) ;
179   DALI_TEST_EQUALS( urlString, trackImage, TEST_LOCATION );
180
181   Property::Map colorMap;
182   colorMap["visualType"] = "COLOR";
183   colorMap[Toolkit::ColorVisual::Property::MIX_COLOR] = Color::RED;
184   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, colorMap);
185
186   value = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
187   resultMap = value.GetMap();
188   DALI_TEST_CHECK( resultMap );
189   Property::Value* colorValue = resultMap->Find( Toolkit::ColorVisual::Property::MIX_COLOR );
190   Vector4 color = Color::TRANSPARENT;
191   colorValue->Get( color );
192   DALI_TEST_CHECK( color != Color::TRANSPARENT );
193   DALI_TEST_EQUALS( color, Color::RED, TEST_LOCATION );
194
195   map[Toolkit::ImageVisual::Property::URL] = progressImage;
196   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
197
198   value = progressBar.GetProperty(ProgressBar::Property::PROGRESS_VISUAL);
199   resultMap = value.GetMap();
200   DALI_TEST_CHECK( resultMap );
201   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
202   urlValue->Get( urlString );
203   DALI_TEST_CHECK( !urlString.empty() ) ;
204   DALI_TEST_EQUALS( urlString, progressImage, TEST_LOCATION );
205
206   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
207
208   value = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
209   resultMap = value.GetMap();
210   DALI_TEST_CHECK( resultMap );
211   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
212   urlValue->Get( urlString );
213   DALI_TEST_CHECK( !urlString.empty() ) ;
214   DALI_TEST_EQUALS( urlString, secondaryProgressImage, TEST_LOCATION );
215
216   map[Toolkit::ImageVisual::Property::URL] = secondaryProgressImage;
217   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
218
219   value = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
220   resultMap = value.GetMap();
221   DALI_TEST_CHECK( resultMap );
222   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
223   urlValue->Get( urlString );
224   DALI_TEST_CHECK( !urlString.empty() ) ;
225   DALI_TEST_EQUALS( urlString, secondaryProgressImage, TEST_LOCATION );
226
227   map[Toolkit::ImageVisual::Property::URL] = indeterminateImage;
228   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
229
230   value = progressBar.GetProperty(ProgressBar::Property::INDETERMINATE_VISUAL);
231   resultMap = value.GetMap();
232   DALI_TEST_CHECK( resultMap );
233   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
234   urlValue->Get( urlString );
235   DALI_TEST_CHECK( !urlString.empty() ) ;
236   DALI_TEST_EQUALS( urlString, indeterminateImage, TEST_LOCATION );
237
238   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test1");
239
240   value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
241   resultMap = value.GetMap();
242   DALI_TEST_CHECK( resultMap );
243   Property::Value* textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
244
245   std::string textString;
246   textValue->Get( textString );
247   DALI_TEST_CHECK( !textString.empty() );
248   DALI_TEST_EQUALS( textString, std::string( "test1" ), TEST_LOCATION );
249
250   Property::Map textVisualMap2;
251   textVisualMap2.Insert( Toolkit::Visual::Property::TYPE, Toolkit::DevelVisual::TEXT );
252   textVisualMap2.Insert( Toolkit::TextVisual::Property::TEXT, "test2" );
253   textVisualMap2.Insert( Toolkit::TextVisual::Property::POINT_SIZE, 12.0f );
254   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, textVisualMap2);
255
256   value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
257   resultMap = value.GetMap();
258   DALI_TEST_CHECK( resultMap );
259   textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
260
261   textValue->Get( textString );
262   DALI_TEST_CHECK( !textString.empty() );
263   DALI_TEST_EQUALS( textString, std::string( "test2" ), TEST_LOCATION );
264
265   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test3");
266
267   value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
268   resultMap = value.GetMap();
269   DALI_TEST_CHECK( resultMap );
270   textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
271
272   std::string textString2;
273   textValue->Get( textString2 );
274   DALI_TEST_CHECK( !textString2.empty() );
275   DALI_TEST_EQUALS( textString2, std::string( "test3" ), TEST_LOCATION );
276
277   Property::Map transitionMap;
278   transitionMap["target"] = "indeterminateVisual";
279   transitionMap["property"] = "offset";
280   transitionMap["initialValue"] = Vector2( 0.0f, 0.0f );
281   transitionMap["targetValue"] = Vector2( 10.0f, 0.0f );
282   transitionMap["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
283                                              .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
284   Property::Array array;
285   array.PushBack( transitionMap );
286   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, array);
287
288   Property::Map transitionMap2;
289   transitionMap2["target"] = "indeterminateVisual";
290   transitionMap2["property"] = "offset";
291   transitionMap2["initialValue"] = Vector2( 0.0f, 0.0f );
292   transitionMap2["targetValue"] = Vector2( 15.0f, 0.0f );
293   transitionMap2["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
294                                              .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
295   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap2);
296   END_TEST;
297 }
298
299 int UtcDaliProgressBarSetPropertyP1(void)
300 {
301   ToolkitTestApplication application;
302   tet_infoline( "UtcDaliProgressBarSetPropertyP1" );
303
304   ProgressBar progressBar = ProgressBar::New();
305   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
306   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
307   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
308   progressBar.SetPosition( 0.0f, 0.0f );
309   progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
310
311   Stage::GetCurrent().Add(progressBar);
312   application.SendNotification();
313   application.Render();
314
315   float val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
316   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
317
318   // test to download a file of 100k in chunks
319   float lowerBound = 0, upperBound = 100, progressValue = 0, secondaryProgressValue = 0, chunkValue = 0;
320
321   while( chunkValue <= upperBound )
322   {
323     progressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
324     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
325     val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
326     DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
327     chunkValue = chunkValue + 10;
328   }
329
330   // test to download a file of 1000k in chunks
331   lowerBound = 0, upperBound = 1000, progressValue = 0, chunkValue = 0;
332
333   while( chunkValue <= upperBound )
334   {
335     progressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
336     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
337     val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
338     DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
339     chunkValue = chunkValue + 100;
340   }
341
342   val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
343   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
344
345   // test to download a file of 100k in chunks
346   lowerBound = 0, upperBound = 100, secondaryProgressValue = 0, chunkValue = 0;
347
348   while( chunkValue <= upperBound )
349   {
350     secondaryProgressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
351     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
352     val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
353     DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
354     chunkValue = chunkValue + 10;
355   }
356
357   // test to download a file of 1000k in chunks
358   lowerBound = 0, upperBound = 1000, secondaryProgressValue = 0, chunkValue = 0;
359
360   while( chunkValue <= upperBound )
361   {
362     secondaryProgressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
363     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
364     val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
365     DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
366     chunkValue = chunkValue + 100;
367   }
368
369   END_TEST;
370 }
371
372 int UtcDaliProgressBarSetPropertyP2(void)
373 {
374   ToolkitTestApplication application;
375   tet_infoline( "UtcDaliProgressBarSetPropertyP2" );
376
377   ProgressBar progressBar = ProgressBar::New();
378   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
379   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
380   progressBar.SetPosition( 0.0f, 0.0f );
381   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test");
382   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, true);
383   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, trackImage);
384   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, progressImage);
385   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
386   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, indeterminateImage);
387
388   Property::Map transitionMap;
389   transitionMap["target"] = "indeterminateVisual";
390   transitionMap["property"] = "offset";
391   transitionMap["initialValue"] = Vector2( 0.0f, 0.0f );
392   transitionMap["targetValue"] = Vector2( 10.0f, 0.0f );
393   transitionMap["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
394                                              .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
395   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap);
396   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
397   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.3f);
398
399   progressBar.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
400   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
401   Stage::GetCurrent().Add(progressBar);
402   application.SendNotification();
403   application.Render();
404
405   // Test get/set INDETERMINATE
406   bool val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
407   DALI_TEST_EQUALS(val, true, TEST_LOCATION);
408
409   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, false);
410   val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
411   DALI_TEST_EQUALS(val, false, TEST_LOCATION);
412
413   END_TEST;
414 }