84a020ef3c4bfae9cd44fbedc5352b704abae837
[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
100 int UtcDaliPushButtonSetGetAutoRepeating(void)
101 {
102   ToolkitTestApplication application;
103   tet_infoline(" UtcDaliPushButtonSetGetAutoRepeating");
104
105   PushButton pushButton = PushButton::New();
106
107   pushButton.SetAutoRepeating( true );
108
109   DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
110
111   pushButton.SetAutoRepeating( false );
112
113   DALI_TEST_CHECK( !pushButton.IsAutoRepeating() );
114
115   pushButton.SetAutoRepeating( true );
116
117   DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
118   END_TEST;
119 }
120
121 int UtcDaliPushButtonSetGetTogglableButton(void)
122 {
123   ToolkitTestApplication application;
124   tet_infoline(" UtcDaliPushButtonSetGetTogglableButton");
125
126   PushButton pushButton = PushButton::New();
127
128   pushButton.SetTogglableButton( true );
129
130   DALI_TEST_CHECK( pushButton.IsTogglableButton() );
131
132   pushButton.SetTogglableButton( false );
133
134   DALI_TEST_CHECK( !pushButton.IsTogglableButton() );
135
136   pushButton.SetTogglableButton( true );
137
138   DALI_TEST_CHECK( pushButton.IsTogglableButton() );
139   END_TEST;
140 }
141
142 int UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton(void)
143 {
144   ToolkitTestApplication application;
145   tet_infoline(" UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton");
146
147   PushButton pushButton = PushButton::New();
148
149   pushButton.SetAutoRepeating( true );
150   pushButton.SetTogglableButton( true );
151
152   DALI_TEST_CHECK( pushButton.IsTogglableButton() );
153   DALI_TEST_CHECK( !pushButton.IsAutoRepeating() );
154
155   pushButton.SetTogglableButton( true );
156   pushButton.SetAutoRepeating( true );
157
158   DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
159   DALI_TEST_CHECK( !pushButton.IsTogglableButton() );
160   END_TEST;
161 }
162
163 int UtcDaliPushButtonSetGetSelected01(void)
164 {
165   ToolkitTestApplication application;
166   tet_infoline(" UtcDaliPushButtonSetGetSelected01");
167
168   PushButton pushButton = PushButton::New();
169
170   pushButton.SetTogglableButton( true );
171   pushButton.StateChangedSignal().Connect( &PushButtonSelected );
172
173   gPushButtonSelectedState = false;
174   pushButton.SetSelected( true );
175
176   DALI_TEST_CHECK( pushButton.IsSelected() );
177   DALI_TEST_CHECK( gPushButtonSelectedState );
178
179   pushButton.SetSelected( false );
180
181   DALI_TEST_CHECK( !pushButton.IsSelected() );
182   DALI_TEST_CHECK( !gPushButtonSelectedState );
183
184   pushButton.SetSelected( true );
185
186   DALI_TEST_CHECK( pushButton.IsSelected() );
187   DALI_TEST_CHECK( gPushButtonSelectedState );
188   END_TEST;
189 }
190
191 int UtcDaliPushButtonSetGetSelected02(void)
192 {
193   ToolkitTestApplication application;
194   tet_infoline(" UtcDaliPushButtonSetGetSelected02");
195
196   PushButton pushButton = PushButton::New();
197
198   pushButton.SetTogglableButton( false );
199   pushButton.StateChangedSignal().Connect( &PushButtonSelected );
200
201   gPushButtonSelectedState = false;
202   pushButton.SetSelected( true );
203
204   DALI_TEST_CHECK( !pushButton.IsSelected() );
205   DALI_TEST_CHECK( !gPushButtonSelectedState );
206
207   pushButton.SetSelected( false );
208
209   DALI_TEST_CHECK( !pushButton.IsSelected() );
210   DALI_TEST_CHECK( !gPushButtonSelectedState );
211
212   pushButton.SetSelected( true );
213
214   DALI_TEST_CHECK( !pushButton.IsSelected() );
215   DALI_TEST_CHECK( !gPushButtonSelectedState );
216   END_TEST;
217 }
218
219 int UtcDaliPushButtonSetGetAutorepeatingDelayValues01(void)
220 {
221   ToolkitTestApplication application;
222   tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues01");
223
224   PushButton pushButton = PushButton::New();
225
226   pushButton.SetAutoRepeating( true );
227
228   pushButton.SetInitialAutoRepeatingDelay( 1.f );
229   DALI_TEST_EQUALS( pushButton.GetInitialAutoRepeatingDelay(), 1.f, TEST_LOCATION );
230
231   pushButton.SetNextAutoRepeatingDelay( 1.f );
232   DALI_TEST_EQUALS( pushButton.GetNextAutoRepeatingDelay(), 1.f, TEST_LOCATION );
233   END_TEST;
234 }
235
236 int UtcDaliPushButtonSetGetAutorepeatingDelayValues02(void)
237 {
238   ToolkitTestApplication application;
239   tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues02");
240
241   PushButton pushButton = PushButton::New();
242
243   bool assert1( false );
244   bool assert2( false );
245
246   pushButton.SetAutoRepeating( true );
247
248   try
249   {
250     pushButton.SetInitialAutoRepeatingDelay( -1.f );
251   }
252   catch( Dali::DaliException& e )
253   {
254     DALI_TEST_PRINT_ASSERT( e );
255     DALI_TEST_EQUALS(e.condition, "initialAutoRepeatingDelay > 0.f", TEST_LOCATION);
256     assert1 = true;
257   }
258
259   try
260   {
261     pushButton.SetNextAutoRepeatingDelay( -1.f );
262   }
263   catch( Dali::DaliException& e )
264   {
265     DALI_TEST_PRINT_ASSERT( e );
266     DALI_TEST_EQUALS(e.condition, "nextAutoRepeatingDelay > 0.f", TEST_LOCATION);
267     assert2 = true;
268   }
269
270   DALI_TEST_CHECK( assert1 && assert2 );
271   END_TEST;
272 }
273
274 int UtcDaliPushButtonSetImages(void)
275 {
276   ToolkitTestApplication application;
277   tet_infoline(" UtcDaliPushButtonSetImages");
278
279   Actor imageActor;
280
281   Image image01 = CreateSolidColorImage( Color::RED, 10, 10 );
282
283   Vector3 size;
284   PushButton pushButton = PushButton::New();
285   Stage::GetCurrent().Add( pushButton );
286
287   application.SendNotification();
288   application.Render();
289
290   // Just check if check box button size changes when a bigger image is set.
291
292   pushButton.SetButtonImage( image01 );
293
294   application.SendNotification();
295   application.Render();
296
297   size = pushButton.GetCurrentSize();
298
299   DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
300   DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
301
302   END_TEST;
303 }
304
305 int UtcDaliPushButtonSetLabelText(void)
306 {
307   ToolkitTestApplication application;
308   tet_infoline(" UtcDaliPushButtonSetLabelText");
309
310   const std::string STR( "Hola!" );
311
312   PushButton pushButton = PushButton::New();
313
314   application.SendNotification();
315   application.Render();
316
317   TextView textView;
318
319   pushButton.SetLabel( STR );
320
321   textView = TextView::DownCast( pushButton.GetLabel() );
322   DALI_TEST_CHECK( STR == textView.GetText() );
323
324   TextView text = TextView::New( STR );
325   pushButton.SetLabel( text );
326
327   textView = TextView::DownCast( pushButton.GetLabel() );
328   DALI_TEST_CHECK( STR == textView.GetText() );
329   END_TEST;
330 }
331
332 int UtcDaliPushButtonPressed(void)
333 {
334   ToolkitTestApplication application;
335   tet_infoline(" UtcDaliPushButtonPressed");
336
337   PushButton pushButton = PushButton::New();
338   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
339   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
340   pushButton.SetPosition( 240, 400 );
341   pushButton.SetSize( 100, 100 );
342
343   Stage::GetCurrent().Add( pushButton );
344
345   application.SendNotification();
346   application.Render();
347
348   gPushButtonPressed = false;
349
350   // connect to its touch signal
351   pushButton.PressedSignal().Connect( &PushButtonPressed );
352
353   Dali::Integration::TouchEvent eventDown;
354   eventDown.AddPoint( pointDownInside );
355
356   // flush the queue and render once
357   application.SendNotification();
358   application.Render();
359   application.ProcessEvent( eventDown );
360
361   DALI_TEST_CHECK( gPushButtonPressed );
362   END_TEST;
363 }
364
365 int UtcDaliPushButtonReleased(void)
366 {
367   ToolkitTestApplication application;
368   tet_infoline(" UtcDaliPushButtonReleased");
369
370   PushButton pushButton = PushButton::New();
371   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
372   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
373   pushButton.SetPosition( 240, 400 );
374   pushButton.SetSize( 100, 100 );
375
376   Stage::GetCurrent().Add( pushButton );
377
378   application.SendNotification();
379   application.Render();
380
381   // connect to its touch signal
382   pushButton.ReleasedSignal().Connect( &PushButtonReleased );
383
384   Dali::Integration::TouchEvent event;
385
386   // Test1. Touch point down and up inside the button.
387
388   gPushButtonReleased = false;
389   event = Dali::Integration::TouchEvent();
390   event.AddPoint( pointDownInside );
391   application.ProcessEvent( event );
392
393   event = Dali::Integration::TouchEvent();
394   event.AddPoint( pointUpInside );
395   application.ProcessEvent( event );
396
397   DALI_TEST_CHECK( gPushButtonReleased );
398
399   // Test2. Touch point down and up outside the button.
400
401   gPushButtonReleased = false;
402   event = Dali::Integration::TouchEvent();
403   event.AddPoint( pointDownOutside );
404   application.ProcessEvent( event );
405
406   event = Dali::Integration::TouchEvent();
407   event.AddPoint( pointUpOutside );
408   application.ProcessEvent( event );
409
410   DALI_TEST_CHECK( !gPushButtonReleased );
411
412   // Test3. Touch point down inside and up outside the button.
413
414   gPushButtonReleased = false;
415   event = Dali::Integration::TouchEvent();
416   event.AddPoint( pointDownInside );
417   application.ProcessEvent( event );
418
419   event = Dali::Integration::TouchEvent();
420   event.AddPoint( pointLeave );
421   application.ProcessEvent( event );
422
423   event = Dali::Integration::TouchEvent();
424   event.AddPoint( pointUpOutside );
425   application.ProcessEvent( event );
426
427   DALI_TEST_CHECK( gPushButtonReleased );
428
429   // Test4. Touch point down outside and up inside the button.
430
431   gPushButtonReleased = false;
432   event = Dali::Integration::TouchEvent();
433   event.AddPoint( pointDownOutside );
434   application.ProcessEvent( event );
435
436   event = Dali::Integration::TouchEvent();
437   event.AddPoint( pointEnter );
438   application.ProcessEvent( event );
439
440   event = Dali::Integration::TouchEvent();
441   event.AddPoint( pointUpInside );
442   application.ProcessEvent( event );
443
444   DALI_TEST_CHECK( !gPushButtonReleased );
445   END_TEST;
446 }
447
448 int UtcDaliPushButtonSelected(void)
449 {
450   ToolkitTestApplication application;
451   tet_infoline(" UtcDaliPushButtonSelected");
452
453   PushButton pushButton = PushButton::New();
454   pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
455   pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
456   pushButton.SetPosition( 240, 400 );
457   pushButton.SetSize( 100, 100 );
458
459   Stage::GetCurrent().Add( pushButton );
460
461   application.SendNotification();
462   application.Render();
463
464   // connect to its touch signal
465   pushButton.StateChangedSignal().Connect( &PushButtonSelected );
466
467   Dali::Integration::TouchEvent event;
468
469   // Test1. No togglable button.
470
471   gPushButtonSelectedState = false;
472   event = Dali::Integration::TouchEvent();
473   event.AddPoint( pointDownInside );
474   application.ProcessEvent( event );
475
476   event = Dali::Integration::TouchEvent();
477   event.AddPoint( pointUpInside );
478   application.ProcessEvent( event );
479
480   DALI_TEST_CHECK( !gPushButtonSelectedState );
481
482   // Set togglable property.
483   pushButton.SetTogglableButton( true );
484
485   // Test2. Touch point down and up inside the button twice.
486   gPushButtonSelectedState = false;
487   event = Dali::Integration::TouchEvent();
488   event.AddPoint( pointDownInside );
489   application.ProcessEvent( event );
490
491   event = Dali::Integration::TouchEvent();
492   event.AddPoint( pointUpInside );
493   application.ProcessEvent( event );
494
495   DALI_TEST_CHECK( gPushButtonSelectedState );
496
497   event = Dali::Integration::TouchEvent();
498   event.AddPoint( pointDownInside );
499   application.ProcessEvent( event );
500
501   event = Dali::Integration::TouchEvent();
502   event.AddPoint( pointUpInside );
503   application.ProcessEvent( event );
504
505   DALI_TEST_CHECK( !gPushButtonSelectedState );
506
507   // Test3. Touch point down and up outside the button.
508
509   gPushButtonSelectedState = false;
510   event = Dali::Integration::TouchEvent();
511   event.AddPoint( pointDownOutside );
512   application.ProcessEvent( event );
513
514   event = Dali::Integration::TouchEvent();
515   event.AddPoint( pointUpOutside );
516   application.ProcessEvent( event );
517
518   DALI_TEST_CHECK( !gPushButtonSelectedState );
519
520   // Test4. Touch point down inside and up outside the button.
521
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( pointLeave );
529   application.ProcessEvent( event );
530
531   event = Dali::Integration::TouchEvent();
532   event.AddPoint( pointUpOutside );
533   application.ProcessEvent( event );
534
535   DALI_TEST_CHECK( !gPushButtonSelectedState );
536
537   // Test5. Touch point down outside and up inside the button.
538
539   gPushButtonSelectedState = false;
540   event = Dali::Integration::TouchEvent();
541   event.AddPoint( pointDownOutside );
542   application.ProcessEvent( event );
543
544   event = Dali::Integration::TouchEvent();
545   event.AddPoint( pointEnter );
546   application.ProcessEvent( event );
547
548   event = Dali::Integration::TouchEvent();
549   event.AddPoint( pointUpInside );
550   application.ProcessEvent( event );
551
552   DALI_TEST_CHECK( !gPushButtonSelectedState );
553   END_TEST;
554 }