2 * Copyright (c) 2019 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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"
27 #include <dali-toolkit/dali-toolkit.h>
28 #include <dali/integration-api/events/touch-event-integ.h>
30 #include <dali-toolkit/devel-api/controls/buttons/button-devel.h>
33 using namespace Toolkit;
36 void utc_dali_toolkit_button_startup(void)
38 test_return_value = TET_UNDEF;
41 void utc_dali_toolkit_button_cleanup(void)
43 test_return_value = TET_PASS;
48 static bool gIsCalledButtonCallback = false;
49 static bool gIsCalledChildButtonCallback = false;
51 static bool ButtonCallback( Button button )
53 gIsCalledButtonCallback = true;
57 static bool ChildButtonCallback( Button button )
59 gIsCalledChildButtonCallback = true;
63 static std::string GetButtonText( Button button )
65 Property::Value value = button.GetProperty( Toolkit::Button::Property::LABEL );
67 Property::Map *labelProperty = value.GetMap();
69 std::string textLabel;
73 Property::Value* value = labelProperty->Find( Toolkit::TextVisual::Property::TEXT );
74 value->Get( textLabel );
80 struct CallbackFunctor
82 CallbackFunctor(bool* callbackFlag)
83 : mCallbackFlag( callbackFlag )
89 *mCallbackFlag = true;
94 Dali::Integration::Point GetPointDownInside()
96 Dali::Integration::Point point;
97 point.SetState( PointState::DOWN );
98 point.SetScreenPosition( Vector2( 240, 400 ) );
102 Dali::Integration::Point GetPointUpInside()
104 Dali::Integration::Point point;
105 point.SetState( PointState::UP );
106 point.SetScreenPosition( Vector2( 240, 400 ) );
110 Dali::Integration::Point GetPointLeave()
112 Dali::Integration::Point point;
113 point.SetState( PointState::LEAVE );
114 point.SetScreenPosition( Vector2( 240, 400 ) );
118 Dali::Integration::Point GetPointEnter()
120 Dali::Integration::Point point;
121 point.SetState( PointState::MOTION );
122 point.SetScreenPosition( Vector2( 240, 400 ) );
126 Dali::Integration::Point GetPointDownOutside()
128 Dali::Integration::Point point;
129 point.SetState( PointState::DOWN );
130 point.SetScreenPosition( Vector2( 10, 10 ) );
134 Dali::Integration::Point GetPointUpOutside()
136 Dali::Integration::Point point;
137 point.SetState( PointState::UP );
138 point.SetScreenPosition( Vector2( 10, 10 ) );
142 static float ANIMATION_TIME( 0.5f );
146 int UtcDaliButtonConstructorP(void)
148 TestApplication application;
152 DALI_TEST_CHECK( !button );
156 int UtcDaliButtonCopyConstructorP(void)
158 TestApplication application;
160 // Initialize an object, ref count == 1
161 Button button = PushButton::New();
163 Button copy( button );
164 DALI_TEST_CHECK( copy );
168 int UtcDaliButtonAssignmentOperatorP(void)
170 TestApplication application;
172 Button button = PushButton::New();
174 Button copy( button );
175 DALI_TEST_CHECK( copy );
177 DALI_TEST_CHECK( button == copy );
181 int UtcDaliButtonDownCastP(void)
183 TestApplication application;
185 Button button = PushButton::New();
187 BaseHandle object(button);
189 Button button2 = Button::DownCast( object );
190 DALI_TEST_CHECK(button2);
192 Button button3 = DownCast< Button >(object);
193 DALI_TEST_CHECK(button3);
197 int UtcDaliButtonDownCastN(void)
199 TestApplication application;
201 BaseHandle unInitializedObject;
203 Button button1 = Button::DownCast( unInitializedObject );
204 DALI_TEST_CHECK( !button1 );
206 Button button2 = DownCast< Button >( unInitializedObject );
207 DALI_TEST_CHECK( !button2 );
211 int UtcDaliButtonDisabledPropertyP(void)
213 ToolkitTestApplication application;
215 Button button = PushButton::New();
218 button.SetProperty( button.GetPropertyIndex("disabled"), true );
220 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), true, TEST_LOCATION );
222 button.SetProperty( button.GetPropertyIndex("disabled"), false );
224 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), false, TEST_LOCATION );
226 button.SetProperty( button.GetPropertyIndex("disabled"), true );
228 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), true, TEST_LOCATION );
230 button.SetProperty( button.GetPropertyIndex("disabled"), false );
232 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), false, TEST_LOCATION );
237 int UtcDaliButtonSetDisabledWithDifferentStates01P(void)
239 ToolkitTestApplication application;
241 tet_infoline("UtcDaliButtonSetDisabledWithDifferentStates01P\n");
243 Button button = PushButton::New();
245 bool SELECTED = true;
247 button.SetProperty( Button::Property::TOGGLABLE, true);
248 button.SetProperty( Button::Property::SELECTED, SELECTED );
250 button.SetProperty( Button::Property::DISABLED, true);
252 tet_infoline("Set button to SELECTED = false whilst disabled, should not change to false\n");
253 button.SetProperty( Button::Property::SELECTED, !SELECTED );
255 bool isSelected = button.GetProperty<bool>( Button::Property::SELECTED ) ;
257 DALI_TEST_EQUALS( isSelected, SELECTED , TEST_LOCATION );
262 int UtcDaliButtonSetDisabledWithDifferentStates02P(void)
264 ToolkitTestApplication application;
266 tet_infoline("UtcDaliButtonSetDisabledWithDifferentStates02\n");
268 Button button = PushButton::New();
270 bool SELECTED = true;
272 button.SetProperty( Button::Property::TOGGLABLE, true );
273 button.SetProperty( Button::Property::SELECTED, SELECTED );
274 button.SetProperty( Button::Property::DISABLED, true );
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");
280 button.SetProperty( Button::Property::DISABLED, false );
281 button.SetProperty( Button::Property::SELECTED, !SELECTED );
283 isSelected = button.GetProperty<bool>( Button::Property::SELECTED );
284 DALI_TEST_EQUALS( isSelected, !SELECTED , TEST_LOCATION );
289 int UtcDaliButtonPropertyGetLabelAlignment(void)
291 ToolkitTestApplication application;
292 tet_infoline(" UtcDaliPushButtonPropertyGetLabelAlignment\n");
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 );
301 int UtcDaliButtonIsDisabledP(void)
303 ToolkitTestApplication application;
305 Button button = PushButton::New();
307 button.SetDisabled( true );
309 DALI_TEST_CHECK( button.IsDisabled() );
311 button.SetDisabled( false );
313 DALI_TEST_CHECK( !button.IsDisabled() );
317 int UtcDaliButtonAutoRepeatingPropertyP(void)
319 ToolkitTestApplication application;
321 Button button = PushButton::New();
323 button.SetProperty( button.GetPropertyIndex("autoRepeating"), true );
325 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION );
327 button.SetProperty( button.GetPropertyIndex("autoRepeating"), false );
329 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), false, TEST_LOCATION );
331 button.SetProperty( button.GetPropertyIndex("autoRepeating"), true );
333 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION );
335 button.SetAutoRepeating( false );
337 DALI_TEST_CHECK( !button.IsAutoRepeating() );
341 int UtcDaliButtonIsAutoRepeatingP(void)
343 ToolkitTestApplication application;
345 Button button = PushButton::New();
347 button.SetAutoRepeating( true );
349 DALI_TEST_CHECK( button.IsAutoRepeating() );
351 button.SetAutoRepeating( false );
353 DALI_TEST_CHECK( !button.IsAutoRepeating() );
357 int UtcDaliButtonAutoRepeatingP(void)
359 ToolkitTestApplication application;
360 tet_infoline(" UtcDaliButtonPressedSignalP Setup Autorepeating and check multiple clicked signals received\n");
362 const float AUTO_REPEATING_DELAY = 0.15f;
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 );
371 application.SendNotification();
372 application.Render();
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) );
385 Dali::Integration::TouchEvent event;
387 // Touch point down and up inside the button.
389 gIsCalledButtonCallback = false;
390 event = Dali::Integration::TouchEvent();
391 event.AddPoint( GetPointDownInside() );
392 application.ProcessEvent( event );
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");
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");
405 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
407 gIsCalledButtonCallback = false;
408 event = Dali::Integration::TouchEvent();
409 event.AddPoint( GetPointUpInside() );
410 application.ProcessEvent( event );
412 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
417 int UtcDaliButtonInitialAutoRepeatingDelayPropertyP(void)
419 ToolkitTestApplication application;
421 Button button = PushButton::New();
423 button.SetProperty( button.GetPropertyIndex("initialAutoRepeatingDelay"), 0.5f );
425 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("initialAutoRepeatingDelay")), 0.5f, TEST_LOCATION );
427 button.SetProperty( button.GetPropertyIndex("initialAutoRepeatingDelay"), 0.2f );
429 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("initialAutoRepeatingDelay")), 0.2f, TEST_LOCATION );
434 int UtcDaliButtonNextAutoRepeatingDelayPropertyP(void)
436 ToolkitTestApplication application;
438 Button button = PushButton::New();
440 button.SetProperty( button.GetPropertyIndex("nextAutoRepeatingDelay"), 0.5f );
442 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("nextAutoRepeatingDelay")), 0.5f, TEST_LOCATION );
444 button.SetProperty( button.GetPropertyIndex("nextAutoRepeatingDelay"), 0.2f );
446 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("nextAutoRepeatingDelay")), 0.2f, TEST_LOCATION );
450 int UtcDaliButtonTogglableButtonPropertyP(void)
452 ToolkitTestApplication application;
454 Button button = PushButton::New();
456 button.SetProperty( button.GetPropertyIndex("togglable"), true );
458 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("togglable")), true, TEST_LOCATION );
460 button.SetProperty( button.GetPropertyIndex("togglable"), false );
462 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("togglable")), false, TEST_LOCATION );
466 int UtcDaliButtonSelectedPropertyP(void)
468 ToolkitTestApplication application;
470 Button button = PushButton::New();
471 button.SetProperty( button.GetPropertyIndex("togglable"), true );
473 button.SetProperty( button.GetPropertyIndex("selected"), true );
475 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("selected")), true, TEST_LOCATION );
477 button.SetProperty( button.GetPropertyIndex("selected"), false );
479 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("selected")), false, TEST_LOCATION );
483 int UtcDaliButtonSetAnimationTimeP(void)
485 ToolkitTestApplication application;
486 tet_infoline(" UtcDaliButtonSetAnimationTimeP");
488 Button button = PushButton::New();
490 button.SetAnimationTime( ANIMATION_TIME );
492 DALI_TEST_EQUALS( button.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
496 int UtcDaliButtonSetLabelStringWithPropertyMapP(void)
498 ToolkitTestApplication application;
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")
507 DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
511 int UtcDaliButtonSetLabelStringWithPropertyMapStringsP(void)
513 ToolkitTestApplication application;
515 Button button = PushButton::New();
517 tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Setting Button text using String then replacing with Enum then string");
519 Property::Map textVisualMapInitial;
520 textVisualMapInitial["visualType"] = "TEXT";
521 textVisualMapInitial["pointSize"] = 15.0f;
522 textVisualMapInitial["text"] = "button label initial";
524 button.SetProperty( Button::Property::LABEL, textVisualMapInitial );
526 DALI_TEST_EQUALS( GetButtonText( button ), "button label initial", TEST_LOCATION );
528 tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Intermediate part of test");
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 );
535 button.SetProperty( Button::Property::LABEL, propertyMap );
537 DALI_TEST_EQUALS( GetButtonText( button ), "error if this is the final text", TEST_LOCATION );
539 tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Final part of test");
541 Property::Map textVisualMap;
542 textVisualMap["visualType"] = "TEXT";
543 textVisualMap["pointSize"] = 15.0f;
544 textVisualMap["text"] = "Button Label";
546 button.SetProperty( Toolkit::Button::Property::LABEL, textVisualMap );
548 DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
552 int UtcDaliButtonSetLabelWithStringP(void)
554 ToolkitTestApplication application;
556 Button button = PushButton::New();
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 )
564 button.SetProperty( Toolkit::Button::Property::LABEL, "Button Label" );
566 DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
570 int UtcDaliButtonSetLabelPropertyP(void)
572 ToolkitTestApplication application;
574 tet_infoline(" UtcDaliButtonSetLabelPropertyP Set text label and then set again with new text");
577 const std::string TEST_LABEL1 = "test label one";
578 const std::string TEST_LABEL2 = "test label two";
580 Button button = PushButton::New();
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 )
588 DALI_TEST_EQUALS( GetButtonText( button ), TEST_LABEL1, TEST_LOCATION );
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 );
597 DALI_TEST_EQUALS( GetButtonText( button ), TEST_LABEL2, TEST_LOCATION );
602 int UtcDaliButtonPressedSignalP(void)
604 ToolkitTestApplication application;
605 tet_infoline(" UtcDaliButtonPressedSignalP");
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 );
613 Stage::GetCurrent().Add( button );
615 application.SendNotification();
616 application.Render();
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) );
627 Dali::Integration::TouchEvent event;
629 // Test1. Touch point down and up inside the button.
631 gIsCalledButtonCallback = false;
632 event = Dali::Integration::TouchEvent();
633 event.AddPoint( GetPointDownInside() );
634 application.ProcessEvent( event );
636 DALI_TEST_CHECK( gIsCalledButtonCallback );
637 DALI_TEST_CHECK( pressedSignal );
639 gIsCalledButtonCallback = false;
640 event = Dali::Integration::TouchEvent();
641 event.AddPoint( GetPointUpInside() );
642 application.ProcessEvent( event );
644 DALI_TEST_CHECK( gIsCalledButtonCallback );
645 DALI_TEST_CHECK( releasedSignal );
647 // Test2. Touch point down and up outside the button.
649 pressedSignal = false;
650 releasedSignal = false;
651 gIsCalledButtonCallback = false;
652 event = Dali::Integration::TouchEvent();
653 event.AddPoint( GetPointDownOutside() );
654 application.ProcessEvent( event );
656 DALI_TEST_CHECK( !gIsCalledButtonCallback );
657 DALI_TEST_CHECK( !pressedSignal );
659 gIsCalledButtonCallback = false;
660 event = Dali::Integration::TouchEvent();
661 event.AddPoint( GetPointUpOutside() );
662 application.ProcessEvent( event );
664 DALI_TEST_CHECK( !gIsCalledButtonCallback );
665 DALI_TEST_CHECK( !releasedSignal );
667 // Test3. Touch point down inside and up outside the button.
669 gIsCalledButtonCallback = false;
670 event = Dali::Integration::TouchEvent();
671 event.AddPoint( GetPointDownInside() );
672 application.ProcessEvent( event );
674 DALI_TEST_CHECK( gIsCalledButtonCallback );
676 gIsCalledButtonCallback = false;
677 event = Dali::Integration::TouchEvent();
678 event.AddPoint( GetPointLeave() );
679 application.ProcessEvent( event );
681 event = Dali::Integration::TouchEvent();
682 event.AddPoint( GetPointUpOutside() );
683 application.ProcessEvent( event );
685 DALI_TEST_CHECK( gIsCalledButtonCallback );
687 // Test4. Touch point down outside and up inside the button.
689 gIsCalledButtonCallback = false;
690 event = Dali::Integration::TouchEvent();
691 event.AddPoint( GetPointDownOutside() );
692 application.ProcessEvent( event );
694 DALI_TEST_CHECK( !gIsCalledButtonCallback );
696 gIsCalledButtonCallback = false;
697 event = Dali::Integration::TouchEvent();
698 event.AddPoint( GetPointEnter() );
699 application.ProcessEvent( event );
701 event = Dali::Integration::TouchEvent();
702 event.AddPoint( GetPointUpInside() );
703 application.ProcessEvent( event );
705 DALI_TEST_CHECK( !gIsCalledButtonCallback );
709 int UtcDaliButtonClickedSignalP(void)
711 ToolkitTestApplication application;
712 tet_infoline(" UtcDaliButtonClickedSignalP");
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 );
720 Stage::GetCurrent().Add( button );
722 application.SendNotification();
723 application.Render();
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) );
731 Dali::Integration::TouchEvent event;
733 // Test1. Touch point down and up inside the button.
735 gIsCalledButtonCallback = false;
736 event = Dali::Integration::TouchEvent();
737 event.AddPoint( GetPointDownInside() );
738 application.ProcessEvent( event );
740 event = Dali::Integration::TouchEvent();
741 event.AddPoint( GetPointUpInside() );
742 application.ProcessEvent( event );
744 DALI_TEST_CHECK( gIsCalledButtonCallback );
745 DALI_TEST_CHECK( clickedSignal );
747 // Test2. Touch point down and up outside the button.
749 gIsCalledButtonCallback = false;
750 clickedSignal = false;
751 event = Dali::Integration::TouchEvent();
752 event.AddPoint( GetPointDownOutside() );
753 application.ProcessEvent( event );
755 event = Dali::Integration::TouchEvent();
756 event.AddPoint( GetPointUpOutside() );
757 application.ProcessEvent( event );
759 DALI_TEST_CHECK( !gIsCalledButtonCallback );
760 DALI_TEST_CHECK( !clickedSignal );
762 // Test3. Touch point down inside and up outside the button.
764 gIsCalledButtonCallback = false;
765 clickedSignal = false;
766 event = Dali::Integration::TouchEvent();
767 event.AddPoint( GetPointDownInside() );
768 application.ProcessEvent( event );
770 event = Dali::Integration::TouchEvent();
771 event.AddPoint( GetPointLeave() );
772 application.ProcessEvent( event );
774 event = Dali::Integration::TouchEvent();
775 event.AddPoint( GetPointUpOutside() );
776 application.ProcessEvent( event );
778 DALI_TEST_CHECK( !gIsCalledButtonCallback );
779 DALI_TEST_CHECK( !clickedSignal );
781 // Test4. Touch point down outside and up inside the button.
783 gIsCalledButtonCallback = false;
784 clickedSignal = false;
785 event = Dali::Integration::TouchEvent();
786 event.AddPoint( GetPointDownOutside() );
787 application.ProcessEvent( event );
789 event = Dali::Integration::TouchEvent();
790 event.AddPoint( GetPointEnter() );
791 application.ProcessEvent( event );
793 event = Dali::Integration::TouchEvent();
794 event.AddPoint( GetPointUpInside() );
795 application.ProcessEvent( event );
797 DALI_TEST_CHECK( !gIsCalledButtonCallback );
798 DALI_TEST_CHECK( !clickedSignal );
802 int UtcDaliButtonStateChangedSignalP(void)
804 ToolkitTestApplication application;
805 tet_infoline(" UtcDaliButtonStateChangedSignalP");
807 Button button = PushButton::New();
809 button.SetProperty( Button::Property::TOGGLABLE, true);
811 Stage::GetCurrent().Add( button );
813 application.SendNotification();
814 application.Render();
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) );
822 gIsCalledButtonCallback = false;
823 button.SetProperty( Button::Property::SELECTED, true);
825 DALI_TEST_CHECK( gIsCalledButtonCallback );
826 DALI_TEST_CHECK( stateChangedSignal );
828 gIsCalledButtonCallback = false;
829 stateChangedSignal = false;
831 button.SetProperty( Button::Property::SELECTED, false);
832 DALI_TEST_CHECK( gIsCalledButtonCallback );
833 DALI_TEST_CHECK( stateChangedSignal );
837 int UtcDaliButtonSetProperty(void)
839 tet_infoline("UtcDaliButtonSetProperty: ");
840 ToolkitTestApplication application;
842 PushButton pushButton = PushButton::New();
844 pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
846 DALI_TEST_EQUALS( pushButton.GetProperty<bool>( pushButton.GetPropertyIndex("disabled")), false, TEST_LOCATION );
848 pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
849 DALI_TEST_EQUALS( pushButton.GetProperty<bool>( pushButton.GetPropertyIndex("disabled")), true, TEST_LOCATION );
854 // Deprecated API Tests
856 int UtcDaliButtonSetDisabledP(void)
858 ToolkitTestApplication application;
860 Button button = PushButton::New();
862 button.SetDisabled( true );
864 DALI_TEST_CHECK( button.IsDisabled() );
866 button.SetDisabled( false );
868 DALI_TEST_CHECK( !button.IsDisabled() );
870 button.SetDisabled( true );
872 DALI_TEST_CHECK( button.IsDisabled() );
874 button.SetDisabled( false );
876 DALI_TEST_CHECK( !button.IsDisabled() );
880 int UtcDaliButtonSetAutoRepeatingP(void)
882 ToolkitTestApplication application;
884 Button button = PushButton::New();
886 button.SetAutoRepeating( true );
888 DALI_TEST_CHECK( button.IsAutoRepeating() );
890 button.SetAutoRepeating( false );
892 DALI_TEST_CHECK( !button.IsAutoRepeating() );
894 button.SetAutoRepeating( true );
896 DALI_TEST_CHECK( button.IsAutoRepeating() );
898 button.SetAutoRepeating( false );
900 DALI_TEST_CHECK( !button.IsAutoRepeating() );
904 int UtcDaliButtonSetInitialAutoRepeatingDelayP(void)
906 ToolkitTestApplication application;
908 Button button = PushButton::New();
910 button.SetInitialAutoRepeatingDelay( 0.5f );
912 DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
914 button.SetInitialAutoRepeatingDelay( 0.2f );
916 DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
920 int UtcDaliButtonSetNextAutoRepeatingDelayP(void)
922 ToolkitTestApplication application;
924 Button button = PushButton::New();
926 button.SetNextAutoRepeatingDelay( 0.5f );
928 DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
930 button.SetProperty( Button::Property::NEXT_AUTO_REPEATING_DELAY, 0.2f );
932 DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
936 int UtcDaliButtonSetTogglableButtonP(void)
938 ToolkitTestApplication application;
940 Button button = PushButton::New();
942 button.SetTogglableButton( true );
944 DALI_TEST_CHECK( button.IsTogglableButton() );
946 button.SetTogglableButton( false );
948 DALI_TEST_CHECK( !button.IsTogglableButton() );
952 int UtcDaliButtonSetSelectedP(void)
954 ToolkitTestApplication application;
956 Button button = PushButton::New();
957 button.SetTogglableButton( true );
959 button.SetSelected( true );
961 DALI_TEST_CHECK( button.IsSelected() );
963 button.SetSelected( false );
965 DALI_TEST_CHECK( !button.IsSelected() );
969 int UtcDaliButtonEventConsumption(void)
975 * Child parented and positioned under parent.
976 * Touch up and down performed on child.
977 * Should only trigger signal on child.
980 ToolkitTestApplication application;
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 );
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 );
994 // Reset signal flags
995 gIsCalledChildButtonCallback = false;
996 gIsCalledButtonCallback = false;
998 parentButton.ClickedSignal().Connect( &ButtonCallback );
999 childButton.ClickedSignal().Connect( &ChildButtonCallback );
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 );
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 );
1022 DALI_TEST_EQUALS( gIsCalledChildButtonCallback, true, TEST_LOCATION );
1023 DALI_TEST_EQUALS( ! gIsCalledButtonCallback, true, TEST_LOCATION );
1028 int UtcDaliButtonRelease(void)
1031 * Down event followed by interrupted event should signal Release.
1034 ToolkitTestApplication application;
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 );
1043 // Reset signal flags
1044 gIsCalledButtonCallback = false;
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 );
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 );
1066 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
1071 int UtcDaliButtonMultiTouch(void)
1074 * Down event followed by a multi touch point event should signal Release.
1077 ToolkitTestApplication application;
1079 Button button = PushButton::New();
1080 button.SetProperty( Button::Property::TOGGLABLE, true);
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 );
1088 // Reset signal flags
1089 gIsCalledButtonCallback = false;
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;
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 );
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 );
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 );
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 );
1128 point.SetState( PointState::DOWN );
1129 point.SetScreenPosition( Vector2( 15, 15 ) );
1130 multiEvent.AddPoint( point );
1132 tet_infoline("Before a multi touch event\n");
1134 // flush the queue and render once
1135 application.SendNotification();
1136 application.Render();
1137 application.ProcessEvent( multiEvent );
1139 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );