Merge "(AnimatedVectorImageVisual) Change renderer on stage again" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / utc-Dali-Button.cpp
1 /*
2  * Copyright (c) 2019 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 #include "dali-toolkit-test-utils/toolkit-timer.h"
25
26 #include <dali.h>
27 #include <dali-toolkit/dali-toolkit.h>
28 #include <dali/integration-api/events/touch-event-integ.h>
29
30 #include <dali-toolkit/devel-api/controls/buttons/button-devel.h>
31
32 using namespace Dali;
33 using namespace Toolkit;
34
35
36 void utc_dali_toolkit_button_startup(void)
37 {
38   test_return_value = TET_UNDEF;
39 }
40
41 void utc_dali_toolkit_button_cleanup(void)
42 {
43   test_return_value = TET_PASS;
44 }
45
46 namespace
47 {
48 static bool gIsCalledButtonCallback = false;
49 static bool gIsCalledChildButtonCallback = false;
50
51 static bool ButtonCallback( Button button )
52 {
53   gIsCalledButtonCallback = true;
54   return false;
55 }
56
57 static bool ChildButtonCallback( Button button )
58 {
59   gIsCalledChildButtonCallback = true;
60   return false;
61 }
62
63 static std::string GetButtonText( Button button )
64 {
65   Property::Value value = button.GetProperty( Toolkit::Button::Property::LABEL );
66
67   Property::Map *labelProperty = value.GetMap();
68
69   std::string textLabel;
70
71   if ( labelProperty )
72   {
73     Property::Value* value = labelProperty->Find( Toolkit::TextVisual::Property::TEXT );
74     value->Get( textLabel );
75   }
76
77   return textLabel;
78 }
79
80 struct CallbackFunctor
81 {
82   CallbackFunctor(bool* callbackFlag)
83   : mCallbackFlag( callbackFlag )
84   {
85   }
86
87   void operator()()
88   {
89     *mCallbackFlag = true;
90   }
91   bool* mCallbackFlag;
92 };
93
94 Dali::Integration::Point GetPointDownInside()
95 {
96   Dali::Integration::Point point;
97   point.SetState( PointState::DOWN );
98   point.SetScreenPosition( Vector2( 240, 400 ) );
99   return point;
100 }
101
102 Dali::Integration::Point GetPointUpInside()
103 {
104   Dali::Integration::Point point;
105   point.SetState( PointState::UP );
106   point.SetScreenPosition( Vector2( 240, 400 ) );
107   return point;
108 }
109
110 Dali::Integration::Point GetPointLeave()
111 {
112   Dali::Integration::Point point;
113   point.SetState( PointState::LEAVE );
114   point.SetScreenPosition( Vector2( 240, 400 ) );
115   return point;
116 }
117
118 Dali::Integration::Point GetPointEnter()
119 {
120   Dali::Integration::Point point;
121   point.SetState( PointState::MOTION );
122   point.SetScreenPosition( Vector2( 240, 400 ) );
123   return point;
124 }
125
126 Dali::Integration::Point GetPointDownOutside()
127 {
128   Dali::Integration::Point point;
129   point.SetState( PointState::DOWN );
130   point.SetScreenPosition( Vector2( 10, 10 ) );
131   return point;
132 }
133
134 Dali::Integration::Point GetPointUpOutside()
135 {
136   Dali::Integration::Point point;
137   point.SetState( PointState::UP );
138   point.SetScreenPosition( Vector2( 10, 10 ) );
139   return point;
140 }
141
142 static float ANIMATION_TIME( 0.5f );
143
144 } // namespace
145
146 int UtcDaliButtonConstructorP(void)
147 {
148   TestApplication application;
149
150   Button button;
151
152   DALI_TEST_CHECK( !button );
153   END_TEST;
154 }
155
156 int UtcDaliButtonCopyConstructorP(void)
157 {
158   TestApplication application;
159
160   // Initialize an object, ref count == 1
161   Button button = PushButton::New();
162
163   Button copy( button );
164   DALI_TEST_CHECK( copy );
165   END_TEST;
166 }
167
168 int UtcDaliButtonAssignmentOperatorP(void)
169 {
170   TestApplication application;
171
172   Button button = PushButton::New();
173
174   Button copy( button );
175   DALI_TEST_CHECK( copy );
176
177   DALI_TEST_CHECK( button == copy );
178   END_TEST;
179 }
180
181 int UtcDaliButtonDownCastP(void)
182 {
183   TestApplication application;
184
185   Button button = PushButton::New();
186
187   BaseHandle object(button);
188
189   Button button2 = Button::DownCast( object );
190   DALI_TEST_CHECK(button2);
191
192   Button button3 = DownCast< Button >(object);
193   DALI_TEST_CHECK(button3);
194   END_TEST;
195 }
196
197 int UtcDaliButtonDownCastN(void)
198 {
199   TestApplication application;
200
201   BaseHandle unInitializedObject;
202
203   Button button1 = Button::DownCast( unInitializedObject );
204   DALI_TEST_CHECK( !button1 );
205
206   Button button2 = DownCast< Button >( unInitializedObject );
207   DALI_TEST_CHECK( !button2 );
208   END_TEST;
209 }
210
211 int UtcDaliButtonDisabledPropertyP(void)
212 {
213   ToolkitTestApplication application;
214
215   Button button = PushButton::New();
216
217
218   button.SetProperty( button.GetPropertyIndex("disabled"), true );
219
220   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), true, TEST_LOCATION );
221
222   button.SetProperty( button.GetPropertyIndex("disabled"), false );
223
224   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), false, TEST_LOCATION );
225
226   button.SetProperty( button.GetPropertyIndex("disabled"), true );
227
228   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), true, TEST_LOCATION );
229
230   button.SetProperty( button.GetPropertyIndex("disabled"), false );
231
232   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), false, TEST_LOCATION );
233
234   END_TEST;
235 }
236
237 int UtcDaliButtonSetDisabledWithDifferentStates01P(void)
238 {
239   ToolkitTestApplication application;
240
241   tet_infoline("UtcDaliButtonSetDisabledWithDifferentStates01P\n");
242
243   Button button = PushButton::New();
244
245   bool SELECTED = true;
246
247   button.SetProperty( Button::Property::TOGGLABLE, true);
248   button.SetProperty( Button::Property::SELECTED, SELECTED );
249
250   button.SetProperty( Button::Property::DISABLED, true);
251
252   tet_infoline("Set button to SELECTED = false whilst disabled, should not change to false\n");
253   button.SetProperty( Button::Property::SELECTED, !SELECTED );
254
255   bool isSelected = button.GetProperty<bool>( Button::Property::SELECTED ) ;
256
257   DALI_TEST_EQUALS( isSelected, SELECTED , TEST_LOCATION );
258
259   END_TEST;
260 }
261
262 int UtcDaliButtonSetDisabledWithDifferentStates02P(void)
263 {
264   ToolkitTestApplication application;
265
266   tet_infoline("UtcDaliButtonSetDisabledWithDifferentStates02\n");
267
268   Button button = PushButton::New();
269
270   bool SELECTED = true;
271
272   button.SetProperty( Button::Property::TOGGLABLE, true );
273   button.SetProperty( Button::Property::SELECTED, SELECTED );
274   button.SetProperty( Button::Property::DISABLED, true );
275
276   bool isSelected =  button.GetProperty<bool>( Button::Property::SELECTED );
277   DALI_TEST_EQUALS( isSelected, SELECTED , TEST_LOCATION );
278   tet_infoline("Set button to DISABLED = false whilst disabled and then set to unselected\n");
279
280   button.SetProperty( Button::Property::DISABLED, false );
281   button.SetProperty( Button::Property::SELECTED, !SELECTED );
282
283   isSelected = button.GetProperty<bool>( Button::Property::SELECTED );
284   DALI_TEST_EQUALS( isSelected, !SELECTED , TEST_LOCATION );
285
286   END_TEST;
287 }
288
289 int UtcDaliButtonPropertyGetLabelAlignment(void)
290 {
291   ToolkitTestApplication application;
292   tet_infoline(" UtcDaliPushButtonPropertyGetLabelAlignment\n");
293
294   Button button = PushButton::New();
295   button.SetProperty( Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT, "END"  );
296   DALI_TEST_EQUALS( button.GetProperty<std::string>( Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT ), "END", TEST_LOCATION );
297
298   END_TEST;
299 }
300
301 int UtcDaliButtonIsDisabledP(void)
302 {
303   ToolkitTestApplication application;
304
305   Button button = PushButton::New();
306
307   button.SetDisabled( true );
308
309   DALI_TEST_CHECK( button.IsDisabled() );
310
311   button.SetDisabled( false );
312
313   DALI_TEST_CHECK( !button.IsDisabled() );
314   END_TEST;
315 }
316
317 int UtcDaliButtonAutoRepeatingPropertyP(void)
318 {
319   ToolkitTestApplication application;
320
321   Button button = PushButton::New();
322
323   button.SetProperty( button.GetPropertyIndex("autoRepeating"), true );
324
325   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION );
326
327   button.SetProperty( button.GetPropertyIndex("autoRepeating"), false );
328
329   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), false, TEST_LOCATION );
330
331   button.SetProperty( button.GetPropertyIndex("autoRepeating"), true );
332
333   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION );
334
335   button.SetAutoRepeating( false );
336
337   DALI_TEST_CHECK( !button.IsAutoRepeating() );
338   END_TEST;
339 }
340
341 int UtcDaliButtonIsAutoRepeatingP(void)
342 {
343   ToolkitTestApplication application;
344
345   Button button = PushButton::New();
346
347   button.SetAutoRepeating( true );
348
349   DALI_TEST_CHECK( button.IsAutoRepeating() );
350
351   button.SetAutoRepeating( false );
352
353   DALI_TEST_CHECK( !button.IsAutoRepeating() );
354   END_TEST;
355 }
356
357 int UtcDaliButtonAutoRepeatingP(void)
358 {
359   ToolkitTestApplication application;
360   tet_infoline(" UtcDaliButtonPressedSignalP  Setup Autorepeating and check multiple clicked signals received\n");
361
362   const float AUTO_REPEATING_DELAY = 0.15f;
363
364   Button button = PushButton::New();
365   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
366   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
367   button.SetPosition( 240, 400 );
368   button.SetSize( 100, 100 );
369   Stage::GetCurrent().Add( button );
370
371   application.SendNotification();
372   application.Render();
373
374   button.SetProperty( Toolkit::Button::Property::AUTO_REPEATING, true  );
375   button.SetProperty( Toolkit::Button::Property::INITIAL_AUTO_REPEATING_DELAY, AUTO_REPEATING_DELAY );
376   // connect to its touch signal
377   ConnectionTracker* testTracker = new ConnectionTracker();
378   button.PressedSignal().Connect( &ButtonCallback );
379   button.ClickedSignal().Connect( &ButtonCallback );
380   bool clickedSignal = false;
381   bool pressedSignal = false;
382   button.ConnectSignal( testTracker, "pressed", CallbackFunctor(&pressedSignal) );
383   button.ConnectSignal( testTracker, "clicked", CallbackFunctor(&clickedSignal) );
384
385   Dali::Integration::TouchEvent event;
386
387   // Touch point down and up inside the button.
388
389   gIsCalledButtonCallback = false;
390   event = Dali::Integration::TouchEvent();
391   event.AddPoint( GetPointDownInside() );
392   application.ProcessEvent( event );
393
394   DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
395   DALI_TEST_EQUALS( pressedSignal, true, TEST_LOCATION );
396   tet_infoline("Consume first clicked signal then wait\n");
397
398   gIsCalledButtonCallback = false;
399   Dali::Timer timer = Timer::New( AUTO_REPEATING_DELAY );
400   timer.MockEmitSignal();
401   application.Wait( AUTO_REPEATING_DELAY*2 );
402   DALI_TEST_EQUALS( clickedSignal, true, TEST_LOCATION );
403   tet_infoline("Check gIsCalledButtonCallback was called again after last consumption of it.\n");
404
405   DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
406
407   gIsCalledButtonCallback = false;
408   event = Dali::Integration::TouchEvent();
409   event.AddPoint( GetPointUpInside() );
410   application.ProcessEvent( event );
411
412   DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
413
414   END_TEST;
415 }
416
417 int UtcDaliButtonInitialAutoRepeatingDelayPropertyP(void)
418 {
419   ToolkitTestApplication application;
420
421   Button button = PushButton::New();
422
423   button.SetProperty( button.GetPropertyIndex("initialAutoRepeatingDelay"), 0.5f );
424
425   DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("initialAutoRepeatingDelay")), 0.5f, TEST_LOCATION );
426
427   button.SetProperty( button.GetPropertyIndex("initialAutoRepeatingDelay"), 0.2f );
428
429   DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("initialAutoRepeatingDelay")), 0.2f, TEST_LOCATION );
430
431   END_TEST;
432 }
433
434 int UtcDaliButtonNextAutoRepeatingDelayPropertyP(void)
435 {
436   ToolkitTestApplication application;
437
438   Button button = PushButton::New();
439
440   button.SetProperty( button.GetPropertyIndex("nextAutoRepeatingDelay"), 0.5f );
441
442   DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("nextAutoRepeatingDelay")), 0.5f, TEST_LOCATION );
443
444   button.SetProperty( button.GetPropertyIndex("nextAutoRepeatingDelay"), 0.2f );
445
446   DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("nextAutoRepeatingDelay")), 0.2f, TEST_LOCATION );
447   END_TEST;
448 }
449
450 int UtcDaliButtonTogglableButtonPropertyP(void)
451 {
452   ToolkitTestApplication application;
453
454   Button button = PushButton::New();
455
456   button.SetProperty( button.GetPropertyIndex("togglable"), true );
457
458   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("togglable")), true, TEST_LOCATION );
459
460   button.SetProperty( button.GetPropertyIndex("togglable"), false );
461
462   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("togglable")), false, TEST_LOCATION );
463   END_TEST;
464 }
465
466 int UtcDaliButtonSelectedPropertyP(void)
467 {
468   ToolkitTestApplication application;
469
470   Button button = PushButton::New();
471   button.SetProperty( button.GetPropertyIndex("togglable"), true );
472
473   button.SetProperty( button.GetPropertyIndex("selected"), true );
474
475   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("selected")), true, TEST_LOCATION );
476
477   button.SetProperty( button.GetPropertyIndex("selected"), false );
478
479   DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("selected")), false, TEST_LOCATION );
480   END_TEST;
481 }
482
483 int UtcDaliButtonSetAnimationTimeP(void)
484 {
485   ToolkitTestApplication application;
486   tet_infoline(" UtcDaliButtonSetAnimationTimeP");
487
488   Button button = PushButton::New();
489
490   button.SetAnimationTime( ANIMATION_TIME );
491
492   DALI_TEST_EQUALS( button.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
493   END_TEST;
494 }
495
496 int UtcDaliButtonSetLabelStringWithPropertyMapP(void)
497 {
498   ToolkitTestApplication application;
499
500   Button button = PushButton::New();
501   button.SetProperty( Toolkit::Button::Property::LABEL,
502                       Property::Map().Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT )
503                                      .Add( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f )
504                                      .Add( Toolkit::TextVisual::Property::TEXT, "Button Label")
505                      );
506
507   DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
508   END_TEST;
509 }
510
511 int UtcDaliButtonSetLabelStringWithPropertyMapStringsP(void)
512 {
513   ToolkitTestApplication application;
514
515   Button button = PushButton::New();
516
517   tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Setting Button text using String then replacing with Enum then string");
518
519   Property::Map textVisualMapInitial;
520   textVisualMapInitial["visualType"] = "TEXT";
521   textVisualMapInitial["pointSize"] =  15.0f;
522   textVisualMapInitial["text"] = "button label initial";
523
524   button.SetProperty( Button::Property::LABEL, textVisualMapInitial );
525
526   DALI_TEST_EQUALS( GetButtonText( button ), "button label initial", TEST_LOCATION );
527
528   tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Intermediate part of test");
529
530   Property::Map propertyMap;
531   propertyMap.Insert( Toolkit::Visual::Property::TYPE,  Toolkit::Visual::TEXT );
532   propertyMap.Insert( Toolkit::TextVisual::Property::TEXT,  "error if this is the final text" );
533   propertyMap.Insert( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f );
534
535   button.SetProperty( Button::Property::LABEL, propertyMap );
536
537   DALI_TEST_EQUALS( GetButtonText( button ), "error if this is the final text", TEST_LOCATION );
538
539   tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Final part of test");
540
541   Property::Map textVisualMap;
542   textVisualMap["visualType"] = "TEXT";
543   textVisualMap["pointSize"] =  15.0f;
544   textVisualMap["text"] = "Button Label";
545
546   button.SetProperty( Toolkit::Button::Property::LABEL, textVisualMap );
547
548   DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
549   END_TEST;
550 }
551
552 int UtcDaliButtonSetLabelWithStringP(void)
553 {
554   ToolkitTestApplication application;
555
556   Button button = PushButton::New();
557
558   // Set default point size for text visual as style sheet not available.
559   button.SetProperty( Toolkit::Button::Property::LABEL,
560                       Property::Map().Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT )
561                                      .Add( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f )
562                                      );
563
564   button.SetProperty( Toolkit::Button::Property::LABEL, "Button Label" );
565
566   DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
567   END_TEST;
568 }
569
570 int UtcDaliButtonSetLabelPropertyP(void)
571 {
572   ToolkitTestApplication application;
573
574   tet_infoline(" UtcDaliButtonSetLabelPropertyP Set text label and then set again with new text");
575
576
577   const std::string TEST_LABEL1 = "test label one";
578   const std::string TEST_LABEL2 = "test label two";
579
580   Button button = PushButton::New();
581
582   button.SetProperty( Toolkit::Button::Property::LABEL,
583                         Property::Map().Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT )
584                                        .Add( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f )
585                                        .Add( Toolkit::TextVisual::Property::TEXT, TEST_LABEL1 )
586                      );
587
588   DALI_TEST_EQUALS( GetButtonText( button ), TEST_LABEL1,  TEST_LOCATION );
589
590   Property::Map propertyMap;
591   propertyMap.Insert( Toolkit::Visual::Property::TYPE,  Toolkit::Visual::TEXT );
592   propertyMap.Insert( Toolkit::TextVisual::Property::TEXT,  TEST_LABEL2 );
593   propertyMap.Insert( Toolkit::TextVisual::Property::TEXT_COLOR, Color::BLUE );
594   propertyMap.Insert( Toolkit::TextVisual::Property::POINT_SIZE, 15.0f );
595   button.SetProperty( Button::Property::LABEL, propertyMap );
596
597   DALI_TEST_EQUALS( GetButtonText( button ), TEST_LABEL2,  TEST_LOCATION );
598
599   END_TEST;
600 }
601
602 int UtcDaliButtonPressedSignalP(void)
603 {
604   ToolkitTestApplication application;
605   tet_infoline(" UtcDaliButtonPressedSignalP");
606
607   Button button = PushButton::New();
608   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
609   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
610   button.SetPosition( 240, 400 );
611   button.SetSize( 100, 100 );
612
613   Stage::GetCurrent().Add( button );
614
615   application.SendNotification();
616   application.Render();
617
618   // connect to its touch signal
619   ConnectionTracker* testTracker = new ConnectionTracker();
620   button.PressedSignal().Connect( &ButtonCallback );
621   button.ReleasedSignal().Connect( &ButtonCallback );
622   bool pressedSignal = false;
623   bool releasedSignal = false;
624   button.ConnectSignal( testTracker, "pressed",   CallbackFunctor(&pressedSignal) );
625   button.ConnectSignal( testTracker, "released",  CallbackFunctor(&releasedSignal) );
626
627   Dali::Integration::TouchEvent event;
628
629   // Test1. Touch point down and up inside the button.
630
631   gIsCalledButtonCallback = false;
632   event = Dali::Integration::TouchEvent();
633   event.AddPoint( GetPointDownInside() );
634   application.ProcessEvent( event );
635
636   DALI_TEST_CHECK( gIsCalledButtonCallback );
637   DALI_TEST_CHECK( pressedSignal );
638
639   gIsCalledButtonCallback = false;
640   event = Dali::Integration::TouchEvent();
641   event.AddPoint( GetPointUpInside() );
642   application.ProcessEvent( event );
643
644   DALI_TEST_CHECK( gIsCalledButtonCallback );
645   DALI_TEST_CHECK( releasedSignal );
646
647   // Test2. Touch point down and up outside the button.
648
649   pressedSignal = false;
650   releasedSignal = false;
651   gIsCalledButtonCallback = false;
652   event = Dali::Integration::TouchEvent();
653   event.AddPoint( GetPointDownOutside() );
654   application.ProcessEvent( event );
655
656   DALI_TEST_CHECK( !gIsCalledButtonCallback );
657   DALI_TEST_CHECK( !pressedSignal );
658
659   gIsCalledButtonCallback = false;
660   event = Dali::Integration::TouchEvent();
661   event.AddPoint( GetPointUpOutside() );
662   application.ProcessEvent( event );
663
664   DALI_TEST_CHECK( !gIsCalledButtonCallback );
665   DALI_TEST_CHECK( !releasedSignal );
666
667   // Test3. Touch point down inside and up outside the button.
668
669   gIsCalledButtonCallback = false;
670   event = Dali::Integration::TouchEvent();
671   event.AddPoint( GetPointDownInside() );
672   application.ProcessEvent( event );
673
674   DALI_TEST_CHECK( gIsCalledButtonCallback );
675
676   gIsCalledButtonCallback = false;
677   event = Dali::Integration::TouchEvent();
678   event.AddPoint( GetPointLeave() );
679   application.ProcessEvent( event );
680
681   event = Dali::Integration::TouchEvent();
682   event.AddPoint( GetPointUpOutside() );
683   application.ProcessEvent( event );
684
685   DALI_TEST_CHECK( gIsCalledButtonCallback );
686
687   // Test4. Touch point down outside and up inside the button.
688
689   gIsCalledButtonCallback = false;
690   event = Dali::Integration::TouchEvent();
691   event.AddPoint( GetPointDownOutside() );
692   application.ProcessEvent( event );
693
694   DALI_TEST_CHECK( !gIsCalledButtonCallback );
695
696   gIsCalledButtonCallback = false;
697   event = Dali::Integration::TouchEvent();
698   event.AddPoint( GetPointEnter() );
699   application.ProcessEvent( event );
700
701   event = Dali::Integration::TouchEvent();
702   event.AddPoint( GetPointUpInside() );
703   application.ProcessEvent( event );
704
705   DALI_TEST_CHECK( !gIsCalledButtonCallback );
706   END_TEST;
707 }
708
709 int UtcDaliButtonClickedSignalP(void)
710 {
711   ToolkitTestApplication application;
712   tet_infoline(" UtcDaliButtonClickedSignalP");
713
714   Button button = PushButton::New();
715   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
716   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
717   button.SetPosition( 240, 400 );
718   button.SetSize( 100, 100 );
719
720   Stage::GetCurrent().Add( button );
721
722   application.SendNotification();
723   application.Render();
724
725   // connect to its touch signal
726   button.ClickedSignal().Connect( &ButtonCallback );
727   bool clickedSignal = false;
728   ConnectionTracker* testTracker = new ConnectionTracker();
729   button.ConnectSignal( testTracker, "clicked",   CallbackFunctor(&clickedSignal) );
730
731   Dali::Integration::TouchEvent event;
732
733   // Test1. Touch point down and up inside the button.
734
735   gIsCalledButtonCallback = false;
736   event = Dali::Integration::TouchEvent();
737   event.AddPoint( GetPointDownInside() );
738   application.ProcessEvent( event );
739
740   event = Dali::Integration::TouchEvent();
741   event.AddPoint( GetPointUpInside() );
742   application.ProcessEvent( event );
743
744   DALI_TEST_CHECK( gIsCalledButtonCallback );
745   DALI_TEST_CHECK( clickedSignal );
746
747   // Test2. Touch point down and up outside the button.
748
749   gIsCalledButtonCallback = false;
750   clickedSignal = false;
751   event = Dali::Integration::TouchEvent();
752   event.AddPoint( GetPointDownOutside() );
753   application.ProcessEvent( event );
754
755   event = Dali::Integration::TouchEvent();
756   event.AddPoint( GetPointUpOutside() );
757   application.ProcessEvent( event );
758
759   DALI_TEST_CHECK( !gIsCalledButtonCallback );
760   DALI_TEST_CHECK( !clickedSignal );
761
762   // Test3. Touch point down inside and up outside the button.
763
764   gIsCalledButtonCallback = false;
765   clickedSignal = false;
766   event = Dali::Integration::TouchEvent();
767   event.AddPoint( GetPointDownInside() );
768   application.ProcessEvent( event );
769
770   event = Dali::Integration::TouchEvent();
771   event.AddPoint( GetPointLeave() );
772   application.ProcessEvent( event );
773
774   event = Dali::Integration::TouchEvent();
775   event.AddPoint( GetPointUpOutside() );
776   application.ProcessEvent( event );
777
778   DALI_TEST_CHECK( !gIsCalledButtonCallback );
779   DALI_TEST_CHECK( !clickedSignal );
780
781   // Test4. Touch point down outside and up inside the button.
782
783   gIsCalledButtonCallback = false;
784   clickedSignal = false;
785   event = Dali::Integration::TouchEvent();
786   event.AddPoint( GetPointDownOutside() );
787   application.ProcessEvent( event );
788
789   event = Dali::Integration::TouchEvent();
790   event.AddPoint( GetPointEnter() );
791   application.ProcessEvent( event );
792
793   event = Dali::Integration::TouchEvent();
794   event.AddPoint( GetPointUpInside() );
795   application.ProcessEvent( event );
796
797   DALI_TEST_CHECK( !gIsCalledButtonCallback );
798   DALI_TEST_CHECK( !clickedSignal );
799   END_TEST;
800 }
801
802 int UtcDaliButtonStateChangedSignalP(void)
803 {
804   ToolkitTestApplication application;
805   tet_infoline(" UtcDaliButtonStateChangedSignalP");
806
807   Button button = PushButton::New();
808
809   button.SetProperty( Button::Property::TOGGLABLE, true);
810
811   Stage::GetCurrent().Add( button );
812
813   application.SendNotification();
814   application.Render();
815
816   // connect to its signal
817   button.StateChangedSignal().Connect( &ButtonCallback );
818   bool stateChangedSignal = false;
819   ConnectionTracker* testTracker = new ConnectionTracker();
820   button.ConnectSignal( testTracker, "stateChanged",   CallbackFunctor(&stateChangedSignal) );
821
822   gIsCalledButtonCallback = false;
823   button.SetProperty( Button::Property::SELECTED, true);
824
825   DALI_TEST_CHECK( gIsCalledButtonCallback );
826   DALI_TEST_CHECK( stateChangedSignal );
827
828   gIsCalledButtonCallback = false;
829   stateChangedSignal = false;
830
831   button.SetProperty( Button::Property::SELECTED, false);
832   DALI_TEST_CHECK( gIsCalledButtonCallback );
833   DALI_TEST_CHECK( stateChangedSignal );
834   END_TEST;
835 }
836
837 int UtcDaliButtonSetProperty(void)
838 {
839   tet_infoline("UtcDaliButtonSetProperty: ");
840   ToolkitTestApplication application;
841
842   PushButton pushButton = PushButton::New();
843
844   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
845
846   DALI_TEST_EQUALS( pushButton.GetProperty<bool>( pushButton.GetPropertyIndex("disabled")), false, TEST_LOCATION );
847
848   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
849   DALI_TEST_EQUALS( pushButton.GetProperty<bool>( pushButton.GetPropertyIndex("disabled")), true, TEST_LOCATION );
850
851   END_TEST;
852 }
853
854 // Deprecated API Tests
855
856 int UtcDaliButtonSetDisabledP(void)
857 {
858   ToolkitTestApplication application;
859
860   Button button = PushButton::New();
861
862   button.SetDisabled( true );
863
864   DALI_TEST_CHECK( button.IsDisabled() );
865
866   button.SetDisabled( false );
867
868   DALI_TEST_CHECK( !button.IsDisabled() );
869
870   button.SetDisabled( true );
871
872   DALI_TEST_CHECK( button.IsDisabled() );
873
874   button.SetDisabled( false );
875
876   DALI_TEST_CHECK( !button.IsDisabled() );
877   END_TEST;
878 }
879
880 int UtcDaliButtonSetAutoRepeatingP(void)
881 {
882   ToolkitTestApplication application;
883
884   Button button = PushButton::New();
885
886   button.SetAutoRepeating( true );
887
888   DALI_TEST_CHECK( button.IsAutoRepeating() );
889
890   button.SetAutoRepeating( false );
891
892   DALI_TEST_CHECK( !button.IsAutoRepeating() );
893
894   button.SetAutoRepeating( true );
895
896   DALI_TEST_CHECK( button.IsAutoRepeating() );
897
898   button.SetAutoRepeating( false );
899
900   DALI_TEST_CHECK( !button.IsAutoRepeating() );
901   END_TEST;
902 }
903
904 int UtcDaliButtonSetInitialAutoRepeatingDelayP(void)
905 {
906   ToolkitTestApplication application;
907
908   Button button = PushButton::New();
909
910   button.SetInitialAutoRepeatingDelay( 0.5f );
911
912   DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
913
914   button.SetInitialAutoRepeatingDelay( 0.2f );
915
916   DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
917   END_TEST;
918 }
919
920 int UtcDaliButtonSetNextAutoRepeatingDelayP(void)
921 {
922   ToolkitTestApplication application;
923
924   Button button = PushButton::New();
925
926   button.SetNextAutoRepeatingDelay( 0.5f );
927
928   DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
929
930   button.SetProperty( Button::Property::NEXT_AUTO_REPEATING_DELAY, 0.2f );
931
932   DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
933   END_TEST;
934 }
935
936 int UtcDaliButtonSetTogglableButtonP(void)
937 {
938   ToolkitTestApplication application;
939
940   Button button = PushButton::New();
941
942   button.SetTogglableButton( true );
943
944   DALI_TEST_CHECK( button.IsTogglableButton() );
945
946   button.SetTogglableButton( false );
947
948   DALI_TEST_CHECK( !button.IsTogglableButton() );
949   END_TEST;
950 }
951
952 int UtcDaliButtonSetSelectedP(void)
953 {
954   ToolkitTestApplication application;
955
956   Button button = PushButton::New();
957   button.SetTogglableButton( true );
958
959   button.SetSelected( true );
960
961   DALI_TEST_CHECK( button.IsSelected() );
962
963   button.SetSelected( false );
964
965   DALI_TEST_CHECK( !button.IsSelected() );
966   END_TEST;
967 }
968
969 int UtcDaliButtonEventConsumption(void)
970 {
971   /**
972    *  [ Parent ]
973    *  [ Child  ]
974    *
975    *  Child parented and positioned under parent.
976    *  Touch up and down performed on child.
977    *  Should only trigger signal on child.
978    */
979
980   ToolkitTestApplication application;
981
982   Button parentButton = PushButton::New();
983   parentButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
984   parentButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
985   parentButton.SetSize( 20, 20 );
986   Stage::GetCurrent().Add( parentButton );
987
988   Button childButton = PushButton::New();
989   childButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
990   childButton.SetParentOrigin( ParentOrigin::BOTTOM_LEFT );
991   childButton.SetSize( 20, 20 );
992   parentButton.Add( childButton );
993
994   // Reset signal flags
995   gIsCalledChildButtonCallback = false;
996   gIsCalledButtonCallback = false;
997
998   parentButton.ClickedSignal().Connect( &ButtonCallback );
999   childButton.ClickedSignal().Connect( &ChildButtonCallback );
1000
1001   // Peform a button click at coordinates (10,30) which is the child.
1002   Dali::Integration::TouchEvent event;
1003   event = Dali::Integration::TouchEvent();
1004   Dali::Integration::Point point;
1005   point.SetState( PointState::DOWN );
1006   point.SetScreenPosition( Vector2( 10, 30 ) );
1007   event.AddPoint( point );
1008   // flush the queue and render once
1009   application.SendNotification();
1010   application.Render();
1011   application.ProcessEvent( event );
1012
1013   event = Dali::Integration::TouchEvent();
1014   point.SetState( PointState::UP );
1015   point.SetScreenPosition( Vector2( 10, 30 ) );
1016   event.AddPoint( point );
1017   // flush the queue and render once
1018   application.SendNotification();
1019   application.Render();
1020   application.ProcessEvent( event );
1021
1022   DALI_TEST_EQUALS( gIsCalledChildButtonCallback, true, TEST_LOCATION );
1023   DALI_TEST_EQUALS( ! gIsCalledButtonCallback, true, TEST_LOCATION );
1024
1025   END_TEST;
1026 }
1027
1028 int UtcDaliButtonRelease(void)
1029 {
1030   /**
1031    * Down event followed by interrupted event should signal Release.
1032    */
1033
1034   ToolkitTestApplication application;
1035
1036   Button parentButton = PushButton::New();
1037   parentButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
1038   parentButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
1039   parentButton.SetSize( 20, 20 );
1040   Stage::GetCurrent().Add( parentButton );
1041   parentButton.ReleasedSignal().Connect( &ButtonCallback );
1042
1043   // Reset signal flags
1044   gIsCalledButtonCallback = false;
1045
1046   // Peform a button down and then button interrupted at coordinates (10,10).
1047   Dali::Integration::TouchEvent event;
1048   event = Dali::Integration::TouchEvent();
1049   Dali::Integration::Point point;
1050   point.SetState( PointState::DOWN );
1051   point.SetScreenPosition( Vector2( 10, 10 ) );
1052   event.AddPoint( point );
1053   // flush the queue and render once
1054   application.SendNotification();
1055   application.Render();
1056   application.ProcessEvent( event );
1057
1058   event = Dali::Integration::TouchEvent();
1059   point.SetState( PointState::INTERRUPTED );
1060   event.AddPoint( point );
1061   // flush the queue and render once
1062   application.SendNotification();
1063   application.Render();
1064   application.ProcessEvent( event );
1065
1066   DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
1067
1068   END_TEST;
1069 }
1070
1071 int UtcDaliButtonMultiTouch(void)
1072 {
1073   /**
1074    * Down event followed by a multi touch point event should signal Release.
1075    */
1076
1077   ToolkitTestApplication application;
1078
1079   Button button = PushButton::New();
1080   button.SetProperty( Button::Property::TOGGLABLE, true);
1081
1082   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
1083   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
1084   button.SetSize( 20, 20 );
1085   Stage::GetCurrent().Add( button );
1086   button.ReleasedSignal().Connect( &ButtonCallback );
1087
1088   // Reset signal flags
1089   gIsCalledButtonCallback = false;
1090
1091   // Peform a button down and then button interrupted at coordinates (10,10).
1092   Dali::Integration::TouchEvent downEvent;
1093   downEvent = Dali::Integration::TouchEvent();
1094   Dali::Integration::Point point;
1095
1096   // Add Press button
1097   point.SetState( PointState::DOWN );
1098   point.SetScreenPosition( Vector2( 15, 15 ) );
1099   downEvent.AddPoint( point );
1100   // flush the queue and render once
1101   application.SendNotification();
1102   application.Render();
1103   application.ProcessEvent( downEvent );
1104
1105   // Release button
1106   Dali::Integration::TouchEvent upEvent;
1107   upEvent = Dali::Integration::TouchEvent();
1108   point.SetState( PointState::UP );
1109   point.SetScreenPosition( Vector2( 15, 15 ) );
1110   upEvent.AddPoint( point );
1111   // flush the queue and render once
1112   application.SendNotification();
1113   application.Render();
1114   application.ProcessEvent( upEvent );
1115
1116   tet_infoline("Button should now be selected\n");
1117   bool isSelected = button.GetProperty<bool>( Button::Property::SELECTED ) ;
1118   DALI_TEST_EQUALS( isSelected, true, TEST_LOCATION );
1119
1120   // Add first point
1121   Dali::Integration::TouchEvent multiEvent;
1122   multiEvent = Dali::Integration::TouchEvent();
1123   point.SetState( PointState::DOWN );
1124   point.SetScreenPosition( Vector2( 10, 10 ) );
1125   multiEvent.AddPoint( point );
1126
1127   // Add second point
1128   point.SetState( PointState::DOWN );
1129   point.SetScreenPosition( Vector2( 15, 15 ) );
1130   multiEvent.AddPoint( point );
1131
1132   tet_infoline("Before a multi touch event\n");
1133
1134   // flush the queue and render once
1135   application.SendNotification();
1136   application.Render();
1137   application.ProcessEvent( multiEvent );
1138
1139   DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
1140
1141   END_TEST;
1142 }