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