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