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