2 * Copyright (c) 2017 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 const int RENDER_FRAME_INTERVAL = 16;
53 static bool ButtonCallback( Button button )
55 gIsCalledButtonCallback = true;
59 static bool ChildButtonCallback( Button button )
61 gIsCalledChildButtonCallback = true;
65 static std::string GetButtonText( Button button )
67 Property::Value value = button.GetProperty( Toolkit::Button::Property::LABEL );
69 Property::Map *labelProperty = value.GetMap();
71 std::string textLabel;
75 Property::Value* value = labelProperty->Find( Toolkit::TextVisual::Property::TEXT );
76 value->Get( textLabel );
82 struct CallbackFunctor
84 CallbackFunctor(bool* callbackFlag)
85 : mCallbackFlag( callbackFlag )
91 *mCallbackFlag = true;
96 Dali::Integration::Point GetPointDownInside()
98 Dali::Integration::Point point;
99 point.SetState( PointState::DOWN );
100 point.SetScreenPosition( Vector2( 240, 400 ) );
104 Dali::Integration::Point GetPointUpInside()
106 Dali::Integration::Point point;
107 point.SetState( PointState::UP );
108 point.SetScreenPosition( Vector2( 240, 400 ) );
112 Dali::Integration::Point GetPointLeave()
114 Dali::Integration::Point point;
115 point.SetState( PointState::LEAVE );
116 point.SetScreenPosition( Vector2( 240, 400 ) );
120 Dali::Integration::Point GetPointEnter()
122 Dali::Integration::Point point;
123 point.SetState( PointState::MOTION );
124 point.SetScreenPosition( Vector2( 240, 400 ) );
128 Dali::Integration::Point GetPointDownOutside()
130 Dali::Integration::Point point;
131 point.SetState( PointState::DOWN );
132 point.SetScreenPosition( Vector2( 10, 10 ) );
136 Dali::Integration::Point GetPointUpOutside()
138 Dali::Integration::Point point;
139 point.SetState( PointState::UP );
140 point.SetScreenPosition( Vector2( 10, 10 ) );
144 static float ANIMATION_TIME( 0.5f );
148 int UtcDaliButtonConstructorP(void)
150 TestApplication application;
154 DALI_TEST_CHECK( !button );
158 int UtcDaliButtonCopyConstructorP(void)
160 TestApplication application;
162 // Initialize an object, ref count == 1
163 Button button = PushButton::New();
165 Button copy( button );
166 DALI_TEST_CHECK( copy );
170 int UtcDaliButtonAssignmentOperatorP(void)
172 TestApplication application;
174 Button button = PushButton::New();
176 Button copy( button );
177 DALI_TEST_CHECK( copy );
179 DALI_TEST_CHECK( button == copy );
183 int UtcDaliButtonDownCastP(void)
185 TestApplication application;
187 Button button = PushButton::New();
189 BaseHandle object(button);
191 Button button2 = Button::DownCast( object );
192 DALI_TEST_CHECK(button2);
194 Button button3 = DownCast< Button >(object);
195 DALI_TEST_CHECK(button3);
199 int UtcDaliButtonDownCastN(void)
201 TestApplication application;
203 BaseHandle unInitializedObject;
205 Button button1 = Button::DownCast( unInitializedObject );
206 DALI_TEST_CHECK( !button1 );
208 Button button2 = DownCast< Button >( unInitializedObject );
209 DALI_TEST_CHECK( !button2 );
213 int UtcDaliButtonDisabledPropertyP(void)
215 ToolkitTestApplication application;
217 Button button = PushButton::New();
220 button.SetProperty( button.GetPropertyIndex("disabled"), true );
222 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), true, TEST_LOCATION );
224 button.SetProperty( button.GetPropertyIndex("disabled"), false );
226 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), false, TEST_LOCATION );
228 button.SetProperty( button.GetPropertyIndex("disabled"), true );
230 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), true, TEST_LOCATION );
232 button.SetProperty( button.GetPropertyIndex("disabled"), false );
234 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("disabled")), false, TEST_LOCATION );
239 int UtcDaliButtonSetDisabledWithDifferentStates01P(void)
241 ToolkitTestApplication application;
243 tet_infoline("UtcDaliButtonSetDisabledWithDifferentStates01P\n");
245 Button button = PushButton::New();
247 bool SELECTED = true;
249 button.SetProperty( Button::Property::TOGGLABLE, true);
250 button.SetProperty( Button::Property::SELECTED, SELECTED );
252 button.SetProperty( Button::Property::DISABLED, true);
254 tet_infoline("Set button to SELECTED = false whilst disabled, should not change to false\n");
255 button.SetProperty( Button::Property::SELECTED, !SELECTED );
257 bool isSelected = button.GetProperty<bool>( Button::Property::SELECTED ) ;
259 DALI_TEST_EQUALS( isSelected, SELECTED , TEST_LOCATION );
264 int UtcDaliButtonSetDisabledWithDifferentStates02P(void)
266 ToolkitTestApplication application;
268 tet_infoline("UtcDaliButtonSetDisabledWithDifferentStates02\n");
270 Button button = PushButton::New();
272 bool SELECTED = true;
274 button.SetProperty( Button::Property::TOGGLABLE, true );
275 button.SetProperty( Button::Property::SELECTED, SELECTED );
276 button.SetProperty( Button::Property::DISABLED, true );
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");
282 button.SetProperty( Button::Property::DISABLED, false );
283 button.SetProperty( Button::Property::SELECTED, !SELECTED );
285 isSelected = button.GetProperty<bool>( Button::Property::SELECTED );
286 DALI_TEST_EQUALS( isSelected, !SELECTED , TEST_LOCATION );
291 int UtcDaliButtonPropertyGetLabelAlignment(void)
293 ToolkitTestApplication application;
294 tet_infoline(" UtcDaliPushButtonPropertyGetLabelAlignment\n");
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 );
303 int UtcDaliButtonIsDisabledP(void)
305 ToolkitTestApplication application;
307 Button button = PushButton::New();
309 button.SetDisabled( true );
311 DALI_TEST_CHECK( button.IsDisabled() );
313 button.SetDisabled( false );
315 DALI_TEST_CHECK( !button.IsDisabled() );
319 int UtcDaliButtonAutoRepeatingPropertyP(void)
321 ToolkitTestApplication application;
323 Button button = PushButton::New();
325 button.SetProperty( button.GetPropertyIndex("autoRepeating"), true );
327 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION );
329 button.SetProperty( button.GetPropertyIndex("autoRepeating"), false );
331 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), false, TEST_LOCATION );
333 button.SetProperty( button.GetPropertyIndex("autoRepeating"), true );
335 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("autoRepeating")), true, TEST_LOCATION );
337 button.SetAutoRepeating( false );
339 DALI_TEST_CHECK( !button.IsAutoRepeating() );
343 int UtcDaliButtonIsAutoRepeatingP(void)
345 ToolkitTestApplication application;
347 Button button = PushButton::New();
349 button.SetAutoRepeating( true );
351 DALI_TEST_CHECK( button.IsAutoRepeating() );
353 button.SetAutoRepeating( false );
355 DALI_TEST_CHECK( !button.IsAutoRepeating() );
359 int UtcDaliButtonAutoRepeatingP(void)
361 ToolkitTestApplication application;
362 tet_infoline(" UtcDaliButtonPressedSignalP Setup Autorepeating and check multiple clicked signals received\n");
364 const float AUTO_REPEATING_DELAY = 0.15f;
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 );
373 application.SendNotification();
374 application.Render();
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) );
387 Dali::Integration::TouchEvent event;
389 // Touch point down and up inside the button.
391 gIsCalledButtonCallback = false;
392 event = Dali::Integration::TouchEvent();
393 event.AddPoint( GetPointDownInside() );
394 application.ProcessEvent( event );
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");
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");
407 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
409 gIsCalledButtonCallback = false;
410 event = Dali::Integration::TouchEvent();
411 event.AddPoint( GetPointUpInside() );
412 application.ProcessEvent( event );
414 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
419 int UtcDaliButtonInitialAutoRepeatingDelayPropertyP(void)
421 ToolkitTestApplication application;
423 Button button = PushButton::New();
425 button.SetProperty( button.GetPropertyIndex("initialAutoRepeatingDelay"), 0.5f );
427 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("initialAutoRepeatingDelay")), 0.5f, TEST_LOCATION );
429 button.SetProperty( button.GetPropertyIndex("initialAutoRepeatingDelay"), 0.2f );
431 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("initialAutoRepeatingDelay")), 0.2f, TEST_LOCATION );
436 int UtcDaliButtonNextAutoRepeatingDelayPropertyP(void)
438 ToolkitTestApplication application;
440 Button button = PushButton::New();
442 button.SetProperty( button.GetPropertyIndex("nextAutoRepeatingDelay"), 0.5f );
444 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("nextAutoRepeatingDelay")), 0.5f, TEST_LOCATION );
446 button.SetProperty( button.GetPropertyIndex("nextAutoRepeatingDelay"), 0.2f );
448 DALI_TEST_EQUALS( button.GetProperty<float>( button.GetPropertyIndex("nextAutoRepeatingDelay")), 0.2f, TEST_LOCATION );
452 int UtcDaliButtonTogglableButtonPropertyP(void)
454 ToolkitTestApplication application;
456 Button button = PushButton::New();
458 button.SetProperty( button.GetPropertyIndex("togglable"), true );
460 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("togglable")), true, TEST_LOCATION );
462 button.SetProperty( button.GetPropertyIndex("togglable"), false );
464 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("togglable")), false, TEST_LOCATION );
468 int UtcDaliButtonSelectedPropertyP(void)
470 ToolkitTestApplication application;
472 Button button = PushButton::New();
473 button.SetProperty( button.GetPropertyIndex("togglable"), true );
475 button.SetProperty( button.GetPropertyIndex("selected"), true );
477 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("selected")), true, TEST_LOCATION );
479 button.SetProperty( button.GetPropertyIndex("selected"), false );
481 DALI_TEST_EQUALS( button.GetProperty<bool>( button.GetPropertyIndex("selected")), false, TEST_LOCATION );
485 int UtcDaliButtonSetAnimationTimeP(void)
487 ToolkitTestApplication application;
488 tet_infoline(" UtcDaliButtonSetAnimationTimeP");
490 Button button = PushButton::New();
492 button.SetAnimationTime( ANIMATION_TIME );
494 DALI_TEST_EQUALS( button.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
498 int UtcDaliButtonSetLabelStringWithPropertyMapP(void)
500 ToolkitTestApplication application;
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")
509 DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
513 int UtcDaliButtonSetLabelStringWithPropertyMapStringsP(void)
515 ToolkitTestApplication application;
517 Button button = PushButton::New();
519 tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Setting Button text using String then replacing with Enum then string");
521 Property::Map textVisualMapInitial;
522 textVisualMapInitial["visualType"] = "TEXT";
523 textVisualMapInitial["pointSize"] = 15.0f;
524 textVisualMapInitial["text"] = "button label initial";
526 button.SetProperty( Button::Property::LABEL, textVisualMapInitial );
528 DALI_TEST_EQUALS( GetButtonText( button ), "button label initial", TEST_LOCATION );
530 tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Intermediate part of test");
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 );
537 button.SetProperty( Button::Property::LABEL, propertyMap );
539 DALI_TEST_EQUALS( GetButtonText( button ), "error if this is the final text", TEST_LOCATION );
541 tet_infoline(" UtcDaliButtonSetLabelStringWithPropertyMapStringsP Final part of test");
543 Property::Map textVisualMap;
544 textVisualMap["visualType"] = "TEXT";
545 textVisualMap["pointSize"] = 15.0f;
546 textVisualMap["text"] = "Button Label";
548 button.SetProperty( Toolkit::Button::Property::LABEL, textVisualMap );
550 DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
554 int UtcDaliButtonSetLabelWithStringP(void)
556 ToolkitTestApplication application;
558 Button button = PushButton::New();
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 )
566 button.SetProperty( Toolkit::Button::Property::LABEL, "Button Label" );
568 DALI_TEST_EQUALS( GetButtonText( button ), "Button Label", TEST_LOCATION );
572 int UtcDaliButtonSetLabelPropertyP(void)
574 ToolkitTestApplication application;
576 tet_infoline(" UtcDaliButtonSetLabelPropertyP Set text label and then set again with new text");
579 const std::string TEST_LABEL1 = "test label one";
580 const std::string TEST_LABEL2 = "test label two";
582 Button button = PushButton::New();
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 )
590 DALI_TEST_EQUALS( GetButtonText( button ), TEST_LABEL1, TEST_LOCATION );
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 );
599 DALI_TEST_EQUALS( GetButtonText( button ), TEST_LABEL2, TEST_LOCATION );
604 int UtcDaliButtonPressedSignalP(void)
606 ToolkitTestApplication application;
607 tet_infoline(" UtcDaliButtonPressedSignalP");
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 );
615 Stage::GetCurrent().Add( button );
617 application.SendNotification();
618 application.Render();
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) );
629 Dali::Integration::TouchEvent event;
631 // Test1. Touch point down and up inside the button.
633 gIsCalledButtonCallback = false;
634 event = Dali::Integration::TouchEvent();
635 event.AddPoint( GetPointDownInside() );
636 application.ProcessEvent( event );
638 DALI_TEST_CHECK( gIsCalledButtonCallback );
639 DALI_TEST_CHECK( pressedSignal );
641 gIsCalledButtonCallback = false;
642 event = Dali::Integration::TouchEvent();
643 event.AddPoint( GetPointUpInside() );
644 application.ProcessEvent( event );
646 DALI_TEST_CHECK( gIsCalledButtonCallback );
647 DALI_TEST_CHECK( releasedSignal );
649 // Test2. Touch point down and up outside the button.
651 pressedSignal = false;
652 releasedSignal = false;
653 gIsCalledButtonCallback = false;
654 event = Dali::Integration::TouchEvent();
655 event.AddPoint( GetPointDownOutside() );
656 application.ProcessEvent( event );
658 DALI_TEST_CHECK( !gIsCalledButtonCallback );
659 DALI_TEST_CHECK( !pressedSignal );
661 gIsCalledButtonCallback = false;
662 event = Dali::Integration::TouchEvent();
663 event.AddPoint( GetPointUpOutside() );
664 application.ProcessEvent( event );
666 DALI_TEST_CHECK( !gIsCalledButtonCallback );
667 DALI_TEST_CHECK( !releasedSignal );
669 // Test3. Touch point down inside and up outside the button.
671 gIsCalledButtonCallback = false;
672 event = Dali::Integration::TouchEvent();
673 event.AddPoint( GetPointDownInside() );
674 application.ProcessEvent( event );
676 DALI_TEST_CHECK( gIsCalledButtonCallback );
678 gIsCalledButtonCallback = false;
679 event = Dali::Integration::TouchEvent();
680 event.AddPoint( GetPointLeave() );
681 application.ProcessEvent( event );
683 event = Dali::Integration::TouchEvent();
684 event.AddPoint( GetPointUpOutside() );
685 application.ProcessEvent( event );
687 DALI_TEST_CHECK( gIsCalledButtonCallback );
689 // Test4. Touch point down outside and up inside the button.
691 gIsCalledButtonCallback = false;
692 event = Dali::Integration::TouchEvent();
693 event.AddPoint( GetPointDownOutside() );
694 application.ProcessEvent( event );
696 DALI_TEST_CHECK( !gIsCalledButtonCallback );
698 gIsCalledButtonCallback = false;
699 event = Dali::Integration::TouchEvent();
700 event.AddPoint( GetPointEnter() );
701 application.ProcessEvent( event );
703 event = Dali::Integration::TouchEvent();
704 event.AddPoint( GetPointUpInside() );
705 application.ProcessEvent( event );
707 DALI_TEST_CHECK( !gIsCalledButtonCallback );
711 int UtcDaliButtonClickedSignalP(void)
713 ToolkitTestApplication application;
714 tet_infoline(" UtcDaliButtonClickedSignalP");
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 );
722 Stage::GetCurrent().Add( button );
724 application.SendNotification();
725 application.Render();
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) );
733 Dali::Integration::TouchEvent event;
735 // Test1. Touch point down and up inside the button.
737 gIsCalledButtonCallback = false;
738 event = Dali::Integration::TouchEvent();
739 event.AddPoint( GetPointDownInside() );
740 application.ProcessEvent( event );
742 event = Dali::Integration::TouchEvent();
743 event.AddPoint( GetPointUpInside() );
744 application.ProcessEvent( event );
746 DALI_TEST_CHECK( gIsCalledButtonCallback );
747 DALI_TEST_CHECK( clickedSignal );
749 // Test2. Touch point down and up outside the button.
751 gIsCalledButtonCallback = false;
752 clickedSignal = false;
753 event = Dali::Integration::TouchEvent();
754 event.AddPoint( GetPointDownOutside() );
755 application.ProcessEvent( event );
757 event = Dali::Integration::TouchEvent();
758 event.AddPoint( GetPointUpOutside() );
759 application.ProcessEvent( event );
761 DALI_TEST_CHECK( !gIsCalledButtonCallback );
762 DALI_TEST_CHECK( !clickedSignal );
764 // Test3. Touch point down inside and up outside the button.
766 gIsCalledButtonCallback = false;
767 clickedSignal = false;
768 event = Dali::Integration::TouchEvent();
769 event.AddPoint( GetPointDownInside() );
770 application.ProcessEvent( event );
772 event = Dali::Integration::TouchEvent();
773 event.AddPoint( GetPointLeave() );
774 application.ProcessEvent( event );
776 event = Dali::Integration::TouchEvent();
777 event.AddPoint( GetPointUpOutside() );
778 application.ProcessEvent( event );
780 DALI_TEST_CHECK( !gIsCalledButtonCallback );
781 DALI_TEST_CHECK( !clickedSignal );
783 // Test4. Touch point down outside and up inside the button.
785 gIsCalledButtonCallback = false;
786 clickedSignal = false;
787 event = Dali::Integration::TouchEvent();
788 event.AddPoint( GetPointDownOutside() );
789 application.ProcessEvent( event );
791 event = Dali::Integration::TouchEvent();
792 event.AddPoint( GetPointEnter() );
793 application.ProcessEvent( event );
795 event = Dali::Integration::TouchEvent();
796 event.AddPoint( GetPointUpInside() );
797 application.ProcessEvent( event );
799 DALI_TEST_CHECK( !gIsCalledButtonCallback );
800 DALI_TEST_CHECK( !clickedSignal );
804 int UtcDaliButtonStateChangedSignalP(void)
806 ToolkitTestApplication application;
807 tet_infoline(" UtcDaliButtonStateChangedSignalP");
809 Button button = PushButton::New();
811 button.SetProperty( Button::Property::TOGGLABLE, true);
813 Stage::GetCurrent().Add( button );
815 application.SendNotification();
816 application.Render();
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) );
824 gIsCalledButtonCallback = false;
825 button.SetProperty( Button::Property::SELECTED, true);
827 DALI_TEST_CHECK( gIsCalledButtonCallback );
828 DALI_TEST_CHECK( stateChangedSignal );
830 gIsCalledButtonCallback = false;
831 stateChangedSignal = false;
833 button.SetProperty( Button::Property::SELECTED, false);
834 DALI_TEST_CHECK( gIsCalledButtonCallback );
835 DALI_TEST_CHECK( stateChangedSignal );
839 int UtcDaliButtonSetProperty(void)
841 tet_infoline("UtcDaliButtonSetProperty: ");
842 ToolkitTestApplication application;
844 PushButton pushButton = PushButton::New();
846 pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
848 DALI_TEST_EQUALS( pushButton.GetProperty<bool>( pushButton.GetPropertyIndex("disabled")), false, TEST_LOCATION );
850 pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
851 DALI_TEST_EQUALS( pushButton.GetProperty<bool>( pushButton.GetPropertyIndex("disabled")), true, TEST_LOCATION );
856 // Deprecated API Tests
858 int UtcDaliButtonSetDisabledP(void)
860 ToolkitTestApplication application;
862 Button button = PushButton::New();
864 button.SetDisabled( true );
866 DALI_TEST_CHECK( button.IsDisabled() );
868 button.SetDisabled( false );
870 DALI_TEST_CHECK( !button.IsDisabled() );
872 button.SetDisabled( true );
874 DALI_TEST_CHECK( button.IsDisabled() );
876 button.SetDisabled( false );
878 DALI_TEST_CHECK( !button.IsDisabled() );
882 int UtcDaliButtonSetAutoRepeatingP(void)
884 ToolkitTestApplication application;
886 Button button = PushButton::New();
888 button.SetAutoRepeating( true );
890 DALI_TEST_CHECK( button.IsAutoRepeating() );
892 button.SetAutoRepeating( false );
894 DALI_TEST_CHECK( !button.IsAutoRepeating() );
896 button.SetAutoRepeating( true );
898 DALI_TEST_CHECK( button.IsAutoRepeating() );
900 button.SetAutoRepeating( false );
902 DALI_TEST_CHECK( !button.IsAutoRepeating() );
906 int UtcDaliButtonSetInitialAutoRepeatingDelayP(void)
908 ToolkitTestApplication application;
910 Button button = PushButton::New();
912 button.SetInitialAutoRepeatingDelay( 0.5f );
914 DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
916 button.SetInitialAutoRepeatingDelay( 0.2f );
918 DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
922 int UtcDaliButtonSetNextAutoRepeatingDelayP(void)
924 ToolkitTestApplication application;
926 Button button = PushButton::New();
928 button.SetNextAutoRepeatingDelay( 0.5f );
930 DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
932 button.SetProperty( Button::Property::NEXT_AUTO_REPEATING_DELAY, 0.2f );
934 DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
938 int UtcDaliButtonSetTogglableButtonP(void)
940 ToolkitTestApplication application;
942 Button button = PushButton::New();
944 button.SetTogglableButton( true );
946 DALI_TEST_CHECK( button.IsTogglableButton() );
948 button.SetTogglableButton( false );
950 DALI_TEST_CHECK( !button.IsTogglableButton() );
954 int UtcDaliButtonSetSelectedP(void)
956 ToolkitTestApplication application;
958 Button button = PushButton::New();
959 button.SetTogglableButton( true );
961 button.SetSelected( true );
963 DALI_TEST_CHECK( button.IsSelected() );
965 button.SetSelected( false );
967 DALI_TEST_CHECK( !button.IsSelected() );
971 int UtcDaliButtonEventConsumption(void)
977 * Child parented and positioned under parent.
978 * Touch up and down performed on child.
979 * Should only trigger signal on child.
982 ToolkitTestApplication application;
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 );
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 );
996 // Reset signal flags
997 gIsCalledChildButtonCallback = false;
998 gIsCalledButtonCallback = false;
1000 parentButton.ClickedSignal().Connect( &ButtonCallback );
1001 childButton.ClickedSignal().Connect( &ChildButtonCallback );
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 );
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 );
1024 DALI_TEST_EQUALS( gIsCalledChildButtonCallback, true, TEST_LOCATION );
1025 DALI_TEST_EQUALS( ! gIsCalledButtonCallback, true, TEST_LOCATION );
1030 int UtcDaliButtonRelease(void)
1033 * Down event followed by interrupted event should signal Release.
1036 ToolkitTestApplication application;
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 );
1045 // Reset signal flags
1046 gIsCalledButtonCallback = false;
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 );
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 );
1068 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );
1073 int UtcDaliButtonMultiTouch(void)
1076 * Down event followed by a multi touch point event should signal Release.
1079 ToolkitTestApplication application;
1081 Button button = PushButton::New();
1082 button.SetProperty( Button::Property::TOGGLABLE, true);
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 );
1090 // Reset signal flags
1091 gIsCalledButtonCallback = false;
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;
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 );
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 );
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 );
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 );
1130 point.SetState( PointState::DOWN );
1131 point.SetScreenPosition( Vector2( 15, 15 ) );
1132 multiEvent.AddPoint( point );
1134 tet_infoline("Before a multi touch event\n");
1136 // flush the queue and render once
1137 application.SendNotification();
1138 application.Render();
1139 application.ProcessEvent( multiEvent );
1141 DALI_TEST_EQUALS( gIsCalledButtonCallback, true, TEST_LOCATION );