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