[SRUK] Initial copy from Tizen 2.2 version
[platform/core/uifw/dali-toolkit.git] / automated-tests / dali-test-suite / buttons / utc-Dali-Button.cpp
1 //
2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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 #include <iostream>
18
19 #include <stdlib.h>
20 #include <tet_api.h>
21
22 #include <dali/public-api/dali-core.h>
23 #include <dali/integration-api/events/touch-event-integ.h>
24 #include <dali-toolkit/public-api/controls/buttons/check-box-button.h>
25 #include <dali-toolkit/public-api/controls/buttons/push-button.h>
26 #include <dali-toolkit/public-api/controls/default-controls/solid-color-actor.h>
27
28 #include <dali-toolkit-test-suite-utils.h>
29
30 using namespace Dali;
31 using namespace Toolkit;
32
33 namespace
34 {
35 static bool gButtonClicked = false;
36
37 static bool ButtonClicked( Button button )
38 {
39   gButtonClicked = true;
40   return false;
41 }
42
43 const Dali::TouchPoint pointDownInside( 0, TouchPoint::Down, 240, 400 );
44 const Dali::TouchPoint pointUpInside( 0, TouchPoint::Up, 240, 400 );
45 const Dali::TouchPoint pointLeave( 0, TouchPoint::Leave, 240, 400 );
46 const Dali::TouchPoint pointEnter( 0, TouchPoint::Motion, 240, 400 );
47 const Dali::TouchPoint pointDownOutside( 0, TouchPoint::Down, 10, 10 );
48 const Dali::TouchPoint pointUpOutside( 0, TouchPoint::Up, 10, 10 );
49
50 static bool gObjectCreatedCallBackCalled;
51
52 static void TestObjectCreatedCallback(BaseHandle handle)
53 {
54   gObjectCreatedCallBackCalled = true;
55 }
56
57 static float ANIMATION_TIME( 0.5f );
58 } // namespace
59
60 static void Startup();
61 static void Cleanup();
62
63 extern "C" {
64   void (*tet_startup)() = Startup;
65   void (*tet_cleanup)() = Cleanup;
66 }
67
68 static void UtcDaliButtonNew();
69 static void UtcDaliButtonSetProperty();
70 static void UtcDaliButtonSetGetDimmed();
71 static void UtcDaliButtonSize();
72 static void UtcDaliButtonClicked();
73 static void UtcDaliButtonConnectSignal();
74 static void UtcDaliButtonSetGetAnimationTime();
75
76 enum {
77   POSITIVE_TC_IDX = 0x01,
78   NEGATIVE_TC_IDX,
79 };
80
81 // Add test functionality for all APIs in the class (Positive and Negative)
82 extern "C" {
83   struct tet_testlist tet_testlist[] = {
84     { UtcDaliButtonNew, POSITIVE_TC_IDX },
85     { UtcDaliButtonSetProperty, POSITIVE_TC_IDX },
86     { UtcDaliButtonSetGetDimmed, POSITIVE_TC_IDX },
87     { UtcDaliButtonSize, POSITIVE_TC_IDX },
88     { UtcDaliButtonClicked, POSITIVE_TC_IDX },
89     { UtcDaliButtonConnectSignal, POSITIVE_TC_IDX },
90     { UtcDaliButtonSetGetAnimationTime, POSITIVE_TC_IDX },
91     { NULL, 0 }
92   };
93 }
94
95 // Called only once before first test is run.
96 static void Startup()
97 {
98 }
99
100 // Called only once after last test is run
101 static void Cleanup()
102 {
103 }
104
105
106 // Positive test case for a method
107 static void UtcDaliButtonNew()
108 {
109   ToolkitTestApplication application;
110   tet_infoline(" UtcDaliButtonNew");
111
112   CheckBoxButton checkBoxButton = CheckBoxButton::New();
113
114   DALI_TEST_CHECK( checkBoxButton );
115
116   PushButton pushButton = PushButton::New();
117
118   DALI_TEST_CHECK( pushButton );
119
120   CheckBoxButton checkBoxButton2( checkBoxButton );
121
122   DALI_TEST_CHECK( checkBoxButton2 );
123
124   PushButton pushButton2( pushButton );
125
126   DALI_TEST_CHECK( pushButton2 );
127
128   checkBoxButton2 = NULL;
129   pushButton2 = NULL;
130
131
132   //Additional check to ensure object is created by checking if it's registered
133   ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
134   DALI_TEST_CHECK( registry );
135
136   gObjectCreatedCallBackCalled = false;
137   registry.ObjectCreatedSignal().Connect( &TestObjectCreatedCallback );
138   {
139     CheckBoxButton checkBoxButton = CheckBoxButton::New();
140   }
141   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
142
143   gObjectCreatedCallBackCalled = false;
144   registry.ObjectCreatedSignal().Connect( &TestObjectCreatedCallback );
145   {
146     PushButton pushButton = PushButton::New();
147   }
148   DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
149
150   // Test down cast
151   Handle handleButton;
152   handleButton = pushButton;
153   Button downCastPushButton = Button::DownCast( handleButton );
154   DALI_TEST_CHECK( downCastPushButton );
155   PushButton downCastPushButton2 = PushButton::DownCast( handleButton );
156   DALI_TEST_CHECK( downCastPushButton2 );
157
158   handleButton = checkBoxButton;
159   Button downCastCheckBoxButton = Button::DownCast( handleButton );
160   DALI_TEST_CHECK( downCastCheckBoxButton );
161   CheckBoxButton downCastCheckBoxButton2 = CheckBoxButton::DownCast( handleButton );
162   DALI_TEST_CHECK( downCastCheckBoxButton2 );
163 }
164
165 static void UtcDaliButtonSetProperty()
166 {
167   tet_infoline("UtcDaliButtonSetProperty: ");
168   ToolkitTestApplication application;
169
170   CheckBoxButton checkBoxButton = CheckBoxButton::New();
171   PushButton pushButton = PushButton::New();
172
173   //Test various properties
174   checkBoxButton.SetProperty(checkBoxButton.GetPropertyIndex(Button::PROPERTY_DIMMED), false);
175   DALI_TEST_CHECK( false == checkBoxButton.IsDimmed() );
176   checkBoxButton.SetProperty(checkBoxButton.GetPropertyIndex(Button::PROPERTY_DIMMED), true);
177   DALI_TEST_CHECK( true == checkBoxButton.IsDimmed() );
178
179   pushButton.SetProperty(pushButton.GetPropertyIndex(Button::PROPERTY_DIMMED), false);
180   DALI_TEST_CHECK( false == pushButton.IsDimmed() );
181   pushButton.SetProperty(pushButton.GetPropertyIndex(Button::PROPERTY_DIMMED), true);
182   DALI_TEST_CHECK( true == pushButton.IsDimmed() );
183 }
184
185 static void UtcDaliButtonSetGetDimmed()
186 {
187   ToolkitTestApplication application;
188   tet_infoline(" UtcDaliButtonSetGetDimmed");
189
190   CheckBoxButton checkBoxButton = CheckBoxButton::New();
191   PushButton pushButton = PushButton::New();
192
193   checkBoxButton.SetDimmed( true );
194   pushButton.SetDimmed( true );
195
196   DALI_TEST_CHECK( checkBoxButton.IsDimmed() );
197   DALI_TEST_CHECK( pushButton.IsDimmed() );
198
199   checkBoxButton.SetDimmed( false );
200   pushButton.SetDimmed( false );
201
202   DALI_TEST_CHECK( !checkBoxButton.IsDimmed() );
203   DALI_TEST_CHECK( !pushButton.IsDimmed() );
204
205   checkBoxButton.SetDimmed( true );
206   pushButton.SetDimmed( true );
207
208   DALI_TEST_CHECK( checkBoxButton.IsDimmed() );
209   DALI_TEST_CHECK( pushButton.IsDimmed() );
210
211   checkBoxButton.SetDimmed( false );
212   pushButton.SetDimmed( false );
213
214   DALI_TEST_CHECK( !checkBoxButton.IsDimmed() );
215   DALI_TEST_CHECK( !pushButton.IsDimmed() );
216 }
217
218 static void UtcDaliButtonSize()
219 {
220   ToolkitTestApplication application;
221   tet_infoline(" UtcDaliButtonSize");
222
223   // Creates 100x50 images.
224   ImageActor image01 = CreateSolidColorActor( Color::RED );
225   image01.SetSize( 100, 50 );
226
227   CheckBoxButton checkBoxButton;
228   PushButton pushButton;
229
230   Vector3 size;
231
232   // Test1 Size is set through Actor API
233
234   // First an image is set, then SetSize is called.
235   pushButton = PushButton::New();
236
237   pushButton.SetBackgroundImage( image01 );
238   pushButton.SetSize( 10.f, 10.f );
239
240   application.SendNotification();
241   application.Render();
242
243   size = pushButton.GetCurrentSize();
244
245   DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
246   DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
247 }
248
249 static void UtcDaliButtonClicked()
250 {
251   ToolkitTestApplication application;
252   tet_infoline(" UtcDaliButtonClicked");
253
254   PushButton pushButton = PushButton::New();
255   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
256   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
257   pushButton.SetPosition( 240, 400 );
258   pushButton.SetSize( 100, 100 );
259
260   Stage::GetCurrent().Add( pushButton );
261
262   application.SendNotification();
263   application.Render();
264
265   // connect to its touch signal
266   pushButton.ClickedSignal().Connect( &ButtonClicked );
267
268   Dali::Integration::TouchEvent event;
269
270   // Test1. Touch point down and up inside the button.
271
272   gButtonClicked = false;
273   event = Dali::Integration::TouchEvent();
274   event.AddPoint( pointDownInside );
275   application.GetCore().SendEvent( event );
276
277   event = Dali::Integration::TouchEvent();
278   event.AddPoint( pointUpInside );
279   application.GetCore().SendEvent( event );
280
281   DALI_TEST_CHECK( gButtonClicked );
282
283   // Test2. Touch point down and up outside the button.
284
285   gButtonClicked = false;
286   event = Dali::Integration::TouchEvent();
287   event.AddPoint( pointDownOutside );
288   application.GetCore().SendEvent( event );
289
290   event = Dali::Integration::TouchEvent();
291   event.AddPoint( pointUpOutside );
292   application.GetCore().SendEvent( event );
293
294   DALI_TEST_CHECK( !gButtonClicked );
295
296   // Test3. Touch point down inside and up outside the button.
297
298   gButtonClicked = false;
299   event = Dali::Integration::TouchEvent();
300   event.AddPoint( pointDownInside );
301   application.GetCore().SendEvent( event );
302
303   event = Dali::Integration::TouchEvent();
304   event.AddPoint( pointLeave );
305   application.GetCore().SendEvent( event );
306
307   event = Dali::Integration::TouchEvent();
308   event.AddPoint( pointUpOutside );
309   application.GetCore().SendEvent( event );
310
311   DALI_TEST_CHECK( !gButtonClicked );
312
313   // Test4. Touch point down outside and up inside the button.
314
315   gButtonClicked = false;
316   event = Dali::Integration::TouchEvent();
317   event.AddPoint( pointDownOutside );
318   application.GetCore().SendEvent( event );
319
320   event = Dali::Integration::TouchEvent();
321   event.AddPoint( pointEnter );
322   application.GetCore().SendEvent( event );
323
324   event = Dali::Integration::TouchEvent();
325   event.AddPoint( pointUpInside );
326   application.GetCore().SendEvent( event );
327
328   DALI_TEST_CHECK( !gButtonClicked );
329 }
330
331 static bool gClickedCallBackCalled;
332
333 static bool TestClickedCallback(Button button)
334 {
335   gClickedCallBackCalled = true;
336   return true;
337 }
338
339 static void UtcDaliButtonConnectSignal()
340 {
341   ToolkitTestApplication application;
342   tet_infoline("UtcDaliButtonConnectSignal()");
343
344   gClickedCallBackCalled = false;
345
346   PushButton pushButton = PushButton::New();
347   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
348   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
349   pushButton.SetPosition( 240, 400 );
350   pushButton.SetSize( 100, 100 );
351
352   Stage::GetCurrent().Add( pushButton );
353
354   application.SendNotification();
355   application.Render();
356
357   // connect to its clicked signal
358   pushButton.ClickedSignal().Connect(TestClickedCallback);
359
360   Dali::Integration::TouchEvent event;
361
362   // Touch point down and up inside the button.
363
364   event = Dali::Integration::TouchEvent();
365   event.AddPoint( pointDownInside );
366   application.GetCore().SendEvent( event );
367
368   event = Dali::Integration::TouchEvent();
369   event.AddPoint( pointUpInside );
370   application.GetCore().SendEvent( event );
371
372   DALI_TEST_CHECK( gClickedCallBackCalled == true );
373
374   gClickedCallBackCalled = false;
375   pushButton.ClickedSignal().Disconnect(TestClickedCallback);
376
377   // simulate another touch event
378   application.GetCore().SendEvent( event );
379
380   DALI_TEST_CHECK( gClickedCallBackCalled == false );
381 }
382
383 static void UtcDaliButtonSetGetAnimationTime()
384 {
385   ToolkitTestApplication application;
386   tet_infoline(" UtcDaliButtonSetGetAnimationTime");
387
388   CheckBoxButton checkBoxButton = CheckBoxButton::New();
389   PushButton pushButton = PushButton::New();
390
391   checkBoxButton.SetAnimationTime( ANIMATION_TIME );
392   pushButton.SetAnimationTime( ANIMATION_TIME );
393
394   DALI_TEST_EQUALS( checkBoxButton.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
395   DALI_TEST_EQUALS( pushButton.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
396
397 }