ImageVisual Action::Reload added
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Slider.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 <iostream>
19 #include <stdlib.h>
20 #include <dali-toolkit-test-suite-utils.h>
21 #include <dali-toolkit/dali-toolkit.h>
22 #include <dali/integration-api/events/touch-event-integ.h>
23 #include <dali/integration-api/events/pan-gesture-event.h>
24
25 using namespace Dali;
26 using namespace Dali::Toolkit;
27
28 void dali_slider_startup(void)
29 {
30   test_return_value = TET_UNDEF;
31 }
32
33 void dali_slider_cleanup(void)
34 {
35   test_return_value = TET_PASS;
36 }
37
38 namespace
39 {
40
41 static bool gObjectCreatedCallBackCalled;
42
43 static void TestCallback(BaseHandle handle)
44 {
45   gObjectCreatedCallBackCalled = true;
46 }
47
48 }
49
50 int UtcDaliSliderNew(void)
51 {
52   ToolkitTestApplication application;
53   tet_infoline(" UtcDaliSliderNew");
54
55   // Create the Slider actor
56   Slider slider;
57
58   DALI_TEST_CHECK( !slider );
59
60   slider = Slider::New();
61
62   DALI_TEST_CHECK( slider );
63
64   Slider slider2(slider);
65
66   DALI_TEST_CHECK( slider2 == slider );
67
68   //Additional check to ensure object is created by checking if it's registered
69   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
70   DALI_TEST_CHECK( registry );
71
72   gObjectCreatedCallBackCalled = false;
73   registry.ObjectCreatedSignal().Connect( &TestCallback );
74   {
75     Slider slider = Slider::New();
76   }
77   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
78   END_TEST;
79 }
80
81 int UtcDaliSliderDestructor(void)
82 {
83   ToolkitTestApplication application;
84
85   Slider* slider = new Slider();
86   delete slider;
87
88   DALI_TEST_CHECK( true );
89   END_TEST;
90 }
91
92 int UtcDaliSliderDownCast(void)
93 {
94   ToolkitTestApplication application;
95
96   Handle handle = Slider::New();
97
98   Slider slider = Slider::DownCast( handle );
99
100   DALI_TEST_CHECK( slider == handle );
101   END_TEST;
102 }
103
104 static bool gSliderValueChangedCallBackCalled=false;
105 static bool OnSliderValueChanged( Slider slider, float value )
106 {
107   gSliderValueChangedCallBackCalled = true;
108   return true;
109 }
110
111 static bool gSliderMarkCallBackCalled=false;
112 static bool OnSliderMark( Slider slider, int value )
113 {
114   gSliderMarkCallBackCalled = true;
115   return true;
116 }
117
118 static bool gSliderSlidingFinishedCallBackCalled=false;
119 static bool OnSlidingFinished( Slider slider, float value )
120 {
121   gSliderSlidingFinishedCallBackCalled = true;
122   return true;
123 }
124
125 int UtcDaliSliderSignals1(void)
126 {
127   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
128   tet_infoline(" UtcDaliSliderSignals1");
129
130   // Create the Popup actor
131   Slider slider = Slider::New();
132   Stage::GetCurrent().Add( slider );
133   slider.SetParentOrigin(ParentOrigin::TOP_LEFT);
134   slider.SetAnchorPoint(ParentOrigin::TOP_LEFT);
135   slider.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
136   slider.SetPosition( 0.0f, 0.0f );
137
138   const float MIN_BOUND = 0.0f;
139   const float MAX_BOUND = 1.0f;
140   const int NUM_MARKS = 5;
141   Property::Array marks;
142   for( int i = 0; i < NUM_MARKS; ++i )
143   {
144     marks.PushBack( MIN_BOUND + ( static_cast<float>(i) / ( NUM_MARKS - 1) ) * ( MAX_BOUND - MIN_BOUND ) );
145   }
146   slider.SetProperty( Slider::Property::MARKS, marks );
147   slider.SetProperty( Slider::Property::MARK_TOLERANCE, 0.1f );
148
149   slider.ValueChangedSignal().Connect( &OnSliderValueChanged );
150   slider.MarkReachedSignal().Connect( &OnSliderMark );
151   slider.SlidingFinishedSignal().Connect( &OnSlidingFinished );
152
153   application.SendNotification();
154   application.Render();
155
156   gSliderValueChangedCallBackCalled = false;
157   gSliderMarkCallBackCalled = false;
158   gSliderSlidingFinishedCallBackCalled = false;
159
160   {
161     Dali::Integration::TouchEvent event = Dali::Integration::TouchEvent();
162     Integration::Point pointDown;
163     pointDown.SetState( PointState::DOWN );
164     pointDown.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
165     event.AddPoint( pointDown );
166
167     application.ProcessEvent( event );
168     application.SendNotification();
169     application.Render();
170   }
171
172   for( int i = 0; i < 5; ++i )
173   {
174     Dali::Integration::TouchEvent event = Dali::Integration::TouchEvent();
175     Integration::Point pointMotion;
176     pointMotion.SetState( PointState::MOTION );
177     pointMotion.SetScreenPosition( Vector2( 10.0f + i * 10.0f, 10.0f ) );
178     event.AddPoint( pointMotion );
179
180     application.ProcessEvent( event );
181     application.SendNotification();
182     application.Render();
183   }
184
185   {
186     Dali::Integration::TouchEvent event = Dali::Integration::TouchEvent();
187     Integration::Point pointUp;
188     pointUp.SetState( PointState::UP );
189     pointUp.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
190     event.AddPoint( pointUp );
191
192     application.ProcessEvent( event );
193     application.SendNotification();
194     application.Render();
195   }
196
197   DALI_TEST_CHECK(gSliderValueChangedCallBackCalled);
198   DALI_TEST_CHECK(gSliderMarkCallBackCalled);
199   DALI_TEST_CHECK(gSliderSlidingFinishedCallBackCalled);
200   END_TEST;
201 }
202
203
204 namespace
205 {
206 bool gSliderSignal=false;
207 struct SliderSignalFunctor
208 {
209   SliderSignalFunctor()
210   {
211   }
212
213   void operator()()
214   {
215     gSliderSignal = true;
216   }
217 };
218 } // anonymous
219
220
221
222 int UtcDaliSliderSignals2(void)
223 {
224   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
225   tet_infoline(" UtcDaliSliderSignals1");
226
227   // Create the Popup actor
228   Slider slider = Slider::New();
229   Stage::GetCurrent().Add( slider );
230   slider.SetParentOrigin(ParentOrigin::TOP_LEFT);
231   slider.SetAnchorPoint(ParentOrigin::TOP_LEFT);
232   slider.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
233   slider.SetPosition( 0.0f, 0.0f );
234
235   const float MIN_BOUND = 0.0f;
236   const float MAX_BOUND = 1.0f;
237   const int NUM_MARKS = 5;
238   Property::Array marks;
239   for( int i = 0; i < NUM_MARKS; ++i )
240   {
241     marks.PushBack( MIN_BOUND + ( static_cast<float>(i) / ( NUM_MARKS - 1) ) * ( MAX_BOUND - MIN_BOUND ) );
242   }
243   slider.SetProperty( Slider::Property::MARKS, marks );
244   slider.SetProperty( Slider::Property::MARK_TOLERANCE, 0.1f );
245
246   gSliderSignal = false;
247   ConnectionTracker* testTracker = new ConnectionTracker();
248   slider.ConnectSignal( testTracker, "valueChanged",   SliderSignalFunctor() );
249
250   application.SendNotification();
251   application.Render();
252
253   gSliderValueChangedCallBackCalled = false;
254   gSliderMarkCallBackCalled = false;
255
256   Dali::Integration::TouchEvent event;
257
258   event = Dali::Integration::TouchEvent();
259
260   Integration::Point pointDown;
261   pointDown.SetState( PointState::DOWN );
262   pointDown.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
263   event.AddPoint( pointDown );
264
265   for( int i = 0; i < 5; ++i )
266   {
267     Integration::Point pointMotion;
268     pointMotion.SetState( PointState::MOTION );
269     pointMotion.SetScreenPosition( Vector2( 10.0f + i * 10.0f, 10.0f ) );
270     event.AddPoint( pointMotion );
271   }
272
273   Integration::Point pointUp;
274   pointUp.SetState( PointState::UP );
275   pointUp.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
276   event.AddPoint( pointUp );
277
278   application.ProcessEvent( event );
279
280   application.SendNotification();
281   application.Render();
282
283   DALI_TEST_CHECK(gSliderSignal);
284   END_TEST;
285 }
286
287 int UtcDaliSetPropertyP(void)
288 {
289   ToolkitTestApplication application;
290   tet_infoline( "UtcDaliSetPropertyP" );
291
292   Slider slider = Slider::New();
293   slider.SetParentOrigin(ParentOrigin::TOP_LEFT);
294   slider.SetAnchorPoint(ParentOrigin::TOP_LEFT);
295   slider.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
296   slider.SetPosition( 0.0f, 0.0f );
297
298   Stage::GetCurrent().Add(slider);
299   application.SendNotification();
300   application.Render();
301
302   slider.SetProperty(Slider::Property::LOWER_BOUND,        1.0f);
303   slider.SetProperty(Slider::Property::UPPER_BOUND,        5.0f);
304   slider.SetProperty(Slider::Property::VALUE,              3.0f);
305   slider.SetProperty(Slider::Property::DISABLED_COLOR,     Color::BLACK);
306   slider.SetProperty(Slider::Property::VALUE_PRECISION,    4);
307   slider.SetProperty(Slider::Property::SHOW_POPUP,         true);
308   slider.SetProperty(Slider::Property::SHOW_VALUE,         true);
309   slider.SetProperty(Slider::Property::MARKS,              false);
310   slider.SetProperty(Slider::Property::SNAP_TO_MARKS,      false);
311   slider.SetProperty(Slider::Property::MARK_TOLERANCE,     0.5f);
312
313   float lb = slider.GetProperty<float>(Slider::Property::LOWER_BOUND);
314   DALI_TEST_EQUALS(lb, 1.0f, TEST_LOCATION);
315   float ub = slider.GetProperty<float>(Slider::Property::UPPER_BOUND);
316   DALI_TEST_EQUALS(ub, 5.0f, TEST_LOCATION);
317   float val = slider.GetProperty<float>(Slider::Property::VALUE);
318   DALI_TEST_EQUALS(val, 3.0f, TEST_LOCATION);
319   Vector4 color = slider.GetProperty<Vector4>(Slider::Property::DISABLED_COLOR);
320   DALI_TEST_EQUALS( color, Color::BLACK, TEST_LOCATION );
321   int precision = slider.GetProperty<int>(Slider::Property::VALUE_PRECISION);
322   DALI_TEST_EQUALS( precision, 4, TEST_LOCATION);
323   bool showPopup = slider.GetProperty<bool>(Slider::Property::SHOW_POPUP);
324   DALI_TEST_EQUALS( showPopup, true , TEST_LOCATION);
325   bool showValue = slider.GetProperty<bool>(Slider::Property::SHOW_VALUE);
326   DALI_TEST_EQUALS( showValue, true, TEST_LOCATION );
327   bool marks = slider.GetProperty<bool>(Slider::Property::MARKS);
328   DALI_TEST_EQUALS( marks, false, TEST_LOCATION );
329   bool snapToMarks = slider.GetProperty<bool>(Slider::Property::SNAP_TO_MARKS);
330   DALI_TEST_EQUALS( snapToMarks, false, TEST_LOCATION );
331   float tolerance = slider.GetProperty<float>(Slider::Property::MARK_TOLERANCE);
332   DALI_TEST_EQUALS( tolerance, 0.5f, TEST_LOCATION );
333
334   {
335     Property::Map map;
336     map["visualType"] = "IMAGE";
337     map["size"] = Vector2(200, 200);
338     map["url"] = "track2.png";
339     slider.SetProperty(Slider::Property::TRACK_VISUAL,       map);
340     map["url"] = "handle2.png";
341     slider.SetProperty(Slider::Property::HANDLE_VISUAL,      map);
342     map["url"] = "progress2.png";
343     slider.SetProperty(Slider::Property::PROGRESS_VISUAL,    map);
344     map["url"] = "popup2.png";
345     slider.SetProperty(Slider::Property::POPUP_VISUAL,       map);
346     map["url"] = "popupArrow2.png";
347     slider.SetProperty(Slider::Property::POPUP_ARROW_VISUAL, map);
348
349     Property::Value value = slider.GetProperty(Slider::Property::TRACK_VISUAL);
350     Property::Map* resultMap = value.GetMap();
351     DALI_TEST_CHECK( resultMap );
352     Property::Value* url = resultMap->Find("url");
353     DALI_TEST_CHECK( url ) ;
354     DALI_TEST_EQUALS( *url, "track2.png", TEST_LOCATION );
355
356     value = slider.GetProperty(Slider::Property::HANDLE_VISUAL);
357     resultMap = value.GetMap();
358     DALI_TEST_CHECK( resultMap );
359     url = resultMap->Find("url");
360     DALI_TEST_CHECK( url ) ;
361     DALI_TEST_EQUALS( *url, "handle2.png", TEST_LOCATION );
362
363     value = slider.GetProperty(Slider::Property::PROGRESS_VISUAL);
364     resultMap = value.GetMap();
365     DALI_TEST_CHECK( resultMap );
366     url = resultMap->Find("url");
367     DALI_TEST_CHECK( url ) ;
368     DALI_TEST_EQUALS( *url, "progress2.png", TEST_LOCATION );
369
370     value = slider.GetProperty(Slider::Property::POPUP_VISUAL);
371     resultMap = value.GetMap();
372     DALI_TEST_CHECK( resultMap );
373     url = resultMap->Find("url");
374     DALI_TEST_CHECK( url ) ;
375     DALI_TEST_EQUALS( *url, "popup2.png", TEST_LOCATION );
376
377     value = slider.GetProperty(Slider::Property::POPUP_ARROW_VISUAL);
378     resultMap = value.GetMap();
379     DALI_TEST_CHECK( resultMap );
380     url = resultMap->Find("url");
381     DALI_TEST_CHECK( url ) ;
382     DALI_TEST_EQUALS( *url, "popupArrow2.png", TEST_LOCATION );
383   }
384
385   END_TEST;
386 }
387
388
389 // DestroyHandleVisualDisplay
390 // CreateValueDisplay
391 // SlidingFinishedSignal()
392 // UpdateSkin disabled
393 // AddPopup
394 // RemovePopup
395 // SnapToMark
396 // HideValueView
397 // GetDisabledColor
398 // GetShowPopup
399 // GetShowVisual
400 // DisplayPopup (with set valueText label)