2 * Copyright (c) 2014 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>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <dali/integration-api/events/touch-event-integ.h>
30 using namespace Toolkit;
33 void utc_dali_toolkit_button_startup(void)
35 test_return_value = TET_UNDEF;
38 void utc_dali_toolkit_button_cleanup(void)
40 test_return_value = TET_PASS;
45 static bool gIsCalledButtonCallback = false;
47 static bool ButtonCallback( Button button )
49 gIsCalledButtonCallback = true;
53 struct CallbackFunctor
55 CallbackFunctor(bool* callbackFlag)
56 : mCallbackFlag( callbackFlag )
62 *mCallbackFlag = true;
68 Image CreateSolidColorImage( const Vector4& color, unsigned int width, unsigned int height )
70 BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 );
73 PixelBuffer* pixbuf = imageData.GetBuffer();
74 unsigned int size = width * height;
76 for( size_t i = 0; i < size; i++ )
78 pixbuf[i*4+0] = 0xFF * color.r;
79 pixbuf[i*4+1] = 0xFF * color.g;
80 pixbuf[i*4+2] = 0xFF * color.b;
81 pixbuf[i*4+3] = 0xFF * color.a;
89 Dali::Integration::Point GetPointDownInside()
91 Dali::Integration::Point point;
92 point.SetState( PointState::DOWN );
93 point.SetScreenPosition( Vector2( 240, 400 ) );
97 Dali::Integration::Point GetPointUpInside()
99 Dali::Integration::Point point;
100 point.SetState( PointState::UP );
101 point.SetScreenPosition( Vector2( 240, 400 ) );
105 Dali::Integration::Point GetPointLeave()
107 Dali::Integration::Point point;
108 point.SetState( PointState::LEAVE );
109 point.SetScreenPosition( Vector2( 240, 400 ) );
113 Dali::Integration::Point GetPointEnter()
115 Dali::Integration::Point point;
116 point.SetState( PointState::MOTION );
117 point.SetScreenPosition( Vector2( 240, 400 ) );
121 Dali::Integration::Point GetPointDownOutside()
123 Dali::Integration::Point point;
124 point.SetState( PointState::DOWN );
125 point.SetScreenPosition( Vector2( 10, 10 ) );
129 Dali::Integration::Point GetPointUpOutside()
131 Dali::Integration::Point point;
132 point.SetState( PointState::UP );
133 point.SetScreenPosition( Vector2( 10, 10 ) );
138 static float ANIMATION_TIME( 0.5f );
141 int UtcDaliButtonConstructorP(void)
143 TestApplication application;
147 DALI_TEST_CHECK( !button );
151 int UtcDaliButtonCopyConstructorP(void)
153 TestApplication application;
155 // Initialize an object, ref count == 1
156 Button button = PushButton::New();
158 Button copy( button );
159 DALI_TEST_CHECK( copy );
163 int UtcDaliButtonAssignmentOperatorP(void)
165 TestApplication application;
167 Button button = PushButton::New();
169 Button copy( button );
170 DALI_TEST_CHECK( copy );
172 DALI_TEST_CHECK( button == copy );
176 int UtcDaliButtonDownCastP(void)
178 TestApplication application;
180 Button button = PushButton::New();
182 BaseHandle object(button);
184 Button button2 = Button::DownCast( object );
185 DALI_TEST_CHECK(button2);
187 Button button3 = DownCast< Button >(object);
188 DALI_TEST_CHECK(button3);
192 int UtcDaliButtonDownCastN(void)
194 TestApplication application;
196 BaseHandle unInitializedObject;
198 Button button1 = Button::DownCast( unInitializedObject );
199 DALI_TEST_CHECK( !button1 );
201 Button button2 = DownCast< Button >( unInitializedObject );
202 DALI_TEST_CHECK( !button2 );
206 int UtcDaliButtonSetDisabledP(void)
208 ToolkitTestApplication application;
210 Button button = PushButton::New();
212 button.SetDisabled( true );
214 DALI_TEST_CHECK( button.IsDisabled() );
216 button.SetDisabled( false );
218 DALI_TEST_CHECK( !button.IsDisabled() );
220 button.SetDisabled( true );
222 DALI_TEST_CHECK( button.IsDisabled() );
224 button.SetDisabled( false );
226 DALI_TEST_CHECK( !button.IsDisabled() );
230 int UtcDaliButtonIsDisabledP(void)
232 ToolkitTestApplication application;
234 Button button = PushButton::New();
236 button.SetDisabled( true );
238 DALI_TEST_CHECK( button.IsDisabled() );
240 button.SetDisabled( false );
242 DALI_TEST_CHECK( !button.IsDisabled() );
246 int UtcDaliButtonSetAutoRepeatingP(void)
248 ToolkitTestApplication application;
250 Button button = PushButton::New();
252 button.SetAutoRepeating( true );
254 DALI_TEST_CHECK( button.IsAutoRepeating() );
256 button.SetAutoRepeating( false );
258 DALI_TEST_CHECK( !button.IsAutoRepeating() );
260 button.SetAutoRepeating( true );
262 DALI_TEST_CHECK( button.IsAutoRepeating() );
264 button.SetAutoRepeating( false );
266 DALI_TEST_CHECK( !button.IsAutoRepeating() );
270 int UtcDaliButtonIsAutoRepeatingP(void)
272 ToolkitTestApplication application;
274 Button button = PushButton::New();
276 button.SetAutoRepeating( true );
278 DALI_TEST_CHECK( button.IsAutoRepeating() );
280 button.SetAutoRepeating( false );
282 DALI_TEST_CHECK( !button.IsAutoRepeating() );
286 int UtcDaliButtonSetInitialAutoRepeatingDelayP(void)
288 ToolkitTestApplication application;
290 Button button = PushButton::New();
292 button.SetInitialAutoRepeatingDelay( 0.5f );
294 DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
296 button.SetInitialAutoRepeatingDelay( 0.2f );
298 DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
302 int UtcDaliButtonSetNextAutoRepeatingDelayP(void)
304 ToolkitTestApplication application;
306 Button button = PushButton::New();
308 button.SetNextAutoRepeatingDelay( 0.5f );
310 DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
312 button.SetNextAutoRepeatingDelay( 0.2f );
314 DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
318 int UtcDaliButtonSetTogglableButtonP(void)
320 ToolkitTestApplication application;
322 Button button = PushButton::New();
324 button.SetTogglableButton( true );
326 DALI_TEST_CHECK( button.IsTogglableButton() );
328 button.SetTogglableButton( false );
330 DALI_TEST_CHECK( !button.IsTogglableButton() );
334 int UtcDaliButtonSetSelectedP(void)
336 ToolkitTestApplication application;
338 Button button = PushButton::New();
339 button.SetTogglableButton( true );
341 button.SetSelected( true );
343 DALI_TEST_CHECK( button.IsSelected() );
345 button.SetSelected( false );
347 DALI_TEST_CHECK( !button.IsSelected() );
351 int UtcDaliButtonSetAnimationTimeP(void)
353 ToolkitTestApplication application;
354 tet_infoline(" UtcDaliButtonSetAnimationTimeP");
356 Button button = PushButton::New();
358 button.SetAnimationTime( ANIMATION_TIME );
360 DALI_TEST_EQUALS( button.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
364 int UtcDaliButtonSetLabelStringP(void)
366 ToolkitTestApplication application;
368 Button button = PushButton::New();
370 button.SetLabelText( "Button Label" );
372 DALI_TEST_EQUALS( button.GetLabelText(), "Button Label", TEST_LOCATION );
376 int UtcDaliButtonSetLabelActorP(void)
378 ToolkitTestApplication application;
380 Button button = PushButton::New();
382 button.SetLabelText( "Button Label" );
384 DALI_TEST_EQUALS( button.GetLabelText(), "Button Label", TEST_LOCATION );
388 int UtcDaliButtonSetUnselectedImageP(void)
390 ToolkitTestApplication application;
391 tet_infoline(" UtcDaliButtonSetUnselectedImageP");
393 PushButton pushButton = PushButton::New();
394 Stage::GetCurrent().Add( pushButton );
396 application.SendNotification();
397 application.Render();
399 pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
400 pushButton.SetUnselectedImage( "Image.jpg" );
402 application.SendNotification();
403 application.Render();
405 Vector3 size = pushButton.GetCurrentSize();
407 DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
408 DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
413 int UtcDaliButtonSetSelectedImageP(void)
415 ToolkitTestApplication application;
416 tet_infoline(" UtcDaliButtonSetButtonImage");
418 PushButton pushButton = PushButton::New();
419 Stage::GetCurrent().Add( pushButton );
421 application.SendNotification();
422 application.Render();
424 pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
425 pushButton.SetSelectedImage( "Image.jpg" );
427 application.SendNotification();
428 application.Render();
430 Vector3 size = pushButton.GetCurrentSize();
432 DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
433 DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
438 int UtcDaliButtonPressedSignalP(void)
440 ToolkitTestApplication application;
441 tet_infoline(" UtcDaliButtonPressedSignalP");
443 Button button = PushButton::New();
444 button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
445 button.SetParentOrigin( ParentOrigin::TOP_LEFT );
446 button.SetPosition( 240, 400 );
447 button.SetSize( 100, 100 );
449 Stage::GetCurrent().Add( button );
451 application.SendNotification();
452 application.Render();
454 // connect to its touch signal
455 ConnectionTracker* testTracker = new ConnectionTracker();
456 button.PressedSignal().Connect( &ButtonCallback );
457 button.ReleasedSignal().Connect( &ButtonCallback );
458 bool pressedSignal = false;
459 bool releasedSignal = false;
460 button.ConnectSignal( testTracker, "pressed", CallbackFunctor(&pressedSignal) );
461 button.ConnectSignal( testTracker, "released", CallbackFunctor(&releasedSignal) );
463 Dali::Integration::TouchEvent event;
465 // Test1. Touch point down and up inside the button.
467 gIsCalledButtonCallback = false;
468 event = Dali::Integration::TouchEvent();
469 event.AddPoint( GetPointDownInside() );
470 application.ProcessEvent( event );
472 DALI_TEST_CHECK( gIsCalledButtonCallback );
473 DALI_TEST_CHECK( pressedSignal );
475 gIsCalledButtonCallback = false;
476 event = Dali::Integration::TouchEvent();
477 event.AddPoint( GetPointUpInside() );
478 application.ProcessEvent( event );
480 DALI_TEST_CHECK( gIsCalledButtonCallback );
481 DALI_TEST_CHECK( releasedSignal );
483 // Test2. Touch point down and up outside the button.
485 pressedSignal = false;
486 releasedSignal = false;
487 gIsCalledButtonCallback = false;
488 event = Dali::Integration::TouchEvent();
489 event.AddPoint( GetPointDownOutside() );
490 application.ProcessEvent( event );
492 DALI_TEST_CHECK( !gIsCalledButtonCallback );
493 DALI_TEST_CHECK( !pressedSignal );
495 gIsCalledButtonCallback = false;
496 event = Dali::Integration::TouchEvent();
497 event.AddPoint( GetPointUpOutside() );
498 application.ProcessEvent( event );
500 DALI_TEST_CHECK( !gIsCalledButtonCallback );
501 DALI_TEST_CHECK( !releasedSignal );
503 // Test3. Touch point down inside and up outside the button.
505 gIsCalledButtonCallback = false;
506 event = Dali::Integration::TouchEvent();
507 event.AddPoint( GetPointDownInside() );
508 application.ProcessEvent( event );
510 DALI_TEST_CHECK( gIsCalledButtonCallback );
512 gIsCalledButtonCallback = false;
513 event = Dali::Integration::TouchEvent();
514 event.AddPoint( GetPointLeave() );
515 application.ProcessEvent( event );
517 event = Dali::Integration::TouchEvent();
518 event.AddPoint( GetPointUpOutside() );
519 application.ProcessEvent( event );
521 DALI_TEST_CHECK( gIsCalledButtonCallback );
523 // Test4. Touch point down outside and up inside the button.
525 gIsCalledButtonCallback = false;
526 event = Dali::Integration::TouchEvent();
527 event.AddPoint( GetPointDownOutside() );
528 application.ProcessEvent( event );
530 DALI_TEST_CHECK( !gIsCalledButtonCallback );
532 gIsCalledButtonCallback = false;
533 event = Dali::Integration::TouchEvent();
534 event.AddPoint( GetPointEnter() );
535 application.ProcessEvent( event );
537 event = Dali::Integration::TouchEvent();
538 event.AddPoint( GetPointUpInside() );
539 application.ProcessEvent( event );
541 DALI_TEST_CHECK( !gIsCalledButtonCallback );
545 int UtcDaliButtonClickedSignalP(void)
547 ToolkitTestApplication application;
548 tet_infoline(" UtcDaliButtonClickedSignalP");
550 Button button = PushButton::New();
551 button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
552 button.SetParentOrigin( ParentOrigin::TOP_LEFT );
553 button.SetPosition( 240, 400 );
554 button.SetSize( 100, 100 );
556 Stage::GetCurrent().Add( button );
558 application.SendNotification();
559 application.Render();
561 // connect to its touch signal
562 button.ClickedSignal().Connect( &ButtonCallback );
563 bool clickedSignal = false;
564 ConnectionTracker* testTracker = new ConnectionTracker();
565 button.ConnectSignal( testTracker, "clicked", CallbackFunctor(&clickedSignal) );
567 Dali::Integration::TouchEvent event;
569 // Test1. Touch point down and up inside the button.
571 gIsCalledButtonCallback = false;
572 event = Dali::Integration::TouchEvent();
573 event.AddPoint( GetPointDownInside() );
574 application.ProcessEvent( event );
576 event = Dali::Integration::TouchEvent();
577 event.AddPoint( GetPointUpInside() );
578 application.ProcessEvent( event );
580 DALI_TEST_CHECK( gIsCalledButtonCallback );
581 DALI_TEST_CHECK( clickedSignal );
583 // Test2. Touch point down and up outside the button.
585 gIsCalledButtonCallback = false;
586 clickedSignal = false;
587 event = Dali::Integration::TouchEvent();
588 event.AddPoint( GetPointDownOutside() );
589 application.ProcessEvent( event );
591 event = Dali::Integration::TouchEvent();
592 event.AddPoint( GetPointUpOutside() );
593 application.ProcessEvent( event );
595 DALI_TEST_CHECK( !gIsCalledButtonCallback );
596 DALI_TEST_CHECK( !clickedSignal );
598 // Test3. Touch point down inside and up outside the button.
600 gIsCalledButtonCallback = false;
601 clickedSignal = false;
602 event = Dali::Integration::TouchEvent();
603 event.AddPoint( GetPointDownInside() );
604 application.ProcessEvent( event );
606 event = Dali::Integration::TouchEvent();
607 event.AddPoint( GetPointLeave() );
608 application.ProcessEvent( event );
610 event = Dali::Integration::TouchEvent();
611 event.AddPoint( GetPointUpOutside() );
612 application.ProcessEvent( event );
614 DALI_TEST_CHECK( !gIsCalledButtonCallback );
615 DALI_TEST_CHECK( !clickedSignal );
617 // Test4. Touch point down outside and up inside the button.
619 gIsCalledButtonCallback = false;
620 clickedSignal = false;
621 event = Dali::Integration::TouchEvent();
622 event.AddPoint( GetPointDownOutside() );
623 application.ProcessEvent( event );
625 event = Dali::Integration::TouchEvent();
626 event.AddPoint( GetPointEnter() );
627 application.ProcessEvent( event );
629 event = Dali::Integration::TouchEvent();
630 event.AddPoint( GetPointUpInside() );
631 application.ProcessEvent( event );
633 DALI_TEST_CHECK( !gIsCalledButtonCallback );
634 DALI_TEST_CHECK( !clickedSignal );
638 int UtcDaliButtonStateChangedSignalP(void)
640 ToolkitTestApplication application;
641 tet_infoline(" UtcDaliButtonStateChangedSignalP");
643 Button button = PushButton::New();
644 button.SetTogglableButton( true );
646 Stage::GetCurrent().Add( button );
648 application.SendNotification();
649 application.Render();
651 // connect to its signal
652 button.StateChangedSignal().Connect( &ButtonCallback );
653 bool stateChangedSignal = false;
654 ConnectionTracker* testTracker = new ConnectionTracker();
655 button.ConnectSignal( testTracker, "stateChanged", CallbackFunctor(&stateChangedSignal) );
657 gIsCalledButtonCallback = false;
658 button.SetSelected( true );
660 DALI_TEST_CHECK( gIsCalledButtonCallback );
661 DALI_TEST_CHECK( stateChangedSignal );
663 gIsCalledButtonCallback = false;
664 stateChangedSignal = false;
666 button.SetSelected( false );
668 DALI_TEST_CHECK( gIsCalledButtonCallback );
669 DALI_TEST_CHECK( stateChangedSignal );
673 int UtcDaliButtonSetProperty(void)
675 tet_infoline("UtcDaliButtonSetProperty: ");
676 ToolkitTestApplication application;
678 PushButton pushButton = PushButton::New();
680 pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
681 DALI_TEST_CHECK( false == pushButton.IsDisabled() );
683 pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
684 DALI_TEST_CHECK( true == pushButton.IsDisabled() );
689 int UtcDaliButtonSize(void)
691 ToolkitTestApplication application;
692 tet_infoline(" UtcDaliButtonSize");
694 // First an image is set, then SetSize is called.
695 PushButton pushButton = PushButton::New();
696 Stage::GetCurrent().Add( pushButton );
698 pushButton.SetBackgroundImage( "Image.jpg" );
699 pushButton.SetSize( 10.f, 10.f );
701 application.SendNotification();
702 application.Render();
704 Vector3 size = pushButton.GetCurrentSize();
706 DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
707 DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );