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