Merge "Multi-line layout." into 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
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.SetLabelText( "Button Label" );
314
315   DALI_TEST_EQUALS( button.GetLabelText(), "Button Label", TEST_LOCATION );
316   END_TEST;
317 }
318
319 int UtcDaliButtonSetLabelActorP(void)
320 {
321   ToolkitTestApplication application;
322
323   Button button = PushButton::New();
324
325   button.SetLabelText( "Button Label" );
326
327   DALI_TEST_EQUALS( button.GetLabelText(), "Button Label", TEST_LOCATION );
328   END_TEST;
329 }
330
331 int UtcDaliButtonSetUnselectedImageP(void)
332 {
333   ToolkitTestApplication application;
334   tet_infoline(" UtcDaliButtonSetUnselectedImageP");
335
336   PushButton pushButton = PushButton::New();
337   Stage::GetCurrent().Add( pushButton );
338
339   application.SendNotification();
340   application.Render();
341
342   pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
343   pushButton.SetUnselectedImage( "Image.jpg" );
344
345   application.SendNotification();
346   application.Render();
347
348   Vector3 size = pushButton.GetCurrentSize();
349   tet_printf( "todor: size: %f,%f", size.width, size.height );
350
351   DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
352   DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
353
354   END_TEST;
355 }
356
357 int UtcDaliButtonSetSelectedImageP(void)
358 {
359   ToolkitTestApplication application;
360   tet_infoline(" UtcDaliButtonSetButtonImage");
361
362   PushButton pushButton = PushButton::New();
363   Stage::GetCurrent().Add( pushButton );
364
365   application.SendNotification();
366   application.Render();
367
368   pushButton.SetSize( Vector2( 20.0f, 20.0f ) );
369   pushButton.SetSelectedImage( "Image.jpg" );
370
371   application.SendNotification();
372   application.Render();
373
374   Vector3 size = pushButton.GetCurrentSize();
375
376   DALI_TEST_EQUALS( size.width, 20.f, TEST_LOCATION );
377   DALI_TEST_EQUALS( size.height, 20.f, TEST_LOCATION );
378
379   END_TEST;
380 }
381
382 int UtcDaliButtonPressedSignalP(void)
383 {
384   ToolkitTestApplication application;
385   tet_infoline(" UtcDaliButtonPressedSignalP");
386
387   Button button = PushButton::New();
388   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
389   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
390   button.SetPosition( 240, 400 );
391   button.SetSize( 100, 100 );
392
393   Stage::GetCurrent().Add( button );
394
395   application.SendNotification();
396   application.Render();
397
398   // connect to its touch signal
399   button.PressedSignal().Connect( &ButtonCallback );
400   button.ReleasedSignal().Connect( &ButtonCallback );
401
402   Dali::Integration::TouchEvent event;
403
404   // Test1. Touch point down and up inside the button.
405
406   gIsCalledButtonCallback = false;
407   event = Dali::Integration::TouchEvent();
408   event.AddPoint( pointDownInside );
409   application.ProcessEvent( event );
410
411   DALI_TEST_CHECK( gIsCalledButtonCallback );
412
413   gIsCalledButtonCallback = false;
414   event = Dali::Integration::TouchEvent();
415   event.AddPoint( pointUpInside );
416   application.ProcessEvent( event );
417
418   DALI_TEST_CHECK( gIsCalledButtonCallback );
419
420   // Test2. Touch point down and up outside the button.
421
422   gIsCalledButtonCallback = false;
423   event = Dali::Integration::TouchEvent();
424   event.AddPoint( pointDownOutside );
425   application.ProcessEvent( event );
426
427   DALI_TEST_CHECK( !gIsCalledButtonCallback );
428
429   gIsCalledButtonCallback = false;
430   event = Dali::Integration::TouchEvent();
431   event.AddPoint( pointUpOutside );
432   application.ProcessEvent( event );
433
434   DALI_TEST_CHECK( !gIsCalledButtonCallback );
435
436   // Test3. Touch point down inside and up outside the button.
437
438   gIsCalledButtonCallback = false;
439   event = Dali::Integration::TouchEvent();
440   event.AddPoint( pointDownInside );
441   application.ProcessEvent( event );
442
443   DALI_TEST_CHECK( gIsCalledButtonCallback );
444
445   gIsCalledButtonCallback = false;
446   event = Dali::Integration::TouchEvent();
447   event.AddPoint( pointLeave );
448   application.ProcessEvent( event );
449
450   event = Dali::Integration::TouchEvent();
451   event.AddPoint( pointUpOutside );
452   application.ProcessEvent( event );
453
454   DALI_TEST_CHECK( gIsCalledButtonCallback );
455
456   // Test4. Touch point down outside and up inside the button.
457
458   gIsCalledButtonCallback = false;
459   event = Dali::Integration::TouchEvent();
460   event.AddPoint( pointDownOutside );
461   application.ProcessEvent( event );
462
463   DALI_TEST_CHECK( !gIsCalledButtonCallback );
464
465   gIsCalledButtonCallback = false;
466   event = Dali::Integration::TouchEvent();
467   event.AddPoint( pointEnter );
468   application.ProcessEvent( event );
469
470   event = Dali::Integration::TouchEvent();
471   event.AddPoint( pointUpInside );
472   application.ProcessEvent( event );
473
474   DALI_TEST_CHECK( !gIsCalledButtonCallback );
475   END_TEST;
476 }
477
478 int UtcDaliButtonClickedSignalP(void)
479 {
480   ToolkitTestApplication application;
481   tet_infoline(" UtcDaliButtonClickedSignalP");
482
483   Button button = PushButton::New();
484   button.SetAnchorPoint( AnchorPoint::TOP_LEFT );
485   button.SetParentOrigin( ParentOrigin::TOP_LEFT );
486   button.SetPosition( 240, 400 );
487   button.SetSize( 100, 100 );
488
489   Stage::GetCurrent().Add( button );
490
491   application.SendNotification();
492   application.Render();
493
494   // connect to its touch signal
495   button.ClickedSignal().Connect( &ButtonCallback );
496
497   Dali::Integration::TouchEvent event;
498
499   // Test1. Touch point down and up inside the button.
500
501   gIsCalledButtonCallback = false;
502   event = Dali::Integration::TouchEvent();
503   event.AddPoint( pointDownInside );
504   application.ProcessEvent( event );
505
506   event = Dali::Integration::TouchEvent();
507   event.AddPoint( pointUpInside );
508   application.ProcessEvent( event );
509
510   DALI_TEST_CHECK( gIsCalledButtonCallback );
511
512   // Test2. Touch point down and up outside the button.
513
514   gIsCalledButtonCallback = false;
515   event = Dali::Integration::TouchEvent();
516   event.AddPoint( pointDownOutside );
517   application.ProcessEvent( event );
518
519   event = Dali::Integration::TouchEvent();
520   event.AddPoint( pointUpOutside );
521   application.ProcessEvent( event );
522
523   DALI_TEST_CHECK( !gIsCalledButtonCallback );
524
525   // Test3. Touch point down inside and up outside the button.
526
527   gIsCalledButtonCallback = false;
528   event = Dali::Integration::TouchEvent();
529   event.AddPoint( pointDownInside );
530   application.ProcessEvent( event );
531
532   event = Dali::Integration::TouchEvent();
533   event.AddPoint( pointLeave );
534   application.ProcessEvent( event );
535
536   event = Dali::Integration::TouchEvent();
537   event.AddPoint( pointUpOutside );
538   application.ProcessEvent( event );
539
540   DALI_TEST_CHECK( !gIsCalledButtonCallback );
541
542   // Test4. Touch point down outside and up inside the button.
543
544   gIsCalledButtonCallback = false;
545   event = Dali::Integration::TouchEvent();
546   event.AddPoint( pointDownOutside );
547   application.ProcessEvent( event );
548
549   event = Dali::Integration::TouchEvent();
550   event.AddPoint( pointEnter );
551   application.ProcessEvent( event );
552
553   event = Dali::Integration::TouchEvent();
554   event.AddPoint( pointUpInside );
555   application.ProcessEvent( event );
556
557   DALI_TEST_CHECK( !gIsCalledButtonCallback );
558   END_TEST;
559 }
560
561 int UtcDaliButtonStateChangedSignalP(void)
562 {
563   ToolkitTestApplication application;
564   tet_infoline(" UtcDaliButtonStateChangedSignalP");
565
566   Button button = PushButton::New();
567   button.SetTogglableButton( true );
568
569   Stage::GetCurrent().Add( button );
570
571   application.SendNotification();
572   application.Render();
573
574   // connect to its signal
575   button.StateChangedSignal().Connect( &ButtonCallback );
576
577   gIsCalledButtonCallback = false;
578   button.SetSelected( true );
579
580   DALI_TEST_CHECK( gIsCalledButtonCallback );
581
582   gIsCalledButtonCallback = false;
583   button.SetSelected( false );
584
585   DALI_TEST_CHECK( gIsCalledButtonCallback );
586   END_TEST;
587 }
588
589 int UtcDaliButtonSetProperty(void)
590 {
591   tet_infoline("UtcDaliButtonSetProperty: ");
592   ToolkitTestApplication application;
593
594   PushButton pushButton = PushButton::New();
595
596   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), false);
597   DALI_TEST_CHECK( false == pushButton.IsDisabled() );
598
599   pushButton.SetProperty(pushButton.GetPropertyIndex("disabled"), true);
600   DALI_TEST_CHECK( true == pushButton.IsDisabled() );
601
602   END_TEST;
603 }
604
605 int UtcDaliButtonSize(void)
606 {
607   ToolkitTestApplication application;
608   tet_infoline(" UtcDaliButtonSize");
609
610   // First an image is set, then SetSize is called.
611   PushButton pushButton = PushButton::New();
612   Stage::GetCurrent().Add( pushButton );
613
614   pushButton.SetBackgroundImage( "Image.jpg" );
615   pushButton.SetSize( 10.f, 10.f );
616
617   application.SendNotification();
618   application.Render();
619
620   Vector3 size = pushButton.GetCurrentSize();
621
622   DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
623   DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
624   END_TEST;
625 }