Add Wayland support.
[platform/core/uifw/dali-toolkit.git] / automated-tests / TET / dali-test-suite / slider / 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
20 #include <stdlib.h>
21 #include <tet_api.h>
22
23 #include <dali/public-api/dali-core.h>
24 #include <dali-toolkit/dali-toolkit.h>
25 #include <dali/integration-api/events/touch-event-integ.h>
26 #include <dali-toolkit/public-api/controls/slider/slider.h>
27
28 #include <dali-toolkit-test-suite-utils.h>
29
30 using namespace Dali;
31 using namespace Dali::Toolkit;
32
33 static void Startup();
34 static void Cleanup();
35
36 extern "C" {
37   void (*tet_startup)() = Startup;
38   void (*tet_cleanup)() = Cleanup;
39 }
40
41 static void UtcDaliSliderNew();
42 static void UtcDaliSliderDestructor();
43 static void UtcDaliSliderDownCast();
44 static void UtcDaliSliderSignals();
45
46 enum {
47   POSITIVE_TC_IDX = 0x01,
48   NEGATIVE_TC_IDX,
49 };
50
51 // Add test functionality for all APIs in the class (Positive and Negative)
52 extern "C" {
53   struct tet_testlist tet_testlist[] = {
54     { UtcDaliSliderNew, POSITIVE_TC_IDX },
55     { UtcDaliSliderDestructor, POSITIVE_TC_IDX },
56     { UtcDaliSliderDownCast, POSITIVE_TC_IDX },
57     { UtcDaliSliderSignals, POSITIVE_TC_IDX },
58     { NULL, 0 }
59   };
60 }
61
62 // Called only once before first test is run.
63 static void Startup()
64 {
65 }
66
67 // Called only once after last test is run
68 static void Cleanup()
69 {
70 }
71
72 static bool gObjectCreatedCallBackCalled;
73
74 static void TestCallback(BaseHandle handle)
75 {
76   gObjectCreatedCallBackCalled = true;
77 }
78
79 static void UtcDaliSliderNew()
80 {
81   ToolkitTestApplication application;
82   tet_infoline(" UtcDaliSliderNew");
83
84   // Create the Slider actor
85   Slider slider;
86
87   DALI_TEST_CHECK( !slider );
88
89   slider = Slider::New();
90
91   DALI_TEST_CHECK( slider );
92
93   Slider slider2(slider);
94
95   DALI_TEST_CHECK( slider2 == slider );
96
97   //Additional check to ensure object is created by checking if it's registered
98   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
99   DALI_TEST_CHECK( registry );
100
101   gObjectCreatedCallBackCalled = false;
102   registry.ObjectCreatedSignal().Connect( &TestCallback );
103   {
104     Slider slider = Slider::New();
105   }
106   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
107 }
108
109 static void UtcDaliSliderDestructor()
110 {
111   ToolkitTestApplication application;
112
113   Slider* slider = new Slider();
114   delete slider;
115
116   DALI_TEST_CHECK( true );
117 }
118
119 static void UtcDaliSliderDownCast()
120 {
121   ToolkitTestApplication application;
122
123   Handle handle = Slider::New();
124
125   Slider slider = Slider::DownCast( handle );
126
127   DALI_TEST_CHECK( slider == handle );
128 }
129
130 static bool gSliderValueChangedCallBackCalled;
131 static bool OnSliderValueChanged( Slider slider, float value )
132 {
133   gSliderValueChangedCallBackCalled = true;
134   return true;
135 }
136
137 static bool gSliderMarkCallBackCalled;
138 static bool OnSliderMark( Slider slider, int value )
139 {
140   gSliderMarkCallBackCalled = true;
141   return true;
142 }
143
144 static void UtcDaliSliderSignals()
145 {
146   ToolkitTestApplication application;  // Exceptions require ToolkitTestApplication
147   tet_infoline(" UtcDaliSliderSignals");
148
149   // Create the Popup actor
150   Slider slider = Slider::New();
151   Stage::GetCurrent().Add( slider );
152   slider.SetParentOrigin(ParentOrigin::TOP_LEFT);
153   slider.SetAnchorPoint(ParentOrigin::TOP_LEFT);
154   slider.SetSize( Stage::GetCurrent().GetSize().x, 20.0f );
155   slider.SetPosition( 0.0f, 0.0f );
156
157   const float MIN_BOUND = 0.0f;
158   const float MAX_BOUND = 1.0f;
159   const int NUM_MARKS = 5;
160   Property::Array marks;
161   for( int i = 0; i < NUM_MARKS; ++i )
162   {
163     marks.push_back( MIN_BOUND + ( static_cast<float>(i) / ( NUM_MARKS - 1) ) * ( MAX_BOUND - MIN_BOUND ) );
164   }
165   slider.SetProperty( Slider::MARKS_PROPERTY, marks );
166   slider.SetProperty( Slider::MARK_TOLERANCE_PROPERTY, 0.1f );
167
168   slider.ValueChangedSignal().Connect( &OnSliderValueChanged );
169   slider.MarkSignal().Connect( &OnSliderMark );
170
171   application.SendNotification();
172   application.Render();
173
174   gSliderValueChangedCallBackCalled = false;
175   gSliderMarkCallBackCalled = false;
176
177   Dali::Integration::TouchEvent event;
178
179   event = Dali::Integration::TouchEvent();
180
181   const Dali::TouchPoint pointDown( 0, TouchPoint::Down, 10.0f, 10.0f );
182   event.AddPoint( pointDown );
183
184   for( int i = 0; i < 5; ++i )
185   {
186     const Dali::TouchPoint pointDown( 0, TouchPoint::Motion, 10.0f + i * 10.0f, 10.0f );
187     event.AddPoint( pointDown );
188   }
189
190   const Dali::TouchPoint pointUp( 0, TouchPoint::Up, 50.0f, 10.0f );
191   event.AddPoint( pointUp );
192
193   application.ProcessEvent( event );
194
195   application.SendNotification();
196   application.Render();
197
198   DALI_TEST_CHECK(gSliderValueChangedCallBackCalled);
199   DALI_TEST_CHECK(gSliderMarkCallBackCalled);
200 }