Add animated vector image visual
[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
21 using namespace Dali;
22 using namespace Dali::Toolkit;
23 using Dali::Toolkit::ProgressBar;
24
25
26 void utc_dali_toolkit_progressbar_startup(void)
27 {
28   test_return_value = TET_UNDEF;
29 }
30
31 void utc_dali_toolkit_progressbar_cleanup(void)
32 {
33   test_return_value = TET_PASS;
34 }
35
36 namespace
37 {
38 static const char* trackImage = TEST_RESOURCE_DIR "/progress-bar-skin-track-progress.png";
39 static const char* progressImage = TEST_RESOURCE_DIR "/progress-bar-skin-progress-progress.png";
40 static const char* secondaryProgressImage = TEST_RESOURCE_DIR "/progress-bar-skin-secondary-progress.png";
41 static const char* indeterminateImage = TEST_RESOURCE_DIR "/progress-bar-skin-indeterminate.png";
42 static bool gObjectCreatedCallBackCalled;
43
44 static void TestCallback(BaseHandle handle)
45 {
46   gObjectCreatedCallBackCalled = true;
47 }
48
49 }
50
51 int UtcDaliProgressBarNew(void)
52 {
53   ToolkitTestApplication application;
54   tet_infoline(" UtcDaliProgressBarNew");
55
56   // Create the ProgressBar actor
57   ProgressBar progressBar;
58
59   DALI_TEST_CHECK( !progressBar );
60
61   progressBar = ProgressBar::New();
62
63   DALI_TEST_CHECK( progressBar );
64
65   ProgressBar progressBar2(progressBar);
66
67   DALI_TEST_CHECK( progressBar2 == progressBar );
68
69   ProgressBar progressBar3;
70   progressBar3 = progressBar2;
71
72   DALI_TEST_CHECK( progressBar3 == progressBar2 );
73
74   //Additional check to ensure object is created by checking if it's registered
75   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
76   DALI_TEST_CHECK( registry );
77
78   gObjectCreatedCallBackCalled = false;
79   registry.ObjectCreatedSignal().Connect( &TestCallback );
80   {
81     ProgressBar progressBar = ProgressBar::New();
82   }
83   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
84   END_TEST;
85 }
86
87 int UtcDaliProgressBarDestructor(void)
88 {
89   ToolkitTestApplication application;
90
91   ProgressBar* progressBar = new ProgressBar();
92   delete progressBar;
93
94   DALI_TEST_CHECK( true );
95   END_TEST;
96 }
97
98 int UtcDaliProgressBarDownCast(void)
99 {
100   ToolkitTestApplication application;
101
102   Handle handle = ProgressBar::New();
103
104   ProgressBar progressBar = ProgressBar::DownCast( handle );
105
106   DALI_TEST_CHECK( progressBar == handle );
107   END_TEST;
108 }
109
110 static bool gProgressBarValueChangedCallBackCalled = false;
111
112 static void OnProgressBarValueChanged( ProgressBar progressBar, float value, float secondaryValue )
113 {
114   gProgressBarValueChangedCallBackCalled = true;
115 }
116
117 int UtcDaliProgressBarSignals(void)
118 {
119   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
120   tet_infoline(" UtcDaliProgressBarSignals");
121
122   // Create the ProgressBar actor
123   ProgressBar progressBar = ProgressBar::New();
124   Stage::GetCurrent().Add( progressBar );
125   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
126   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
127   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
128   progressBar.SetPosition( 0.0f, 0.0f );
129   progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
130
131   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
132
133   application.SendNotification();
134   application.Render();
135
136   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
137
138   //Check Secondary progress value can make signal
139   gProgressBarValueChangedCallBackCalled = false;
140   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.2f);
141
142   application.SendNotification();
143   application.Render();
144
145   DALI_TEST_CHECK(gProgressBarValueChangedCallBackCalled);
146   END_TEST;
147 }
148
149 int UtcDaliProgressBarSetPropertyP(void)
150 {
151   ToolkitTestApplication application;
152   tet_infoline( "UtcDaliProgressBarSetPropertyP" );
153
154   ProgressBar progressBar = ProgressBar::New();
155   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
156   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
157   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
158   progressBar.SetPosition( 0.0f, 0.0f );
159   progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
160   Stage::GetCurrent().Add(progressBar);
161   application.SendNotification();
162   application.Render();
163
164   Property::Map map;
165   map["visualType"] = "IMAGE";
166   map[Toolkit::ImageVisual::Property::URL] = trackImage;
167   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, map);
168
169   Property::Value value = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
170   Property::Map* resultMap = value.GetMap();
171   DALI_TEST_CHECK( resultMap );
172   Property::Value* urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
173   std::string urlString;
174   urlValue->Get( urlString );
175   DALI_TEST_CHECK( !urlString.empty() ) ;
176   DALI_TEST_EQUALS( urlString, trackImage, TEST_LOCATION );
177
178   Property::Map colorMap;
179   colorMap["visualType"] = "COLOR";
180   colorMap[Toolkit::ColorVisual::Property::MIX_COLOR] = Color::RED;
181   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, colorMap);
182
183   value = progressBar.GetProperty(ProgressBar::Property::TRACK_VISUAL);
184   resultMap = value.GetMap();
185   DALI_TEST_CHECK( resultMap );
186   Property::Value* colorValue = resultMap->Find( Toolkit::ColorVisual::Property::MIX_COLOR );
187   Vector4 color = Color::TRANSPARENT;
188   colorValue->Get( color );
189   DALI_TEST_CHECK( color != Color::TRANSPARENT );
190   DALI_TEST_EQUALS( color, Color::RED, TEST_LOCATION );
191
192   map[Toolkit::ImageVisual::Property::URL] = progressImage;
193   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, map);
194
195   value = progressBar.GetProperty(ProgressBar::Property::PROGRESS_VISUAL);
196   resultMap = value.GetMap();
197   DALI_TEST_CHECK( resultMap );
198   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
199   urlValue->Get( urlString );
200   DALI_TEST_CHECK( !urlString.empty() ) ;
201   DALI_TEST_EQUALS( urlString, progressImage, TEST_LOCATION );
202
203   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
204
205   value = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
206   resultMap = value.GetMap();
207   DALI_TEST_CHECK( resultMap );
208   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
209   urlValue->Get( urlString );
210   DALI_TEST_CHECK( !urlString.empty() ) ;
211   DALI_TEST_EQUALS( urlString, secondaryProgressImage, TEST_LOCATION );
212
213   map[Toolkit::ImageVisual::Property::URL] = secondaryProgressImage;
214   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, map);
215
216   value = progressBar.GetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL);
217   resultMap = value.GetMap();
218   DALI_TEST_CHECK( resultMap );
219   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
220   urlValue->Get( urlString );
221   DALI_TEST_CHECK( !urlString.empty() ) ;
222   DALI_TEST_EQUALS( urlString, secondaryProgressImage, TEST_LOCATION );
223
224   map[Toolkit::ImageVisual::Property::URL] = indeterminateImage;
225   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, map);
226
227   value = progressBar.GetProperty(ProgressBar::Property::INDETERMINATE_VISUAL);
228   resultMap = value.GetMap();
229   DALI_TEST_CHECK( resultMap );
230   urlValue = resultMap->Find( Toolkit::ImageVisual::Property::URL );
231   urlValue->Get( urlString );
232   DALI_TEST_CHECK( !urlString.empty() ) ;
233   DALI_TEST_EQUALS( urlString, indeterminateImage, TEST_LOCATION );
234
235   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test1");
236
237   value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
238   resultMap = value.GetMap();
239   DALI_TEST_CHECK( resultMap );
240   Property::Value* textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
241
242   std::string textString;
243   textValue->Get( textString );
244   DALI_TEST_CHECK( !textString.empty() );
245   DALI_TEST_EQUALS( textString, std::string( "test1" ), TEST_LOCATION );
246
247   Property::Map textVisualMap2;
248   textVisualMap2.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT );
249   textVisualMap2.Insert( Toolkit::TextVisual::Property::TEXT, "test2" );
250   textVisualMap2.Insert( Toolkit::TextVisual::Property::POINT_SIZE, 12.0f );
251   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, textVisualMap2);
252
253   value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
254   resultMap = value.GetMap();
255   DALI_TEST_CHECK( resultMap );
256   textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
257
258   textValue->Get( textString );
259   DALI_TEST_CHECK( !textString.empty() );
260   DALI_TEST_EQUALS( textString, std::string( "test2" ), TEST_LOCATION );
261
262   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test3");
263
264   value = progressBar.GetProperty(ProgressBar::Property::LABEL_VISUAL);
265   resultMap = value.GetMap();
266   DALI_TEST_CHECK( resultMap );
267   textValue = resultMap->Find(Toolkit::TextVisual::Property::TEXT);
268
269   std::string textString2;
270   textValue->Get( textString2 );
271   DALI_TEST_CHECK( !textString2.empty() );
272   DALI_TEST_EQUALS( textString2, std::string( "test3" ), TEST_LOCATION );
273
274   Property::Map transitionMap;
275   transitionMap["target"] = "indeterminateVisual";
276   transitionMap["property"] = "offset";
277   transitionMap["initialValue"] = Vector2( 0.0f, 0.0f );
278   transitionMap["targetValue"] = Vector2( 10.0f, 0.0f );
279   transitionMap["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
280                                              .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
281   Property::Array array;
282   array.PushBack( transitionMap );
283   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, array);
284
285   Property::Map transitionMap2;
286   transitionMap2["target"] = "indeterminateVisual";
287   transitionMap2["property"] = "offset";
288   transitionMap2["initialValue"] = Vector2( 0.0f, 0.0f );
289   transitionMap2["targetValue"] = Vector2( 15.0f, 0.0f );
290   transitionMap2["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
291                                              .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
292   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap2);
293   END_TEST;
294 }
295
296 int UtcDaliProgressBarSetPropertyP1(void)
297 {
298   ToolkitTestApplication application;
299   tet_infoline( "UtcDaliProgressBarSetPropertyP1" );
300
301   ProgressBar progressBar = ProgressBar::New();
302   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
303   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
304   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
305   progressBar.SetPosition( 0.0f, 0.0f );
306   progressBar.ValueChangedSignal().Connect( &OnProgressBarValueChanged );
307
308   Stage::GetCurrent().Add(progressBar);
309   application.SendNotification();
310   application.Render();
311
312   float val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
313   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
314
315   // test to download a file of 100k in chunks
316   float lowerBound = 0, upperBound = 100, progressValue = 0, secondaryProgressValue = 0, chunkValue = 0;
317
318   while( chunkValue <= upperBound )
319   {
320     progressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
321     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
322     val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
323     DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
324     chunkValue = chunkValue + 10;
325   }
326
327   // test to download a file of 1000k in chunks
328   lowerBound = 0, upperBound = 1000, progressValue = 0, chunkValue = 0;
329
330   while( chunkValue <= upperBound )
331   {
332     progressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
333     progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, progressValue);
334     val = progressBar.GetProperty<float>(ProgressBar::Property::PROGRESS_VALUE);
335     DALI_TEST_EQUALS(val, progressValue, TEST_LOCATION);
336     chunkValue = chunkValue + 100;
337   }
338
339   val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
340   DALI_TEST_EQUALS(val, 0.0f, TEST_LOCATION);
341
342   // test to download a file of 100k in chunks
343   lowerBound = 0, upperBound = 100, secondaryProgressValue = 0, chunkValue = 0;
344
345   while( chunkValue <= upperBound )
346   {
347     secondaryProgressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
348     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
349     val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
350     DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
351     chunkValue = chunkValue + 10;
352   }
353
354   // test to download a file of 1000k in chunks
355   lowerBound = 0, upperBound = 1000, secondaryProgressValue = 0, chunkValue = 0;
356
357   while( chunkValue <= upperBound )
358   {
359     secondaryProgressValue = (chunkValue - lowerBound ) / ( upperBound - lowerBound );
360     progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, secondaryProgressValue);
361     val = progressBar.GetProperty<float>(ProgressBar::Property::SECONDARY_PROGRESS_VALUE);
362     DALI_TEST_EQUALS(val, secondaryProgressValue, TEST_LOCATION);
363     chunkValue = chunkValue + 100;
364   }
365
366   END_TEST;
367 }
368
369 int UtcDaliProgressBarSetPropertyP2(void)
370 {
371   ToolkitTestApplication application;
372   tet_infoline( "UtcDaliProgressBarSetPropertyP2" );
373
374   ProgressBar progressBar = ProgressBar::New();
375   progressBar.SetParentOrigin(ParentOrigin::TOP_LEFT);
376   progressBar.SetAnchorPoint(ParentOrigin::TOP_LEFT);
377   progressBar.SetPosition( 0.0f, 0.0f );
378   progressBar.SetProperty(ProgressBar::Property::LABEL_VISUAL, "test");
379   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, true);
380   progressBar.SetProperty(ProgressBar::Property::TRACK_VISUAL, trackImage);
381   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VISUAL, progressImage);
382   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, secondaryProgressImage);
383   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL, indeterminateImage);
384
385   Property::Map transitionMap;
386   transitionMap["target"] = "indeterminateVisual";
387   transitionMap["property"] = "offset";
388   transitionMap["initialValue"] = Vector2( 0.0f, 0.0f );
389   transitionMap["targetValue"] = Vector2( 10.0f, 0.0f );
390   transitionMap["animator"] = Property::Map().Add("alphaFunction", "EASE_IN_OUT_BACK")
391                                              .Add("timePeriod", Property::Map().Add("delay", 0.5f).Add("duration", 1.0f));
392   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE_VISUAL_ANIMATION, transitionMap);
393   progressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.2f);
394   progressBar.SetProperty(ProgressBar::Property::SECONDARY_PROGRESS_VALUE, 0.3f);
395
396   progressBar.SetResizePolicy( ResizePolicy::FIXED, Dimension::ALL_DIMENSIONS );
397   progressBar.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
398   Stage::GetCurrent().Add(progressBar);
399   application.SendNotification();
400   application.Render();
401
402   // Test get/set INDETERMINATE
403   bool val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
404   DALI_TEST_EQUALS(val, true, TEST_LOCATION);
405
406   progressBar.SetProperty(ProgressBar::Property::INDETERMINATE, false);
407   val = progressBar.GetProperty<bool>(ProgressBar::Property::INDETERMINATE);
408   DALI_TEST_EQUALS(val, false, TEST_LOCATION);
409
410   END_TEST;
411 }