Merge "[3.0] Tizen Directory Migration" into tizen
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Slider.cpp
1 /*
2  * Copyright (c) 2014 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(" UtcDaliSliderSignals");
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 namespace
203 {
204 bool gSliderSignal=false;
205 struct SliderSignalFunctor
206 {
207   SliderSignalFunctor()
208   {
209   }
210
211   void operator()()
212   {
213     gSliderSignal = true;
214   }
215 };
216 } // anonymous
217
218
219
220 int UtcDaliSliderSignals2(void)
221 {
222   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
223   tet_infoline(" UtcDaliSliderSignals1");
224
225   // Create the Popup actor
226   Slider slider = Slider::New();
227   Stage::GetCurrent().Add( slider );
228   slider.SetParentOrigin(ParentOrigin::TOP_LEFT);
229   slider.SetAnchorPoint(ParentOrigin::TOP_LEFT);
230   slider.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
231   slider.SetPosition( 0.0f, 0.0f );
232
233   const float MIN_BOUND = 0.0f;
234   const float MAX_BOUND = 1.0f;
235   const int NUM_MARKS = 5;
236   Property::Array marks;
237   for( int i = 0; i < NUM_MARKS; ++i )
238   {
239     marks.PushBack( MIN_BOUND + ( static_cast<float>(i) / ( NUM_MARKS - 1) ) * ( MAX_BOUND - MIN_BOUND ) );
240   }
241   slider.SetProperty( Slider::Property::MARKS, marks );
242   slider.SetProperty( Slider::Property::MARK_TOLERANCE, 0.1f );
243
244   gSliderSignal = false;
245   ConnectionTracker* testTracker = new ConnectionTracker();
246   slider.ConnectSignal( testTracker, "valueChanged",   SliderSignalFunctor() );
247
248   application.SendNotification();
249   application.Render();
250
251   gSliderValueChangedCallBackCalled = false;
252   gSliderMarkCallBackCalled = false;
253
254   Dali::Integration::TouchEvent event;
255
256   event = Dali::Integration::TouchEvent();
257
258   Integration::Point pointDown;
259   pointDown.SetState( PointState::DOWN );
260   pointDown.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
261   event.AddPoint( pointDown );
262
263   for( int i = 0; i < 5; ++i )
264   {
265     Integration::Point pointMotion;
266     pointMotion.SetState( PointState::MOTION );
267     pointMotion.SetScreenPosition( Vector2( 10.0f + i * 10.0f, 10.0f ) );
268     event.AddPoint( pointMotion );
269   }
270
271   Integration::Point pointUp;
272   pointUp.SetState( PointState::UP );
273   pointUp.SetScreenPosition( Vector2( 10.0f, 10.0f ) );
274   event.AddPoint( pointUp );
275
276   application.ProcessEvent( event );
277
278   application.SendNotification();
279   application.Render();
280
281   DALI_TEST_CHECK(gSliderSignal);
282   END_TEST;
283 }
284
285 int UtcDaliSetPropertyP(void)
286 {
287   ToolkitTestApplication application;
288   tet_infoline( "UtcDaliSetPropertyP" );
289
290   Slider slider = Slider::New();
291   slider.SetParentOrigin(ParentOrigin::TOP_LEFT);
292   slider.SetAnchorPoint(ParentOrigin::TOP_LEFT);
293   slider.SetSize( Vector2( Stage::GetCurrent().GetSize().x, 20.0f ) );
294   slider.SetPosition( 0.0f, 0.0f );
295
296   Stage::GetCurrent().Add(slider);
297   application.SendNotification();
298   application.Render();
299
300   slider.SetProperty(Slider::Property::LOWER_BOUND,        1.0f);
301   slider.SetProperty(Slider::Property::UPPER_BOUND,        5.0f);
302   slider.SetProperty(Slider::Property::VALUE,              3.0f);
303   slider.SetProperty(Slider::Property::DISABLED_COLOR,     Color::BLACK);
304   slider.SetProperty(Slider::Property::VALUE_PRECISION,    4);
305   slider.SetProperty(Slider::Property::SHOW_POPUP,         true);
306   slider.SetProperty(Slider::Property::SHOW_VALUE,         true);
307   slider.SetProperty(Slider::Property::MARKS,              false);
308   slider.SetProperty(Slider::Property::SNAP_TO_MARKS,      false);
309   slider.SetProperty(Slider::Property::MARK_TOLERANCE,     0.5f);
310
311   float lb = slider.GetProperty<float>(Slider::Property::LOWER_BOUND);
312   DALI_TEST_EQUALS(lb, 1.0f, TEST_LOCATION);
313   float ub = slider.GetProperty<float>(Slider::Property::UPPER_BOUND);
314   DALI_TEST_EQUALS(ub, 5.0f, TEST_LOCATION);
315   float val = slider.GetProperty<float>(Slider::Property::VALUE);
316   DALI_TEST_EQUALS(val, 3.0f, TEST_LOCATION);
317   Vector4 color = slider.GetProperty<Vector4>(Slider::Property::DISABLED_COLOR);
318   DALI_TEST_EQUALS( color, Color::BLACK, TEST_LOCATION );
319   int precision = slider.GetProperty<int>(Slider::Property::VALUE_PRECISION);
320   DALI_TEST_EQUALS( precision, 4, TEST_LOCATION);
321   bool showPopup = slider.GetProperty<bool>(Slider::Property::SHOW_POPUP);
322   DALI_TEST_EQUALS( showPopup, true , TEST_LOCATION);
323   bool showValue = slider.GetProperty<bool>(Slider::Property::SHOW_VALUE);
324   DALI_TEST_EQUALS( showValue, true, TEST_LOCATION );
325   bool marks = slider.GetProperty<bool>(Slider::Property::MARKS);
326   DALI_TEST_EQUALS( marks, false, TEST_LOCATION );
327   bool snapToMarks = slider.GetProperty<bool>(Slider::Property::SNAP_TO_MARKS);
328   DALI_TEST_EQUALS( snapToMarks, false, TEST_LOCATION );
329   float tolerance = slider.GetProperty<float>(Slider::Property::MARK_TOLERANCE);
330   DALI_TEST_EQUALS( tolerance, 0.5f, TEST_LOCATION );
331
332   {
333     Property::Map map;
334     map["rendererType"] = "image";
335     map["size"] = Vector2(200, 200);
336     map["url"] = "track2.png";
337     slider.SetProperty(Slider::Property::TRACK_VISUAL,       map);
338     map["url"] = "handle2.png";
339     slider.SetProperty(Slider::Property::HANDLE_VISUAL,      map);
340     map["url"] = "progress2.png";
341     slider.SetProperty(Slider::Property::PROGRESS_VISUAL,    map);
342     map["url"] = "popup2.png";
343     slider.SetProperty(Slider::Property::POPUP_VISUAL,       map);
344     map["url"] = "popupArrow2.png";
345     slider.SetProperty(Slider::Property::POPUP_ARROW_VISUAL, map);
346
347     Property::Value value = slider.GetProperty(Slider::Property::TRACK_VISUAL);
348     Property::Map* resultMap = value.GetMap();
349     DALI_TEST_CHECK( resultMap );
350     Property::Value* url = resultMap->Find("url");
351     DALI_TEST_CHECK( url ) ;
352     DALI_TEST_EQUALS( *url, "track2.png", TEST_LOCATION );
353
354     value = slider.GetProperty(Slider::Property::HANDLE_VISUAL);
355     resultMap = value.GetMap();
356     DALI_TEST_CHECK( resultMap );
357     url = resultMap->Find("url");
358     DALI_TEST_CHECK( url ) ;
359     DALI_TEST_EQUALS( *url, "handle2.png", TEST_LOCATION );
360
361     value = slider.GetProperty(Slider::Property::PROGRESS_VISUAL);
362     resultMap = value.GetMap();
363     DALI_TEST_CHECK( resultMap );
364     url = resultMap->Find("url");
365     DALI_TEST_CHECK( url ) ;
366     DALI_TEST_EQUALS( *url, "progress2.png", TEST_LOCATION );
367
368     value = slider.GetProperty(Slider::Property::POPUP_VISUAL);
369     resultMap = value.GetMap();
370     DALI_TEST_CHECK( resultMap );
371     url = resultMap->Find("url");
372     DALI_TEST_CHECK( url ) ;
373     DALI_TEST_EQUALS( *url, "popup2.png", TEST_LOCATION );
374
375     value = slider.GetProperty(Slider::Property::POPUP_ARROW_VISUAL);
376     resultMap = value.GetMap();
377     DALI_TEST_CHECK( resultMap );
378     url = resultMap->Find("url");
379     DALI_TEST_CHECK( url ) ;
380     DALI_TEST_EQUALS( *url, "popupArrow2.png", TEST_LOCATION );
381   }
382
383   END_TEST;
384 }