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