0bde0b05a35e94a2244192b2b7d2b4227528f9f8
[platform/core/uifw/dali-toolkit.git] / automated-tests / TET / dali-test-suite / selectors / utc-Dali-RotatingSelector.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/integration-api/events/touch-event-integ.h>
25 #include <dali-toolkit-test-suite-utils.h>
26
27 #include <dali-toolkit/public-api/controls/selectors/rotating-selector.h>
28
29 using namespace Dali;
30 using namespace Toolkit;
31
32 static void Startup();
33 static void Cleanup();
34
35 namespace
36 {
37 static bool gObjectCreatedCallBackCalled;
38
39 static void TestCallback(BaseHandle handle)
40 {
41   gObjectCreatedCallBackCalled = true;
42 }
43 } // namespace
44
45 extern "C" {
46   void (*tet_startup)() = Startup;
47   void (*tet_cleanup)() = Cleanup;
48 }
49
50 static void UtcDaliRotatingSelectorNew();
51 static void UtcDaliRotatingSelectorSetSelected();
52 static void UtcDaliRotatingSelectorSetSelectedAndUnSelectedActor();
53 static void UtcDaliRotatingSelectorSetSelectable();
54 static void UtcDaliRotatingSelectorSignalSelected();
55
56 static bool gSelectedSignalReceived = false;
57 static bool gSelected = false;
58
59 const Dali::TouchPoint pointDownInside( 0, TouchPoint::Down, 240, 400 );
60 const Dali::TouchPoint pointUpInside( 0, TouchPoint::Up, 240, 400 );
61
62 enum {
63   POSITIVE_TC_IDX = 0x01,
64   NEGATIVE_TC_IDX,
65 };
66
67 // Add test functionality for all APIs in the class (Positive and Negative)
68 extern "C" {
69   struct tet_testlist tet_testlist[] = {
70     { UtcDaliRotatingSelectorNew, POSITIVE_TC_IDX },
71     { UtcDaliRotatingSelectorSetSelected, POSITIVE_TC_IDX },
72     { UtcDaliRotatingSelectorSetSelectedAndUnSelectedActor, POSITIVE_TC_IDX },
73     { UtcDaliRotatingSelectorSetSelectable, POSITIVE_TC_IDX },
74     { UtcDaliRotatingSelectorSignalSelected, POSITIVE_TC_IDX },
75     { NULL, 0 }
76   };
77 }
78
79 // Called only once before first test is run.
80 static void Startup()
81 {
82 }
83
84 // Called only once after last test is run
85 static void Cleanup()
86 {
87 }
88
89
90 static void UtcDaliRotatingSelectorNew()
91 {
92   ToolkitTestApplication application;
93
94   tet_infoline("UtcDaliRotatingSelectorNew");
95   RotatingSelector selector;
96
97   DALI_TEST_CHECK(!selector);
98
99   Actor unSelectedActor = Actor::New();
100   Actor selectedActor = Actor::New();
101
102   selector = RotatingSelector::New(unSelectedActor, selectedActor);
103
104   DALI_TEST_CHECK(selector);
105
106   //Additional check to ensure object is created by checking if it's registered
107   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
108   DALI_TEST_CHECK( registry );
109
110   gObjectCreatedCallBackCalled = false;
111   registry.ObjectCreatedSignal().Connect(&TestCallback);
112   {
113     RotatingSelector selector = RotatingSelector::New(unSelectedActor, selectedActor);
114   }
115   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
116 }
117
118 // Callback test function
119 void OnSelectedSignal(RotatingSelector actor, bool selected)
120 {
121   gSelectedSignalReceived = true;
122   gSelected = selected;
123 }
124
125 static void UtcDaliRotatingSelectorSetSelected()
126 {
127   ToolkitTestApplication application;
128
129   tet_infoline("UtcDaliRotatingSelectorSetSelected");
130
131   BitmapImage img = BitmapImage::New( 1,1 );
132   ImageActor unSelectedActor = ImageActor::New( img );
133   ImageActor selectedActor = ImageActor::New( img );
134
135   RotatingSelector selector = RotatingSelector::New(unSelectedActor, selectedActor);
136
137   selector.SetAnchorPoint( AnchorPoint::TOP_LEFT );
138   selector.SetParentOrigin( ParentOrigin::TOP_LEFT );
139   selector.SetPosition( 240, 400 );
140   selector.SetSize( 100, 100 );
141
142   // connect to its selected signal
143   selector.SelectedSignal().Connect( &OnSelectedSignal );
144
145   Stage::GetCurrent().Add( selector );
146
147   gSelectedSignalReceived = false;
148   gSelected = false;
149
150   selector.SetSelected(true);
151   application.SendNotification();
152   application.Render(1000);
153   application.SendNotification();
154   application.Render(1000);
155   application.SendNotification();
156   application.Render(1000);
157
158   DALI_TEST_CHECK( selector.IsSelected() );
159   DALI_TEST_CHECK( gSelectedSignalReceived );
160   DALI_TEST_CHECK( gSelected );
161
162   gSelectedSignalReceived = false;
163   gSelected = false;
164
165   selector.SetSelected(false);
166   application.SendNotification();
167   application.Render(1000);
168   application.SendNotification();
169   application.Render(1000);
170   application.SendNotification();
171   application.Render(1000);
172
173   DALI_TEST_CHECK( gSelectedSignalReceived );
174   DALI_TEST_CHECK( !gSelected );
175   DALI_TEST_CHECK( !selector.IsSelected() );
176 }
177
178 static void UtcDaliRotatingSelectorSetSelectedAndUnSelectedActor()
179 {
180   ToolkitTestApplication application;
181
182   tet_infoline("UtcDaliRotatingSelectorSetSelectedAndUnSelectedActor");
183
184   BitmapImage img = BitmapImage::New( 1,1 );
185   ImageActor actor1 = ImageActor::New( img );
186   ImageActor actor2 = ImageActor::New( img );
187
188   RotatingSelector selector = RotatingSelector::New(actor1, actor2);
189   Stage::GetCurrent().Add( selector );
190
191   ImageActor unSelectedActor = ImageActor::New( img );
192   ImageActor selectedActor = ImageActor::New( img );
193
194   selector.SetSelectedActor(selectedActor);
195
196   Actor actor3 = selector.GetSelectedActor();
197   DALI_TEST_CHECK( selectedActor == actor3 );
198
199   selector.SetUnSelectedActor(unSelectedActor);
200
201   Actor actor4 = selector.GetUnSelectedActor();
202   DALI_TEST_CHECK( unSelectedActor == actor4 );
203
204 }
205
206
207 static void UtcDaliRotatingSelectorSetSelectable()
208 {
209   ToolkitTestApplication application;
210
211   tet_infoline("UtcDaliRotatingSelectorSetSelectable");
212
213   BitmapImage img = BitmapImage::New( 1,1 );
214   ImageActor unSelectedActor = ImageActor::New( img );
215   ImageActor selectedActor = ImageActor::New( img );
216
217   RotatingSelector selector = RotatingSelector::New(unSelectedActor, selectedActor);
218
219   selector.SetSelectable(true);
220   DALI_TEST_CHECK( selector.IsSelectable() );
221
222   selector.SetSelectable(false);
223   DALI_TEST_CHECK( !selector.IsSelectable() );
224 }
225
226 static void UtcDaliRotatingSelectorSignalSelected()
227 {
228   ToolkitTestApplication application;
229
230   tet_infoline("UtcDaliRotatingSelectorSignalSelected");
231
232   BitmapImage img = BitmapImage::New( 1,1 );
233   ImageActor unSelectedActor = ImageActor::New( img );
234   ImageActor selectedActor = ImageActor::New( img );
235
236   RotatingSelector selector = RotatingSelector::New(unSelectedActor, selectedActor);
237
238   selector.SetAnchorPoint( AnchorPoint::TOP_LEFT );
239   selector.SetParentOrigin( ParentOrigin::TOP_LEFT );
240   selector.SetPosition( 240, 400 );
241   selector.SetSize( 100, 100 );
242
243   // connect to its selected signal
244   selector.SelectedSignal().Connect( &OnSelectedSignal );
245
246   Stage::GetCurrent().Add( selector );
247
248   DALI_TEST_CHECK( !selector.IsSelected() );
249
250   gSelectedSignalReceived = false;
251   gSelected = false;
252
253   application.SendNotification();
254   application.Render(1000);
255   application.SendNotification();
256   application.Render(1000);
257
258   //Test using touch event simulation
259   Dali::Integration::TouchEvent event;
260
261   event = Dali::Integration::TouchEvent();
262   event.AddPoint( pointDownInside );
263   application.ProcessEvent( event );
264
265   event = Dali::Integration::TouchEvent();
266   event.AddPoint( pointUpInside );
267   application.ProcessEvent( event );
268
269   application.SendNotification();
270   application.Render(1000);
271   application.SendNotification();
272   application.Render(1000);
273
274   DALI_TEST_CHECK( selector.IsSelected() );
275   DALI_TEST_CHECK( gSelectedSignalReceived );
276   DALI_TEST_CHECK( gSelected );
277
278 }