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