Changes after touch changes to Core
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / 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 #include <stdlib.h>
20
21 // Need to override adaptor classes for toolkit test harness, so include
22 // test harness headers before dali headers.
23 #include <dali-toolkit-test-suite-utils.h>
24
25 #include <dali.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <dali/integration-api/events/touch-event-integ.h>
28
29 using namespace Dali;
30 using namespace Toolkit;
31
32
33 void utc_dali_toolkit_button_startup(void)
34 {
35   test_return_value = TET_UNDEF;
36 }
37
38 void utc_dali_toolkit_button_cleanup(void)
39 {
40   test_return_value = TET_PASS;
41 }
42
43 namespace
44 {
45 static bool gIsCalledButtonCallback = false;
46
47 static bool ButtonCallback( Button button )
48 {
49   gIsCalledButtonCallback = true;
50   return false;
51 }
52
53 Image CreateSolidColorImage( const Vector4& color, unsigned int width, unsigned int height )
54 {
55   BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 );
56
57   // Create the image
58   PixelBuffer* pixbuf = imageData.GetBuffer();
59   unsigned int size = width * height;
60
61   for( size_t i = 0; i < size; i++ )
62     {
63       pixbuf[i*4+0] = 0xFF * color.r;
64       pixbuf[i*4+1] = 0xFF * color.g;
65       pixbuf[i*4+2] = 0xFF * color.b;
66       pixbuf[i*4+3] = 0xFF * color.a;
67     }
68
69   imageData.Update();
70
71   return imageData;
72 }
73
74 Dali::Integration::Point GetPointDownInside()
75 {
76   Dali::Integration::Point point;
77   point.SetState( PointState::DOWN );
78   point.SetScreenPosition( Vector2( 240, 400 ) );
79   return point;
80 }
81
82 Dali::Integration::Point GetPointUpInside()
83 {
84   Dali::Integration::Point point;
85   point.SetState( PointState::UP );
86   point.SetScreenPosition( Vector2( 240, 400 ) );
87   return point;
88 }
89
90 Dali::Integration::Point GetPointLeave()
91 {
92   Dali::Integration::Point point;
93   point.SetState( PointState::LEAVE );
94   point.SetScreenPosition( Vector2( 240, 400 ) );
95   return point;
96 }
97
98 Dali::Integration::Point GetPointEnter()
99 {
100   Dali::Integration::Point point;
101   point.SetState( PointState::MOTION );
102   point.SetScreenPosition( Vector2( 240, 400 ) );
103   return point;
104 }
105
106 Dali::Integration::Point GetPointDownOutside()
107 {
108   Dali::Integration::Point point;
109   point.SetState( PointState::DOWN );
110   point.SetScreenPosition( Vector2( 10, 10 ) );
111   return point;
112 }
113
114 Dali::Integration::Point GetPointUpOutside()
115 {
116   Dali::Integration::Point point;
117   point.SetState( PointState::UP );
118   point.SetScreenPosition( Vector2( 10, 10 ) );
119   return point;
120 }
121
122
123 static float ANIMATION_TIME( 0.5f );
124 } // namespace
125
126 int UtcDaliButtonConstructorP(void)
127 {
128   TestApplication application;
129
130   Button button;
131
132   DALI_TEST_CHECK( !button );
133   END_TEST;
134 }
135
136 int UtcDaliButtonCopyConstructorP(void)
137 {
138   TestApplication application;
139
140   // Initialize an object, ref count == 1
141   Button button = PushButton::New();
142
143   Button copy( button );
144   DALI_TEST_CHECK( copy );
145   END_TEST;
146 }
147
148 int UtcDaliButtonAssignmentOperatorP(void)
149 {
150   TestApplication application;
151
152   Button button = PushButton::New();
153
154   Button copy( button );
155   DALI_TEST_CHECK( copy );
156
157   DALI_TEST_CHECK( button == copy );
158   END_TEST;
159 }
160
161 int UtcDaliButtonDownCastP(void)
162 {
163   TestApplication application;
164
165   Button button = PushButton::New();
166
167   BaseHandle object(button);
168
169   Button button2 = Button::DownCast( object );
170   DALI_TEST_CHECK(button2);
171
172   Button button3 = DownCast< Button >(object);
173   DALI_TEST_CHECK(button3);
174   END_TEST;
175 }
176
177 int UtcDaliButtonDownCastN(void)
178 {
179   TestApplication application;
180
181   BaseHandle unInitializedObject;
182
183   Button button1 = Button::DownCast( unInitializedObject );
184   DALI_TEST_CHECK( !button1 );
185
186   Button button2 = DownCast< Button >( unInitializedObject );
187   DALI_TEST_CHECK( !button2 );
188   END_TEST;
189 }
190
191 int UtcDaliButtonSetDisabledP(void)
192 {
193   ToolkitTestApplication application;
194
195   Button button = PushButton::New();
196
197   button.SetDisabled( true );
198
199   DALI_TEST_CHECK( button.IsDisabled() );
200
201   button.SetDisabled( false );
202
203   DALI_TEST_CHECK( !button.IsDisabled() );
204
205   button.SetDisabled( true );
206
207   DALI_TEST_CHECK( button.IsDisabled() );
208
209   button.SetDisabled( false );
210
211   DALI_TEST_CHECK( !button.IsDisabled() );
212   END_TEST;
213 }
214
215 int UtcDaliButtonIsDisabledP(void)
216 {
217   ToolkitTestApplication application;
218
219   Button button = PushButton::New();
220
221   button.SetDisabled( true );
222
223   DALI_TEST_CHECK( button.IsDisabled() );
224
225   button.SetDisabled( false );
226
227   DALI_TEST_CHECK( !button.IsDisabled() );
228   END_TEST;
229 }
230
231 int UtcDaliButtonSetAutoRepeatingP(void)
232 {
233   ToolkitTestApplication application;
234
235   Button button = PushButton::New();
236
237   button.SetAutoRepeating( true );
238
239   DALI_TEST_CHECK( button.IsAutoRepeating() );
240
241   button.SetAutoRepeating( false );
242
243   DALI_TEST_CHECK( !button.IsAutoRepeating() );
244
245   button.SetAutoRepeating( true );
246
247   DALI_TEST_CHECK( button.IsAutoRepeating() );
248
249   button.SetAutoRepeating( false );
250
251   DALI_TEST_CHECK( !button.IsAutoRepeating() );
252   END_TEST;
253 }
254
255 int UtcDaliButtonIsAutoRepeatingP(void)
256 {
257   ToolkitTestApplication application;
258
259   Button button = PushButton::New();
260
261   button.SetAutoRepeating( true );
262
263   DALI_TEST_CHECK( button.IsAutoRepeating() );
264
265   button.SetAutoRepeating( false );
266
267   DALI_TEST_CHECK( !button.IsAutoRepeating() );
268   END_TEST;
269 }
270
271 int UtcDaliButtonSetInitialAutoRepeatingDelayP(void)
272 {
273   ToolkitTestApplication application;
274
275   Button button = PushButton::New();
276
277   button.SetInitialAutoRepeatingDelay( 0.5f );
278
279   DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
280
281   button.SetInitialAutoRepeatingDelay( 0.2f );
282
283   DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
284   END_TEST;
285 }
286
287 int UtcDaliButtonSetNextAutoRepeatingDelayP(void)
288 {
289   ToolkitTestApplication application;
290
291   Button button = PushButton::New();
292
293   button.SetNextAutoRepeatingDelay( 0.5f );
294
295   DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
296
297   button.SetNextAutoRepeatingDelay( 0.2f );
298
299   DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
300   END_TEST;
301 }
302
303 int UtcDaliButtonSetTogglableButtonP(void)
304 {
305   ToolkitTestApplication application;
306
307   Button button = PushButton::New();
308
309   button.SetTogglableButton( true );
310
311   DALI_TEST_CHECK( button.IsTogglableButton() );
312
313   button.SetTogglableButton( false );
314
315   DALI_TEST_CHECK( !button.IsTogglableButton() );
316   END_TEST;
317 }
318
319 int UtcDaliButtonSetSelectedP(void)
320 {
321   ToolkitTestApplication application;
322
323   Button button = PushButton::New();
324   button.SetTogglableButton( true );
325
326   button.SetSelected( true );
327
328   DALI_TEST_CHECK( button.IsSelected() );
329
330   button.SetSelected( false );
331
332   DALI_TEST_CHECK( !button.IsSelected() );
333   END_TEST;
334 }
335
336 int UtcDaliButtonSetAnimationTimeP(void)
337 {
338   ToolkitTestApplication application;
339   tet_infoline(" UtcDaliButtonSetAnimationTimeP");
340
341   Button button = PushButton::New();
342
343   button.SetAnimationTime( ANIMATION_TIME );
344
345   DALI_TEST_EQUALS( button.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
346   END_TEST;
347 }
348
349 int UtcDaliButtonSetLabelStringP(void)
350 {
351   ToolkitTestApplication application;
352
353   Button button = PushButton::New();
354
355   button.SetLabelText( "Button Label" );
356
357   DALI_TEST_EQUALS( button.GetLabelText(), "Button Label", TEST_LOCATION );
358   END_TEST;
359 }
360
361 int UtcDaliButtonSetLabelActorP(void)
362 {
363   ToolkitTestApplication application;
364
365   Button button = PushButton::New();
366
367   button.SetLabelText( "Button Label" );
368
369   DALI_TEST_EQUALS( button.GetLabelText(), "Button Label", TEST_LOCATION );
370   END_TEST;
371 }
372
373 int UtcDaliButtonSetUnselectedImageP(void)
374 {
375   ToolkitTestApplication application;
376   tet_infoline(" UtcDaliButtonSetUnselectedImageP");
377
378   PushButton pushButton = PushButton::New();
379   Stage::GetCurrent().Add( pushButton );
380
381   application.SendNotification();
382   application.Render();
383
384   pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
385   pushButton.SetUnselectedImage( "Image.jpg" );
386
387   application.SendNotification();
388   application.Render();
389
390   Vector3 size = pushButton.GetCurrentSize();
391
392   DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
393   DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
394
395   END_TEST;
396 }
397
398 int UtcDaliButtonSetSelectedImageP(void)
399 {
400   ToolkitTestApplication application;
401   tet_infoline(" UtcDaliButtonSetButtonImage");
402
403   PushButton pushButton = PushButton::New();
404   Stage::GetCurrent().Add( pushButton );
405
406   application.SendNotification();
407   application.Render();
408
409   pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
410   pushButton.SetSelectedImage( "Image.jpg" );
411
412   application.SendNotification();
413   application.Render();
414
415   Vector3 size = pushButton.GetCurrentSize();
416
417   DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
418   DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
419
420   END_TEST;
421 }
422
423 int UtcDaliButtonPressedSignalP(void)
424 {
425   ToolkitTestApplication application;
426   tet_infoline(" UtcDaliButtonPressedSignalP");
427
428   Button button = PushButton::New();
429   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
430   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
431   button.SetPosition( 240, 400 );
432   button.SetSize( 100, 100 );
433
434   Stage::GetCurrent().Add( button );
435
436   application.SendNotification();
437   application.Render();
438
439   // connect to its touch signal
440   button.PressedSignal().Connect( &ButtonCallback );
441   button.ReleasedSignal().Connect( &ButtonCallback );
442
443   Dali::Integration::TouchEvent event;
444
445   // Test1. Touch point down and up inside the button.
446
447   gIsCalledButtonCallback = false;
448   event = Dali::Integration::TouchEvent();
449   event.AddPoint( GetPointDownInside() );
450   application.ProcessEvent( event );
451
452   DALI_TEST_CHECK( gIsCalledButtonCallback );
453
454   gIsCalledButtonCallback = false;
455   event = Dali::Integration::TouchEvent();
456   event.AddPoint( GetPointUpInside() );
457   application.ProcessEvent( event );
458
459   DALI_TEST_CHECK( gIsCalledButtonCallback );
460
461   // Test2. Touch point down and up outside the button.
462
463   gIsCalledButtonCallback = false;
464   event = Dali::Integration::TouchEvent();
465   event.AddPoint( GetPointDownOutside() );
466   application.ProcessEvent( event );
467
468   DALI_TEST_CHECK( !gIsCalledButtonCallback );
469
470   gIsCalledButtonCallback = false;
471   event = Dali::Integration::TouchEvent();
472   event.AddPoint( GetPointUpOutside() );
473   application.ProcessEvent( event );
474
475   DALI_TEST_CHECK( !gIsCalledButtonCallback );
476
477   // Test3. Touch point down inside and up outside the button.
478
479   gIsCalledButtonCallback = false;
480   event = Dali::Integration::TouchEvent();
481   event.AddPoint( GetPointDownInside() );
482   application.ProcessEvent( event );
483
484   DALI_TEST_CHECK( gIsCalledButtonCallback );
485
486   gIsCalledButtonCallback = false;
487   event = Dali::Integration::TouchEvent();
488   event.AddPoint( GetPointLeave() );
489   application.ProcessEvent( event );
490
491   event = Dali::Integration::TouchEvent();
492   event.AddPoint( GetPointUpOutside() );
493   application.ProcessEvent( event );
494
495   DALI_TEST_CHECK( gIsCalledButtonCallback );
496
497   // Test4. Touch point down outside and up inside the button.
498
499   gIsCalledButtonCallback = false;
500   event = Dali::Integration::TouchEvent();
501   event.AddPoint( GetPointDownOutside() );
502   application.ProcessEvent( event );
503
504   DALI_TEST_CHECK( !gIsCalledButtonCallback );
505
506   gIsCalledButtonCallback = false;
507   event = Dali::Integration::TouchEvent();
508   event.AddPoint( GetPointEnter() );
509   application.ProcessEvent( event );
510
511   event = Dali::Integration::TouchEvent();
512   event.AddPoint( GetPointUpInside() );
513   application.ProcessEvent( event );
514
515   DALI_TEST_CHECK( !gIsCalledButtonCallback );
516   END_TEST;
517 }
518
519 int UtcDaliButtonClickedSignalP(void)
520 {
521   ToolkitTestApplication application;
522   tet_infoline(" UtcDaliButtonClickedSignalP");
523
524   Button button = PushButton::New();
525   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
526   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
527   button.SetPosition( 240, 400 );
528   button.SetSize( 100, 100 );
529
530   Stage::GetCurrent().Add( button );
531
532   application.SendNotification();
533   application.Render();
534
535   // connect to its touch signal
536   button.ClickedSignal().Connect( &ButtonCallback );
537
538   Dali::Integration::TouchEvent event;
539
540   // Test1. Touch point down and up inside the button.
541
542   gIsCalledButtonCallback = false;
543   event = Dali::Integration::TouchEvent();
544   event.AddPoint( GetPointDownInside() );
545   application.ProcessEvent( event );
546
547   event = Dali::Integration::TouchEvent();
548   event.AddPoint( GetPointUpInside() );
549   application.ProcessEvent( event );
550
551   DALI_TEST_CHECK( gIsCalledButtonCallback );
552
553   // Test2. Touch point down and up outside the button.
554
555   gIsCalledButtonCallback = false;
556   event = Dali::Integration::TouchEvent();
557   event.AddPoint( GetPointDownOutside() );
558   application.ProcessEvent( event );
559
560   event = Dali::Integration::TouchEvent();
561   event.AddPoint( GetPointUpOutside() );
562   application.ProcessEvent( event );
563
564   DALI_TEST_CHECK( !gIsCalledButtonCallback );
565
566   // Test3. Touch point down inside and up outside the button.
567
568   gIsCalledButtonCallback = false;
569   event = Dali::Integration::TouchEvent();
570   event.AddPoint( GetPointDownInside() );
571   application.ProcessEvent( event );
572
573   event = Dali::Integration::TouchEvent();
574   event.AddPoint( GetPointLeave() );
575   application.ProcessEvent( event );
576
577   event = Dali::Integration::TouchEvent();
578   event.AddPoint( GetPointUpOutside() );
579   application.ProcessEvent( event );
580
581   DALI_TEST_CHECK( !gIsCalledButtonCallback );
582
583   // Test4. Touch point down outside and up inside the button.
584
585   gIsCalledButtonCallback = false;
586   event = Dali::Integration::TouchEvent();
587   event.AddPoint( GetPointDownOutside() );
588   application.ProcessEvent( event );
589
590   event = Dali::Integration::TouchEvent();
591   event.AddPoint( GetPointEnter() );
592   application.ProcessEvent( event );
593
594   event = Dali::Integration::TouchEvent();
595   event.AddPoint( GetPointUpInside() );
596   application.ProcessEvent( event );
597
598   DALI_TEST_CHECK( !gIsCalledButtonCallback );
599   END_TEST;
600 }
601
602 int UtcDaliButtonStateChangedSignalP(void)
603 {
604   ToolkitTestApplication application;
605   tet_infoline(" UtcDaliButtonStateChangedSignalP");
606
607   Button button = PushButton::New();
608   button.SetTogglableButton( true );
609
610   Stage::GetCurrent().Add( button );
611
612   application.SendNotification();
613   application.Render();
614
615   // connect to its signal
616   button.StateChangedSignal().Connect( &ButtonCallback );
617
618   gIsCalledButtonCallback = false;
619   button.SetSelected( true );
620
621   DALI_TEST_CHECK( gIsCalledButtonCallback );
622
623   gIsCalledButtonCallback = false;
624   button.SetSelected( false );
625
626   DALI_TEST_CHECK( gIsCalledButtonCallback );
627   END_TEST;
628 }
629
630 int UtcDaliButtonSetProperty(void)
631 {
632   tet_infoline("UtcDaliButtonSetProperty: ");
633   ToolkitTestApplication application;
634
635   PushButton pushButton = PushButton::New();
636
637   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
638   DALI_TEST_CHECK( false == pushButton.IsDisabled() );
639
640   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
641   DALI_TEST_CHECK( true == pushButton.IsDisabled() );
642
643   END_TEST;
644 }
645
646 int UtcDaliButtonSize(void)
647 {
648   ToolkitTestApplication application;
649   tet_infoline(" UtcDaliButtonSize");
650
651   // First an image is set, then SetSize is called.
652   PushButton pushButton = PushButton::New();
653   Stage::GetCurrent().Add( pushButton );
654
655   pushButton.SetBackgroundImage( "Image.jpg" );
656   pushButton.SetSize( 10.f, 10.f );
657
658   application.SendNotification();
659   application.Render();
660
661   Vector3 size = pushButton.GetCurrentSize();
662
663   DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
664   DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
665   END_TEST;
666 }