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