2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
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>
26 #include <dali/integration-api/events/touch-event-integ.h>
27 #include <dali-toolkit/dali-toolkit.h>
30 using namespace Toolkit;
32 void utc_dali_toolkit_pushbutton_startup(void)
34 test_return_value = TET_UNDEF;
37 void utc_dali_toolkit_pushbutton_cleanup(void)
39 test_return_value = TET_PASS;
45 static bool gPushButtonSelectedState = false;
46 bool PushButtonSelected( Button button )
48 gPushButtonSelectedState = button.IsSelected();
52 static bool gPushButtonPressed = false;
54 static bool PushButtonPressed( Button button )
56 gPushButtonPressed = true;
60 static bool gPushButtonReleased = false;
62 static bool PushButtonReleased( Button button )
64 gPushButtonReleased = true;
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 );
76 Image CreateSolidColorImage( const Vector4& color, unsigned int width, unsigned int height )
78 BufferImage imageData = BufferImage::New( width, height, Pixel::RGBA8888 );
81 PixelBuffer* pixbuf = imageData.GetBuffer();
82 unsigned int size = width * height;
84 for( size_t i = 0; i < size; i++ )
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;
100 int UtcDaliPushButtonSetGetAutoRepeating(void)
102 ToolkitTestApplication application;
103 tet_infoline(" UtcDaliPushButtonSetGetAutoRepeating");
105 PushButton pushButton = PushButton::New();
107 pushButton.SetAutoRepeating( true );
109 DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
111 pushButton.SetAutoRepeating( false );
113 DALI_TEST_CHECK( !pushButton.IsAutoRepeating() );
115 pushButton.SetAutoRepeating( true );
117 DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
121 int UtcDaliPushButtonSetGetTogglableButton(void)
123 ToolkitTestApplication application;
124 tet_infoline(" UtcDaliPushButtonSetGetTogglableButton");
126 PushButton pushButton = PushButton::New();
128 pushButton.SetTogglableButton( true );
130 DALI_TEST_CHECK( pushButton.IsTogglableButton() );
132 pushButton.SetTogglableButton( false );
134 DALI_TEST_CHECK( !pushButton.IsTogglableButton() );
136 pushButton.SetTogglableButton( true );
138 DALI_TEST_CHECK( pushButton.IsTogglableButton() );
142 int UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton(void)
144 ToolkitTestApplication application;
145 tet_infoline(" UtcDaliPushButtonSetGetAutoRepeatingAndTogglableButton");
147 PushButton pushButton = PushButton::New();
149 pushButton.SetAutoRepeating( true );
150 pushButton.SetTogglableButton( true );
152 DALI_TEST_CHECK( pushButton.IsTogglableButton() );
153 DALI_TEST_CHECK( !pushButton.IsAutoRepeating() );
155 pushButton.SetTogglableButton( true );
156 pushButton.SetAutoRepeating( true );
158 DALI_TEST_CHECK( pushButton.IsAutoRepeating() );
159 DALI_TEST_CHECK( !pushButton.IsTogglableButton() );
163 int UtcDaliPushButtonSetGetSelected01(void)
165 ToolkitTestApplication application;
166 tet_infoline(" UtcDaliPushButtonSetGetSelected01");
168 PushButton pushButton = PushButton::New();
170 pushButton.SetTogglableButton( true );
171 pushButton.StateChangedSignal().Connect( &PushButtonSelected );
173 gPushButtonSelectedState = false;
174 pushButton.SetSelected( true );
176 DALI_TEST_CHECK( pushButton.IsSelected() );
177 DALI_TEST_CHECK( gPushButtonSelectedState );
179 pushButton.SetSelected( false );
181 DALI_TEST_CHECK( !pushButton.IsSelected() );
182 DALI_TEST_CHECK( !gPushButtonSelectedState );
184 pushButton.SetSelected( true );
186 DALI_TEST_CHECK( pushButton.IsSelected() );
187 DALI_TEST_CHECK( gPushButtonSelectedState );
191 int UtcDaliPushButtonSetGetSelected02(void)
193 ToolkitTestApplication application;
194 tet_infoline(" UtcDaliPushButtonSetGetSelected02");
196 PushButton pushButton = PushButton::New();
198 pushButton.SetTogglableButton( false );
199 pushButton.StateChangedSignal().Connect( &PushButtonSelected );
201 gPushButtonSelectedState = false;
202 pushButton.SetSelected( true );
204 DALI_TEST_CHECK( !pushButton.IsSelected() );
205 DALI_TEST_CHECK( !gPushButtonSelectedState );
207 pushButton.SetSelected( false );
209 DALI_TEST_CHECK( !pushButton.IsSelected() );
210 DALI_TEST_CHECK( !gPushButtonSelectedState );
212 pushButton.SetSelected( true );
214 DALI_TEST_CHECK( !pushButton.IsSelected() );
215 DALI_TEST_CHECK( !gPushButtonSelectedState );
219 int UtcDaliPushButtonSetGetAutorepeatingDelayValues01(void)
221 ToolkitTestApplication application;
222 tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues01");
224 PushButton pushButton = PushButton::New();
226 pushButton.SetAutoRepeating( true );
228 pushButton.SetInitialAutoRepeatingDelay( 1.f );
229 DALI_TEST_EQUALS( pushButton.GetInitialAutoRepeatingDelay(), 1.f, TEST_LOCATION );
231 pushButton.SetNextAutoRepeatingDelay( 1.f );
232 DALI_TEST_EQUALS( pushButton.GetNextAutoRepeatingDelay(), 1.f, TEST_LOCATION );
236 int UtcDaliPushButtonSetGetAutorepeatingDelayValues02(void)
238 ToolkitTestApplication application;
239 tet_infoline(" UtcDaliPushButtonSetGetAutorepeatingDelayValues02");
241 PushButton pushButton = PushButton::New();
243 bool assert1( false );
244 bool assert2( false );
246 pushButton.SetAutoRepeating( true );
250 pushButton.SetInitialAutoRepeatingDelay( -1.f );
252 catch( Dali::DaliException& e )
254 DALI_TEST_PRINT_ASSERT( e );
255 DALI_TEST_EQUALS(e.condition, "initialAutoRepeatingDelay > 0.f", TEST_LOCATION);
261 pushButton.SetNextAutoRepeatingDelay( -1.f );
263 catch( Dali::DaliException& e )
265 DALI_TEST_PRINT_ASSERT( e );
266 DALI_TEST_EQUALS(e.condition, "nextAutoRepeatingDelay > 0.f", TEST_LOCATION);
270 DALI_TEST_CHECK( assert1 && assert2 );
274 int UtcDaliPushButtonSetImages(void)
276 ToolkitTestApplication application;
277 tet_infoline(" UtcDaliPushButtonSetImages");
281 Image image01 = CreateSolidColorImage( Color::RED, 10, 10 );
284 PushButton pushButton = PushButton::New();
285 Stage::GetCurrent().Add( pushButton );
287 application.SendNotification();
288 application.Render();
290 // Just check if check box button size changes when a bigger image is set.
292 pushButton.SetButtonImage( image01 );
294 application.SendNotification();
295 application.Render();
297 size = pushButton.GetCurrentSize();
299 DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
300 DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
305 int UtcDaliPushButtonSetLabelText(void)
307 ToolkitTestApplication application;
308 tet_infoline(" UtcDaliPushButtonSetLabelText");
310 const std::string STR( "Hola!" );
312 PushButton pushButton = PushButton::New();
314 application.SendNotification();
315 application.Render();
319 pushButton.SetLabel( STR );
321 textView = TextView::DownCast( pushButton.GetLabel() );
322 DALI_TEST_CHECK( STR == textView.GetText() );
324 TextView text = TextView::New( STR );
325 pushButton.SetLabel( text );
327 textView = TextView::DownCast( pushButton.GetLabel() );
328 DALI_TEST_CHECK( STR == textView.GetText() );
332 int UtcDaliPushButtonPressed(void)
334 ToolkitTestApplication application;
335 tet_infoline(" UtcDaliPushButtonPressed");
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 );
343 Stage::GetCurrent().Add( pushButton );
345 application.SendNotification();
346 application.Render();
348 gPushButtonPressed = false;
350 // connect to its touch signal
351 pushButton.PressedSignal().Connect( &PushButtonPressed );
353 Dali::Integration::TouchEvent eventDown;
354 eventDown.AddPoint( pointDownInside );
356 // flush the queue and render once
357 application.SendNotification();
358 application.Render();
359 application.ProcessEvent( eventDown );
361 DALI_TEST_CHECK( gPushButtonPressed );
365 int UtcDaliPushButtonReleased(void)
367 ToolkitTestApplication application;
368 tet_infoline(" UtcDaliPushButtonReleased");
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 );
376 Stage::GetCurrent().Add( pushButton );
378 application.SendNotification();
379 application.Render();
381 // connect to its touch signal
382 pushButton.ReleasedSignal().Connect( &PushButtonReleased );
384 Dali::Integration::TouchEvent event;
386 // Test1. Touch point down and up inside the button.
388 gPushButtonReleased = false;
389 event = Dali::Integration::TouchEvent();
390 event.AddPoint( pointDownInside );
391 application.ProcessEvent( event );
393 event = Dali::Integration::TouchEvent();
394 event.AddPoint( pointUpInside );
395 application.ProcessEvent( event );
397 DALI_TEST_CHECK( gPushButtonReleased );
399 // Test2. Touch point down and up outside the button.
401 gPushButtonReleased = false;
402 event = Dali::Integration::TouchEvent();
403 event.AddPoint( pointDownOutside );
404 application.ProcessEvent( event );
406 event = Dali::Integration::TouchEvent();
407 event.AddPoint( pointUpOutside );
408 application.ProcessEvent( event );
410 DALI_TEST_CHECK( !gPushButtonReleased );
412 // Test3. Touch point down inside and up outside the button.
414 gPushButtonReleased = false;
415 event = Dali::Integration::TouchEvent();
416 event.AddPoint( pointDownInside );
417 application.ProcessEvent( event );
419 event = Dali::Integration::TouchEvent();
420 event.AddPoint( pointLeave );
421 application.ProcessEvent( event );
423 event = Dali::Integration::TouchEvent();
424 event.AddPoint( pointUpOutside );
425 application.ProcessEvent( event );
427 DALI_TEST_CHECK( gPushButtonReleased );
429 // Test4. Touch point down outside and up inside the button.
431 gPushButtonReleased = false;
432 event = Dali::Integration::TouchEvent();
433 event.AddPoint( pointDownOutside );
434 application.ProcessEvent( event );
436 event = Dali::Integration::TouchEvent();
437 event.AddPoint( pointEnter );
438 application.ProcessEvent( event );
440 event = Dali::Integration::TouchEvent();
441 event.AddPoint( pointUpInside );
442 application.ProcessEvent( event );
444 DALI_TEST_CHECK( !gPushButtonReleased );
448 int UtcDaliPushButtonSelected(void)
450 ToolkitTestApplication application;
451 tet_infoline(" UtcDaliPushButtonSelected");
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 );
459 Stage::GetCurrent().Add( pushButton );
461 application.SendNotification();
462 application.Render();
464 // connect to its touch signal
465 pushButton.StateChangedSignal().Connect( &PushButtonSelected );
467 Dali::Integration::TouchEvent event;
469 // Test1. No togglable button.
471 gPushButtonSelectedState = false;
472 event = Dali::Integration::TouchEvent();
473 event.AddPoint( pointDownInside );
474 application.ProcessEvent( event );
476 event = Dali::Integration::TouchEvent();
477 event.AddPoint( pointUpInside );
478 application.ProcessEvent( event );
480 DALI_TEST_CHECK( !gPushButtonSelectedState );
482 // Set togglable property.
483 pushButton.SetTogglableButton( true );
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 );
491 event = Dali::Integration::TouchEvent();
492 event.AddPoint( pointUpInside );
493 application.ProcessEvent( event );
495 DALI_TEST_CHECK( gPushButtonSelectedState );
497 event = Dali::Integration::TouchEvent();
498 event.AddPoint( pointDownInside );
499 application.ProcessEvent( event );
501 event = Dali::Integration::TouchEvent();
502 event.AddPoint( pointUpInside );
503 application.ProcessEvent( event );
505 DALI_TEST_CHECK( !gPushButtonSelectedState );
507 // Test3. Touch point down and up outside the button.
509 gPushButtonSelectedState = false;
510 event = Dali::Integration::TouchEvent();
511 event.AddPoint( pointDownOutside );
512 application.ProcessEvent( event );
514 event = Dali::Integration::TouchEvent();
515 event.AddPoint( pointUpOutside );
516 application.ProcessEvent( event );
518 DALI_TEST_CHECK( !gPushButtonSelectedState );
520 // Test4. Touch point down inside and up outside the button.
522 gPushButtonSelectedState = false;
523 event = Dali::Integration::TouchEvent();
524 event.AddPoint( pointDownInside );
525 application.ProcessEvent( event );
527 event = Dali::Integration::TouchEvent();
528 event.AddPoint( pointLeave );
529 application.ProcessEvent( event );
531 event = Dali::Integration::TouchEvent();
532 event.AddPoint( pointUpOutside );
533 application.ProcessEvent( event );
535 DALI_TEST_CHECK( !gPushButtonSelectedState );
537 // Test5. Touch point down outside and up inside the button.
539 gPushButtonSelectedState = false;
540 event = Dali::Integration::TouchEvent();
541 event.AddPoint( pointDownOutside );
542 application.ProcessEvent( event );
544 event = Dali::Integration::TouchEvent();
545 event.AddPoint( pointEnter );
546 application.ProcessEvent( event );
548 event = Dali::Integration::TouchEvent();
549 event.AddPoint( pointUpInside );
550 application.ProcessEvent( event );
552 DALI_TEST_CHECK( !gPushButtonSelectedState );