2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.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://floralicense.org/license/
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.
22 #include <dali/public-api/dali-core.h>
23 #include <dali/integration-api/events/touch-event-integ.h>
24 #include <dali-toolkit/public-api/controls/buttons/check-box-button.h>
25 #include <dali-toolkit/public-api/controls/buttons/push-button.h>
26 #include <dali-toolkit/public-api/controls/default-controls/solid-color-actor.h>
28 #include <dali-toolkit-test-suite-utils.h>
31 using namespace Toolkit;
35 static bool gButtonClicked = false;
37 static bool ButtonClicked( Button button )
39 gButtonClicked = true;
43 const Dali::TouchPoint pointDownInside( 0, TouchPoint::Down, 240, 400 );
44 const Dali::TouchPoint pointUpInside( 0, TouchPoint::Up, 240, 400 );
45 const Dali::TouchPoint pointLeave( 0, TouchPoint::Leave, 240, 400 );
46 const Dali::TouchPoint pointEnter( 0, TouchPoint::Motion, 240, 400 );
47 const Dali::TouchPoint pointDownOutside( 0, TouchPoint::Down, 10, 10 );
48 const Dali::TouchPoint pointUpOutside( 0, TouchPoint::Up, 10, 10 );
50 static bool gObjectCreatedCallBackCalled;
52 static void TestObjectCreatedCallback(BaseHandle handle)
54 gObjectCreatedCallBackCalled = true;
57 static float ANIMATION_TIME( 0.5f );
60 static void Startup();
61 static void Cleanup();
64 void (*tet_startup)() = Startup;
65 void (*tet_cleanup)() = Cleanup;
69 POSITIVE_TC_IDX = 0x01,
73 #define MAX_NUMBER_OF_TESTS 10000
75 struct tet_testlist tet_testlist[MAX_NUMBER_OF_TESTS];
78 // Add test functionality for all APIs in the class (Positive and Negative)
79 TEST_FUNCTION( UtcDaliButtonNew, POSITIVE_TC_IDX );
80 TEST_FUNCTION( UtcDaliButtonProperties, POSITIVE_TC_IDX );
81 TEST_FUNCTION( UtcDaliButtonSetGetDimmed, POSITIVE_TC_IDX );
82 TEST_FUNCTION( UtcDaliButtonSize, POSITIVE_TC_IDX );
83 TEST_FUNCTION( UtcDaliButtonClicked, POSITIVE_TC_IDX );
84 TEST_FUNCTION( UtcDaliButtonConnectSignal, POSITIVE_TC_IDX );
85 TEST_FUNCTION( UtcDaliButtonSetGetAnimationTime, POSITIVE_TC_IDX );
87 // Called only once before first test is run.
92 // Called only once after last test is run
98 // Positive test case for a method
99 static void UtcDaliButtonNew()
101 ToolkitTestApplication application;
102 tet_infoline(" UtcDaliButtonNew");
104 CheckBoxButton checkBoxButton = CheckBoxButton::New();
106 DALI_TEST_CHECK( checkBoxButton );
108 PushButton pushButton = PushButton::New();
110 DALI_TEST_CHECK( pushButton );
112 CheckBoxButton checkBoxButton2( checkBoxButton );
114 DALI_TEST_CHECK( checkBoxButton2 );
116 PushButton pushButton2( pushButton );
118 DALI_TEST_CHECK( pushButton2 );
120 checkBoxButton2 = NULL;
124 //Additional check to ensure object is created by checking if it's registered
125 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
126 DALI_TEST_CHECK( registry );
128 gObjectCreatedCallBackCalled = false;
129 registry.ObjectCreatedSignal().Connect( &TestObjectCreatedCallback );
131 CheckBoxButton checkBoxButton = CheckBoxButton::New();
133 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
135 gObjectCreatedCallBackCalled = false;
136 registry.ObjectCreatedSignal().Connect( &TestObjectCreatedCallback );
138 PushButton pushButton = PushButton::New();
140 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
144 handleButton = pushButton;
145 Button downCastPushButton = Button::DownCast( handleButton );
146 DALI_TEST_CHECK( downCastPushButton );
147 PushButton downCastPushButton2 = PushButton::DownCast( handleButton );
148 DALI_TEST_CHECK( downCastPushButton2 );
150 handleButton = checkBoxButton;
151 Button downCastCheckBoxButton = Button::DownCast( handleButton );
152 DALI_TEST_CHECK( downCastCheckBoxButton );
153 CheckBoxButton downCastCheckBoxButton2 = CheckBoxButton::DownCast( handleButton );
154 DALI_TEST_CHECK( downCastCheckBoxButton2 );
157 static void UtcDaliButtonProperties()
159 tet_infoline("UtcDaliButtonSetProperty: ");
160 ToolkitTestApplication application;
162 CheckBoxButton checkBoxButton = CheckBoxButton::New();
163 PushButton pushButton = PushButton::New();
165 //Test various properties
166 checkBoxButton.SetProperty( Button::PROPERTY_DIMMED, false );
167 DALI_TEST_CHECK( false == checkBoxButton.IsDimmed() );
168 DALI_TEST_CHECK( false == checkBoxButton.GetProperty< bool >( Button::PROPERTY_DIMMED ) );
169 checkBoxButton.SetProperty( Button::PROPERTY_DIMMED, true );
170 DALI_TEST_CHECK( true == checkBoxButton.IsDimmed() );
171 DALI_TEST_CHECK( true == checkBoxButton.GetProperty< bool >( Button::PROPERTY_DIMMED ) );
173 pushButton.SetProperty( Button::PROPERTY_DIMMED, false );
174 DALI_TEST_CHECK( false == pushButton.IsDimmed() );
175 DALI_TEST_CHECK( false == pushButton.GetProperty< bool >( Button::PROPERTY_DIMMED ) );
176 pushButton.SetProperty( Button::PROPERTY_DIMMED, true );
177 DALI_TEST_CHECK( true == pushButton.IsDimmed() );
178 DALI_TEST_CHECK( true == pushButton.GetProperty< bool >( Button::PROPERTY_DIMMED ) );
181 static void UtcDaliButtonSetGetDimmed()
183 ToolkitTestApplication application;
184 tet_infoline(" UtcDaliButtonSetGetDimmed");
186 CheckBoxButton checkBoxButton = CheckBoxButton::New();
187 PushButton pushButton = PushButton::New();
189 checkBoxButton.SetDimmed( true );
190 pushButton.SetDimmed( true );
192 DALI_TEST_CHECK( checkBoxButton.IsDimmed() );
193 DALI_TEST_CHECK( pushButton.IsDimmed() );
195 checkBoxButton.SetDimmed( false );
196 pushButton.SetDimmed( false );
198 DALI_TEST_CHECK( !checkBoxButton.IsDimmed() );
199 DALI_TEST_CHECK( !pushButton.IsDimmed() );
201 checkBoxButton.SetDimmed( true );
202 pushButton.SetDimmed( true );
204 DALI_TEST_CHECK( checkBoxButton.IsDimmed() );
205 DALI_TEST_CHECK( pushButton.IsDimmed() );
207 checkBoxButton.SetDimmed( false );
208 pushButton.SetDimmed( false );
210 DALI_TEST_CHECK( !checkBoxButton.IsDimmed() );
211 DALI_TEST_CHECK( !pushButton.IsDimmed() );
214 static void UtcDaliButtonSize()
216 ToolkitTestApplication application;
217 tet_infoline(" UtcDaliButtonSize");
219 // Creates 100x50 images.
220 ImageActor image01 = CreateSolidColorActor( Color::RED );
221 image01.SetSize( 100, 50 );
223 CheckBoxButton checkBoxButton;
224 PushButton pushButton;
228 // Test1 Size is set through Actor API
230 // First an image is set, then SetSize is called.
231 pushButton = PushButton::New();
233 pushButton.SetBackgroundImage( image01 );
234 pushButton.SetSize( 10.f, 10.f );
236 application.SendNotification();
237 application.Render();
239 size = pushButton.GetCurrentSize();
241 DALI_TEST_EQUALS( size.width, 10.f, TEST_LOCATION );
242 DALI_TEST_EQUALS( size.height, 10.f, TEST_LOCATION );
245 static void UtcDaliButtonClicked()
247 ToolkitTestApplication application;
248 tet_infoline(" UtcDaliButtonClicked");
250 PushButton pushButton = PushButton::New();
251 pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
252 pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
253 pushButton.SetPosition( 240, 400 );
254 pushButton.SetSize( 100, 100 );
256 Stage::GetCurrent().Add( pushButton );
258 application.SendNotification();
259 application.Render();
261 // connect to its touch signal
262 pushButton.ClickedSignal().Connect( &ButtonClicked );
264 Dali::Integration::TouchEvent event;
266 // Test1. Touch point down and up inside the button.
268 gButtonClicked = false;
269 event = Dali::Integration::TouchEvent();
270 event.AddPoint( pointDownInside );
271 application.GetCore().SendEvent( event );
273 event = Dali::Integration::TouchEvent();
274 event.AddPoint( pointUpInside );
275 application.GetCore().SendEvent( event );
277 DALI_TEST_CHECK( gButtonClicked );
279 // Test2. Touch point down and up outside the button.
281 gButtonClicked = false;
282 event = Dali::Integration::TouchEvent();
283 event.AddPoint( pointDownOutside );
284 application.GetCore().SendEvent( event );
286 event = Dali::Integration::TouchEvent();
287 event.AddPoint( pointUpOutside );
288 application.GetCore().SendEvent( event );
290 DALI_TEST_CHECK( !gButtonClicked );
292 // Test3. Touch point down inside and up outside the button.
294 gButtonClicked = false;
295 event = Dali::Integration::TouchEvent();
296 event.AddPoint( pointDownInside );
297 application.GetCore().SendEvent( event );
299 event = Dali::Integration::TouchEvent();
300 event.AddPoint( pointLeave );
301 application.GetCore().SendEvent( event );
303 event = Dali::Integration::TouchEvent();
304 event.AddPoint( pointUpOutside );
305 application.GetCore().SendEvent( event );
307 DALI_TEST_CHECK( !gButtonClicked );
309 // Test4. Touch point down outside and up inside the button.
311 gButtonClicked = false;
312 event = Dali::Integration::TouchEvent();
313 event.AddPoint( pointDownOutside );
314 application.GetCore().SendEvent( event );
316 event = Dali::Integration::TouchEvent();
317 event.AddPoint( pointEnter );
318 application.GetCore().SendEvent( event );
320 event = Dali::Integration::TouchEvent();
321 event.AddPoint( pointUpInside );
322 application.GetCore().SendEvent( event );
324 DALI_TEST_CHECK( !gButtonClicked );
327 static bool gClickedCallBackCalled;
329 static bool TestClickedCallback(Button button)
331 gClickedCallBackCalled = true;
335 static void UtcDaliButtonConnectSignal()
337 ToolkitTestApplication application;
338 tet_infoline("UtcDaliButtonConnectSignal()");
340 gClickedCallBackCalled = false;
342 PushButton pushButton = PushButton::New();
343 pushButton.SetAnchorPoint( AnchorPoint::TOP_LEFT );
344 pushButton.SetParentOrigin( ParentOrigin::TOP_LEFT );
345 pushButton.SetPosition( 240, 400 );
346 pushButton.SetSize( 100, 100 );
348 Stage::GetCurrent().Add( pushButton );
350 application.SendNotification();
351 application.Render();
353 // connect to its clicked signal
354 pushButton.ClickedSignal().Connect(TestClickedCallback);
356 Dali::Integration::TouchEvent event;
358 // Touch point down and up inside the button.
360 event = Dali::Integration::TouchEvent();
361 event.AddPoint( pointDownInside );
362 application.GetCore().SendEvent( event );
364 event = Dali::Integration::TouchEvent();
365 event.AddPoint( pointUpInside );
366 application.GetCore().SendEvent( event );
368 DALI_TEST_CHECK( gClickedCallBackCalled == true );
370 gClickedCallBackCalled = false;
371 pushButton.ClickedSignal().Disconnect(TestClickedCallback);
373 // simulate another touch event
374 application.GetCore().SendEvent( event );
376 DALI_TEST_CHECK( gClickedCallBackCalled == false );
379 static void UtcDaliButtonSetGetAnimationTime()
381 ToolkitTestApplication application;
382 tet_infoline(" UtcDaliButtonSetGetAnimationTime");
384 CheckBoxButton checkBoxButton = CheckBoxButton::New();
385 PushButton pushButton = PushButton::New();
387 checkBoxButton.SetAnimationTime( ANIMATION_TIME );
388 pushButton.SetAnimationTime( ANIMATION_TIME );
390 DALI_TEST_EQUALS( checkBoxButton.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );
391 DALI_TEST_EQUALS( pushButton.GetAnimationTime(), ANIMATION_TIME, TEST_LOCATION );