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