Moved PushButton::SetButtonImage etc to Button base class.
[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
25 #include <dali.h>
26 #include <dali-toolkit/dali-toolkit.h>
27 #include <dali/integration-api/events/touch-event-integ.h>
28
29 using namespace Dali;
30 using namespace Toolkit;
31
32
33 void utc_dali_toolkit_button_startup(void)
34 {
35   test_return_value = TET_UNDEF;
36 }
37
38 void utc_dali_toolkit_button_cleanup(void)
39 {
40   test_return_value = TET_PASS;
41 }
42
43 namespace
44 {
45 static bool gIsCalledButtonCallback = false;
46
47 static bool ButtonCallback( Button button )
48 {
49   gIsCalledButtonCallback = true;
50   return false;
51 }
52
53 Image CreateSolidColorImage( const Vector4& color, unsigned int width, unsigned int height )
54 {
55   BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 );
56
57   // Create the image
58   PixelBuffer* pixbuf = imageData.GetBuffer();
59   unsigned int size = width * height;
60
61   for( size_t i = 0; i < size; i++ )
62     {
63       pixbuf[i*4+0] = 0xFF * color.r;
64       pixbuf[i*4+1] = 0xFF * color.g;
65       pixbuf[i*4+2] = 0xFF * color.b;
66       pixbuf[i*4+3] = 0xFF * color.a;
67     }
68
69   imageData.Update();
70
71   return imageData;
72 }
73
74 const Dali::TouchPoint pointDownInside( 0, TouchPoint::Down, 240, 400 );
75 const Dali::TouchPoint pointUpInside( 0, TouchPoint::Up, 240, 400 );
76 const Dali::TouchPoint pointLeave( 0, TouchPoint::Leave, 240, 400 );
77 const Dali::TouchPoint pointEnter( 0, TouchPoint::Motion, 240, 400 );
78 const Dali::TouchPoint pointDownOutside( 0, TouchPoint::Down, 10, 10 );
79 const Dali::TouchPoint pointUpOutside( 0, TouchPoint::Up, 10, 10 );
80
81 static float ANIMATION_TIME( 0.5f );
82 } // namespace
83
84 int UtcDaliButtonConstructorP(void)
85 {
86   TestApplication application;
87
88   Button button;
89
90   DALI_TEST_CHECK( !button );
91   END_TEST;
92 }
93
94 int UtcDaliButtonCopyConstructorP(void)
95 {
96   TestApplication application;
97
98   // Initialize an object, ref count == 1
99   Button button = PushButton::New();
100
101   Button copy( button );
102   DALI_TEST_CHECK( copy );
103   END_TEST;
104 }
105
106 int UtcDaliButtonAssignmentOperatorP(void)
107 {
108   TestApplication application;
109
110   Button button = PushButton::New();
111
112   Button copy( button );
113   DALI_TEST_CHECK( copy );
114
115   DALI_TEST_CHECK( button == copy );
116   END_TEST;
117 }
118
119 int UtcDaliButtonDownCastP(void)
120 {
121   TestApplication application;
122
123   Button button = PushButton::New();
124
125   BaseHandle object(button);
126
127   Button button2 = Button::DownCast( object );
128   DALI_TEST_CHECK(button2);
129
130   Button button3 = DownCast< Button >(object);
131   DALI_TEST_CHECK(button3);
132   END_TEST;
133 }
134
135 int UtcDaliButtonDownCastN(void)
136 {
137   TestApplication application;
138
139   BaseHandle unInitializedObject;
140
141   Button button1 = Button::DownCast( unInitializedObject );
142   DALI_TEST_CHECK( !button1 );
143
144   Button button2 = DownCast< Button >( unInitializedObject );
145   DALI_TEST_CHECK( !button2 );
146   END_TEST;
147 }
148
149 int UtcDaliButtonSetDisabledP(void)
150 {
151   ToolkitTestApplication application;
152
153   Button button = PushButton::New();
154
155   button.SetDisabled( true );
156
157   DALI_TEST_CHECK( button.IsDisabled() );
158
159   button.SetDisabled( false );
160
161   DALI_TEST_CHECK( !button.IsDisabled() );
162
163   button.SetDisabled( true );
164
165   DALI_TEST_CHECK( button.IsDisabled() );
166
167   button.SetDisabled( false );
168
169   DALI_TEST_CHECK( !button.IsDisabled() );
170   END_TEST;
171 }
172
173 int UtcDaliButtonIsDisabledP(void)
174 {
175   ToolkitTestApplication application;
176
177   Button button = PushButton::New();
178
179   button.SetDisabled( true );
180
181   DALI_TEST_CHECK( button.IsDisabled() );
182
183   button.SetDisabled( false );
184
185   DALI_TEST_CHECK( !button.IsDisabled() );
186   END_TEST;
187 }
188
189 int UtcDaliButtonSetAutoRepeatingP(void)
190 {
191   ToolkitTestApplication application;
192
193   Button button = PushButton::New();
194
195   button.SetAutoRepeating( true );
196
197   DALI_TEST_CHECK( button.IsAutoRepeating() );
198
199   button.SetAutoRepeating( false );
200
201   DALI_TEST_CHECK( !button.IsAutoRepeating() );
202
203   button.SetAutoRepeating( true );
204
205   DALI_TEST_CHECK( button.IsAutoRepeating() );
206
207   button.SetAutoRepeating( false );
208
209   DALI_TEST_CHECK( !button.IsAutoRepeating() );
210   END_TEST;
211 }
212
213 int UtcDaliButtonIsAutoRepeatingP(void)
214 {
215   ToolkitTestApplication application;
216
217   Button button = PushButton::New();
218
219   button.SetAutoRepeating( true );
220
221   DALI_TEST_CHECK( button.IsAutoRepeating() );
222
223   button.SetAutoRepeating( false );
224
225   DALI_TEST_CHECK( !button.IsAutoRepeating() );
226   END_TEST;
227 }
228
229 int UtcDaliButtonSetInitialAutoRepeatingDelayP(void)
230 {
231   ToolkitTestApplication application;
232
233   Button button = PushButton::New();
234
235   button.SetInitialAutoRepeatingDelay( 0.5f );
236
237   DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
238
239   button.SetInitialAutoRepeatingDelay( 0.2f );
240
241   DALI_TEST_EQUALS( button.GetInitialAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
242   END_TEST;
243 }
244
245 int UtcDaliButtonSetNextAutoRepeatingDelayP(void)
246 {
247   ToolkitTestApplication application;
248
249   Button button = PushButton::New();
250
251   button.SetNextAutoRepeatingDelay( 0.5f );
252
253   DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.5f, TEST_LOCATION );
254
255   button.SetNextAutoRepeatingDelay( 0.2f );
256
257   DALI_TEST_EQUALS( button.GetNextAutoRepeatingDelay(), 0.2f, TEST_LOCATION );
258   END_TEST;
259 }
260
261 int UtcDaliButtonSetTogglableButtonP(void)
262 {
263   ToolkitTestApplication application;
264
265   Button button = PushButton::New();
266
267   button.SetTogglableButton( true );
268
269   DALI_TEST_CHECK( button.IsTogglableButton() );
270
271   button.SetTogglableButton( false );
272
273   DALI_TEST_CHECK( !button.IsTogglableButton() );
274   END_TEST;
275 }
276
277 int UtcDaliButtonSetSelectedP(void)
278 {
279   ToolkitTestApplication application;
280
281   Button button = PushButton::New();
282   button.SetTogglableButton( true );
283
284   button.SetSelected( true );
285
286   DALI_TEST_CHECK( button.IsSelected() );
287
288   button.SetSelected( false );
289
290   DALI_TEST_CHECK( !button.IsSelected() );
291   END_TEST;
292 }
293
294 int UtcDaliButtonSetAnimationTimeP(void)
295 {
296   ToolkitTestApplication application;
297   tet_infoline(" UtcDaliButtonSetAnimationTimeP");
298
299   Button button = PushButton::New();
300
301   button.SetAnimationTime( ANIMATION_TIME );
302
303   DALI_TEST_EQUALS( button.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
304   END_TEST;
305 }
306
307 int UtcDaliButtonSetLabelStringP(void)
308 {
309   ToolkitTestApplication application;
310
311   Button button = PushButton::New();
312
313   button.SetLabel( "Button Label" );
314
315   DALI_TEST_CHECK( button.GetLabel() );
316   END_TEST;
317 }
318
319 int UtcDaliButtonSetLabelActorP(void)
320 {
321   ToolkitTestApplication application;
322
323   Button button = PushButton::New();
324
325   TextLabel textLabel = TextLabel::New( "Button Label" );
326   button.SetLabel( textLabel );
327
328   DALI_TEST_CHECK( button.GetLabel() );
329   END_TEST;
330 }
331
332 int UtcDaliButtonSetButtonImage(void)
333 {
334   ToolkitTestApplication application;
335   tet_infoline(" UtcDaliButtonSetButtonImage");
336
337   Image image = CreateSolidColorImage( Color::RED, 10, 10 );
338
339   PushButton pushButton = PushButton::New();
340   Stage::GetCurrent().Add( pushButton );
341
342   application.SendNotification();
343   application.Render();
344
345   pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
346   pushButton.SetButtonImage( image );
347
348   application.SendNotification();
349   application.Render();
350
351   Vector3 size = pushButton.GetCurrentSize();
352
353   DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
354   DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
355
356   END_TEST;
357 }
358
359 int UtcDaliButtonSetSelectedImageP(void)
360 {
361   ToolkitTestApplication application;
362   tet_infoline(" UtcDaliButtonSetButtonImage");
363
364   Image image = CreateSolidColorImage( Color::RED, 10, 10 );
365
366   PushButton pushButton = PushButton::New();
367   Stage::GetCurrent().Add( pushButton );
368
369   application.SendNotification();
370   application.Render();
371
372   pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
373   pushButton.SetSelectedImage( image );
374
375   application.SendNotification();
376   application.Render();
377
378   Vector3 size = pushButton.GetCurrentSize();
379
380   DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
381   DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
382
383   END_TEST;
384 }
385
386 int UtcDaliButtonPressedSignalP(void)
387 {
388   ToolkitTestApplication application;
389   tet_infoline(" UtcDaliButtonPressedSignalP");
390
391   Button button = PushButton::New();
392   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
393   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
394   button.SetPosition( 240, 400 );
395   button.SetSize( 100, 100 );
396
397   Stage::GetCurrent().Add( button );
398
399   application.SendNotification();
400   application.Render();
401
402   // connect to its touch signal
403   button.PressedSignal().Connect( &ButtonCallback );
404   button.ReleasedSignal().Connect( &ButtonCallback );
405
406   Dali::Integration::TouchEvent event;
407
408   // Test1. Touch point down and up inside the button.
409
410   gIsCalledButtonCallback = false;
411   event = Dali::Integration::TouchEvent();
412   event.AddPoint( pointDownInside );
413   application.ProcessEvent( event );
414
415   DALI_TEST_CHECK( gIsCalledButtonCallback );
416
417   gIsCalledButtonCallback = false;
418   event = Dali::Integration::TouchEvent();
419   event.AddPoint( pointUpInside );
420   application.ProcessEvent( event );
421
422   DALI_TEST_CHECK( gIsCalledButtonCallback );
423
424   // Test2. Touch point down and up outside the button.
425
426   gIsCalledButtonCallback = false;
427   event = Dali::Integration::TouchEvent();
428   event.AddPoint( pointDownOutside );
429   application.ProcessEvent( event );
430
431   DALI_TEST_CHECK( !gIsCalledButtonCallback );
432
433   gIsCalledButtonCallback = false;
434   event = Dali::Integration::TouchEvent();
435   event.AddPoint( pointUpOutside );
436   application.ProcessEvent( event );
437
438   DALI_TEST_CHECK( !gIsCalledButtonCallback );
439
440   // Test3. Touch point down inside and up outside the button.
441
442   gIsCalledButtonCallback = false;
443   event = Dali::Integration::TouchEvent();
444   event.AddPoint( pointDownInside );
445   application.ProcessEvent( event );
446
447   DALI_TEST_CHECK( gIsCalledButtonCallback );
448
449   gIsCalledButtonCallback = false;
450   event = Dali::Integration::TouchEvent();
451   event.AddPoint( pointLeave );
452   application.ProcessEvent( event );
453
454   event = Dali::Integration::TouchEvent();
455   event.AddPoint( pointUpOutside );
456   application.ProcessEvent( event );
457
458   DALI_TEST_CHECK( gIsCalledButtonCallback );
459
460   // Test4. Touch point down outside and up inside the button.
461
462   gIsCalledButtonCallback = false;
463   event = Dali::Integration::TouchEvent();
464   event.AddPoint( pointDownOutside );
465   application.ProcessEvent( event );
466
467   DALI_TEST_CHECK( !gIsCalledButtonCallback );
468
469   gIsCalledButtonCallback = false;
470   event = Dali::Integration::TouchEvent();
471   event.AddPoint( pointEnter );
472   application.ProcessEvent( event );
473
474   event = Dali::Integration::TouchEvent();
475   event.AddPoint( pointUpInside );
476   application.ProcessEvent( event );
477
478   DALI_TEST_CHECK( !gIsCalledButtonCallback );
479   END_TEST;
480 }
481
482 int UtcDaliButtonClickedSignalP(void)
483 {
484   ToolkitTestApplication application;
485   tet_infoline(" UtcDaliButtonClickedSignalP");
486
487   Button button = PushButton::New();
488   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
489   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
490   button.SetPosition( 240, 400 );
491   button.SetSize( 100, 100 );
492
493   Stage::GetCurrent().Add( button );
494
495   application.SendNotification();
496   application.Render();
497
498   // connect to its touch signal
499   button.ClickedSignal().Connect( &ButtonCallback );
500
501   Dali::Integration::TouchEvent event;
502
503   // Test1. Touch point down and up inside the button.
504
505   gIsCalledButtonCallback = false;
506   event = Dali::Integration::TouchEvent();
507   event.AddPoint( pointDownInside );
508   application.ProcessEvent( event );
509
510   event = Dali::Integration::TouchEvent();
511   event.AddPoint( pointUpInside );
512   application.ProcessEvent( event );
513
514   DALI_TEST_CHECK( gIsCalledButtonCallback );
515
516   // Test2. Touch point down and up outside the button.
517
518   gIsCalledButtonCallback = false;
519   event = Dali::Integration::TouchEvent();
520   event.AddPoint( pointDownOutside );
521   application.ProcessEvent( event );
522
523   event = Dali::Integration::TouchEvent();
524   event.AddPoint( pointUpOutside );
525   application.ProcessEvent( event );
526
527   DALI_TEST_CHECK( !gIsCalledButtonCallback );
528
529   // Test3. Touch point down inside and up outside the button.
530
531   gIsCalledButtonCallback = false;
532   event = Dali::Integration::TouchEvent();
533   event.AddPoint( pointDownInside );
534   application.ProcessEvent( event );
535
536   event = Dali::Integration::TouchEvent();
537   event.AddPoint( pointLeave );
538   application.ProcessEvent( event );
539
540   event = Dali::Integration::TouchEvent();
541   event.AddPoint( pointUpOutside );
542   application.ProcessEvent( event );
543
544   DALI_TEST_CHECK( !gIsCalledButtonCallback );
545
546   // Test4. Touch point down outside and up inside the button.
547
548   gIsCalledButtonCallback = false;
549   event = Dali::Integration::TouchEvent();
550   event.AddPoint( pointDownOutside );
551   application.ProcessEvent( event );
552
553   event = Dali::Integration::TouchEvent();
554   event.AddPoint( pointEnter );
555   application.ProcessEvent( event );
556
557   event = Dali::Integration::TouchEvent();
558   event.AddPoint( pointUpInside );
559   application.ProcessEvent( event );
560
561   DALI_TEST_CHECK( !gIsCalledButtonCallback );
562   END_TEST;
563 }
564
565 int UtcDaliButtonStateChangedSignalP(void)
566 {
567   ToolkitTestApplication application;
568   tet_infoline(" UtcDaliButtonStateChangedSignalP");
569
570   Button button = PushButton::New();
571   button.SetTogglableButton( true );
572
573   Stage::GetCurrent().Add( button );
574
575   application.SendNotification();
576   application.Render();
577
578   // connect to its signal
579   button.StateChangedSignal().Connect( &ButtonCallback );
580
581   gIsCalledButtonCallback = false;
582   button.SetSelected( true );
583
584   DALI_TEST_CHECK( gIsCalledButtonCallback );
585
586   gIsCalledButtonCallback = false;
587   button.SetSelected( false );
588
589   DALI_TEST_CHECK( gIsCalledButtonCallback );
590   END_TEST;
591 }
592
593 int UtcDaliButtonSetProperty(void)
594 {
595   tet_infoline("UtcDaliButtonSetProperty: ");
596   ToolkitTestApplication application;
597
598   PushButton pushButton = PushButton::New();
599
600   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
601   DALI_TEST_CHECK( false == pushButton.IsDisabled() );
602   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
603   DALI_TEST_CHECK( true == pushButton.IsDisabled() );
604   END_TEST;
605 }
606
607 int UtcDaliButtonSize(void)
608 {
609   ToolkitTestApplication application;
610   tet_infoline(" UtcDaliButtonSize");
611
612   ImageActor image01 = ImageActor::New(CreateBufferImage());
613   image01.SetSize( 100, 50 );
614
615   PushButton pushButton;
616
617   Vector3 size;
618
619   // Test1 Size is set through Actor API
620
621   // First an image is set, then SetSize is called.
622   pushButton = PushButton::New();
623   Stage::GetCurrent().Add( pushButton );
624
625   pushButton.SetBackgroundImage( image01 );
626   pushButton.SetSize( 10.f, 10.f );
627
628   application.SendNotification();
629   application.Render();
630
631   size = pushButton.GetCurrentSize();
632
633   DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
634   DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
635   END_TEST;
636 }