2 * Copyright (c) 2015 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-toolkit/dali-toolkit.h>
27 #include "dummy-control.h"
30 using namespace Dali::Toolkit;
32 void utc_dali_toolkit_control_startup(void)
34 test_return_value = TET_UNDEF;
37 void utc_dali_toolkit_control_cleanup(void)
39 test_return_value = TET_PASS;
42 ///////////////////////////////////////////////////////////////////////////////////////////////////
47 bool gObjectCreatedCallBackCalled;
49 void TestCallback(BaseHandle handle)
51 gObjectCreatedCallBackCalled = true;
54 void TestVoidCallback()
58 static bool gKeyInputFocusCallBackCalled;
60 static void TestKeyInputFocusCallback( Control control )
62 tet_infoline(" TestKeyInputFocusCallback");
64 gKeyInputFocusCallBackCalled = true;
69 ///////////////////////////////////////////////////////////////////////////////////////////////////
72 int UtcDaliControlConstructor(void)
74 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
78 DALI_TEST_CHECK( !Control::DownCast(dummy) );
80 dummy = DummyControl::New();
82 DALI_TEST_CHECK( Control::DownCast(dummy) );
86 int UtcDaliControlNew(void)
88 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
92 DALI_TEST_CHECK( !Control::DownCast(control) );
94 control = Control::New();
96 DALI_TEST_CHECK( Control::DownCast(control) );
101 int UtcDaliControlRegister(void)
103 ToolkitTestApplication application;
105 // Ensure the object is registered after creation
106 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
107 DALI_TEST_CHECK( registry );
109 gObjectCreatedCallBackCalled = false;
110 registry.ObjectCreatedSignal().Connect( &TestCallback );
112 Alignment alignment = Alignment::New();
114 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
118 int UtcDaliControlCopyAndAssignment(void)
120 ToolkitTestApplication application;
122 DummyControl control = DummyControl::New();
123 Control emptyControl;
125 Control controlCopy( control );
126 DALI_TEST_CHECK( control == controlCopy );
128 Control emptyControlCopy( emptyControl );
129 DALI_TEST_CHECK( emptyControl == emptyControlCopy );
131 Control controlEquals;
132 controlEquals = control;
133 DALI_TEST_CHECK( control == controlEquals );
135 Control emptyControlEquals;
136 emptyControlEquals = emptyControl;
137 DALI_TEST_CHECK( emptyControl == emptyControlEquals );
141 DALI_TEST_CHECK( control == controlCopy );
145 int UtcDaliControlDownCast(void)
147 ToolkitTestApplication application;
149 DummyControl control;
151 DALI_TEST_CHECK( !Control::DownCast( control ) );
153 control = DummyControl::New();
155 DALI_TEST_CHECK( Control::DownCast( control ) );
159 DALI_TEST_CHECK( !Control::DownCast( actor ) );
161 actor = Actor::New();
163 DALI_TEST_CHECK( !Control::DownCast( actor ) );
167 int UtcDaliControlDownCastTemplate(void)
169 ToolkitTestApplication application;
171 DummyControl control;
173 DALI_TEST_CHECK( !DummyControl::DownCast( control ));
175 control = DummyControl::New();
177 DALI_TEST_CHECK( DummyControl::DownCast( control ) );
181 DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
183 actor = Actor::New();
185 DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
189 int UtcDaliControlKeyInputFocus(void)
191 ToolkitTestApplication application;
192 Stage stage = Stage::GetCurrent();
194 DummyControl control;
196 PushButton pushButton1 = PushButton::New();
197 stage.Add( pushButton1 );
199 pushButton1.SetKeyInputFocus();
200 DALI_TEST_CHECK( pushButton1.HasKeyInputFocus() );
202 pushButton1.ClearKeyInputFocus();
203 DALI_TEST_CHECK( !pushButton1.HasKeyInputFocus() );
207 int UtcDaliControlGetImplementation(void)
209 ToolkitTestApplication application;
211 DummyControl control;
217 Toolkit::Internal::Control& controlImpl = control.GetImplementation();
218 (void)controlImpl; // Avoid unused warning
219 tet_result(TET_FAIL);
221 catch (DaliException &exception)
223 tet_result(TET_PASS);
231 const DummyControl constControl(control);
232 const Toolkit::Internal::Control& controlImpl = constControl.GetImplementation();
233 (void)controlImpl; // Avoid unused warning
234 tet_result(TET_FAIL);
236 catch (DaliException &exception)
238 tet_result(TET_PASS);
242 control = DummyControl::New();
248 Toolkit::Internal::Control& controlImpl = control.GetImplementation();
249 (void)controlImpl; // Avoid unused warning
250 tet_result(TET_PASS);
252 catch (DaliException &exception)
254 tet_result(TET_FAIL);
262 const DummyControl constControl(control);
263 const Toolkit::Internal::Control& controlImpl = constControl.GetImplementation();
264 (void)controlImpl; // Avoid unused warning
265 tet_result(TET_PASS);
267 catch (DaliException &exception)
269 tet_result(TET_FAIL);
275 int UtcDaliControlSignalConnectDisconnect(void)
277 ToolkitTestApplication application;
280 DummyControl dummy = DummyControlImpl::New();
282 Actor actor = Actor::New();
283 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 0u, TEST_LOCATION );
284 Toolkit::Internal::Control& control = dummy.GetImplementation();
285 DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
286 DALI_TEST_CHECK( dummyImpl );
288 actor.OnStageSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
289 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 1u, TEST_LOCATION );
290 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
292 Stage::GetCurrent().Add( actor );
293 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
295 dummyImpl->mCustomSlot1Called = false;
296 actor.OnStageSignal().Disconnect( dummyImpl, &DummyControlImpl::CustomSlot1 );
297 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 0u, TEST_LOCATION );
298 Stage::GetCurrent().Remove( actor );
299 Stage::GetCurrent().Add( actor );
300 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
305 int UtcDaliControlSignalAutomaticDisconnect(void)
307 ToolkitTestApplication application;
309 Actor actor = Actor::New();
312 DummyControl dummy = DummyControlImpl::New();
313 Toolkit::Internal::Control& control = dummy.GetImplementation();
314 DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
315 DALI_TEST_CHECK( dummyImpl );
317 actor.OnStageSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
318 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 1u, TEST_LOCATION );
319 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
321 Stage::GetCurrent().Add( actor );
322 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
323 Stage::GetCurrent().Remove( actor );
325 // dummyControl automatically disconnects
327 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 0u, TEST_LOCATION );
329 const Vector3 ignoredSize( 20, 20, 0 );
330 actor.SetSize( ignoredSize );
334 int UtcDaliControlTestParameters(void)
336 ToolkitTestApplication application;
337 DummyControl test = DummyControl::New();
339 test.SetSize( 0.7f, 0.7f, 0.7f );
341 Stage::GetCurrent().Add( test );
343 application.SendNotification();
344 application.Render();
346 float width = 640.0f;
347 float height = test.GetHeightForWidth( width );
348 DALI_TEST_EQUALS( 640.0f, height, TEST_LOCATION );
349 DALI_TEST_EQUALS( 640.0f, test.GetWidthForHeight( height ), TEST_LOCATION );
351 test.KeyEventSignal();
353 // Provide coverage for pointer destructor
354 Control* testControlPtr = new Control;
355 DALI_TEST_CHECK( testControlPtr );
356 delete testControlPtr;
360 int UtcDaliControlBackgroundColor(void)
362 ToolkitTestApplication application;
363 Control control = Control::New();
365 DALI_TEST_CHECK( !control.GetBackgroundActor() );
366 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
368 control.SetBackgroundColor( Color::RED );
369 DALI_TEST_CHECK( control.GetBackgroundActor() );
370 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
375 int UtcDaliControlBackgroundImage(void)
377 ToolkitTestApplication application;
378 Control control = Control::New();
380 DALI_TEST_CHECK( !control.GetBackgroundActor() );
381 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
383 Image image = ResourceImage::New("TestImage");
384 control.SetBackgroundImage( image );
385 DALI_TEST_CHECK( control.GetBackgroundActor() );
386 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::WHITE, TEST_LOCATION );
388 control.SetBackgroundColor( Color::GREEN );
389 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::GREEN, TEST_LOCATION );
391 control.ClearBackground();
392 DALI_TEST_CHECK( !control.GetBackgroundActor() );
393 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
395 control.SetBackgroundColor( Color::YELLOW );
396 control.SetBackgroundImage( image );
397 DALI_TEST_CHECK( control.GetBackgroundActor() );
398 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::YELLOW, TEST_LOCATION );
403 int UtcDaliControlBackgroundProperties(void)
405 ToolkitTestApplication application;
406 Control control = Control::New();
408 DALI_TEST_CHECK( !control.GetBackgroundActor() );
409 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
410 DALI_TEST_EQUALS( control.GetProperty( Control::Property::BACKGROUND_COLOR ).Get< Vector4 >(), Color::TRANSPARENT, TEST_LOCATION );
411 DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND_IMAGE ).Get< Property::Map >().Empty() );
413 control.SetProperty( Control::Property::BACKGROUND_COLOR, Color::RED );
414 DALI_TEST_CHECK( control.GetBackgroundActor() );
415 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
416 DALI_TEST_EQUALS( control.GetProperty( Control::Property::BACKGROUND_COLOR ).Get< Vector4 >(), Color::RED, TEST_LOCATION );
418 Property::Map imageMap;
419 imageMap[ "filename" ] = "TestImage";
421 map[ "image" ] = imageMap;
422 control.SetProperty( Control::Property::BACKGROUND_IMAGE, map );
423 DALI_TEST_CHECK( control.GetBackgroundActor() );
424 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
425 DALI_TEST_EQUALS( control.GetProperty( Control::Property::BACKGROUND_COLOR ).Get< Vector4 >(), Color::RED, TEST_LOCATION );
427 Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND_IMAGE );
428 DALI_TEST_CHECK( propValue.HasKey( "image" ) );
429 DALI_TEST_CHECK( propValue.GetValue( "image" ).HasKey( "filename" ) );
430 DALI_TEST_CHECK( propValue.GetValue( "image" ).GetValue( "filename" ).Get< std::string>() == "TestImage" );
432 Property::Map emptyMap;
433 control.SetProperty( Control::Property::BACKGROUND_IMAGE, emptyMap );
434 DALI_TEST_CHECK( !control.GetBackgroundActor() );
435 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
436 DALI_TEST_EQUALS( control.GetProperty( Control::Property::BACKGROUND_COLOR ).Get< Vector4 >(), Color::TRANSPARENT, TEST_LOCATION );
437 DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND_IMAGE ).Get< Property::Map >().Empty() );
442 int UtcDaliControlKeyProperties(void)
444 ToolkitTestApplication application;
446 Control control = Control::New();
447 Stage::GetCurrent().Add( control );
449 DALI_TEST_EQUALS( control.HasKeyInputFocus(), control.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
451 control.SetKeyInputFocus();
452 DALI_TEST_EQUALS( true, control.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
454 control.ClearKeyInputFocus();
455 DALI_TEST_EQUALS( false, control.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
457 control.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
458 DALI_TEST_EQUALS( true, control.HasKeyInputFocus(), TEST_LOCATION );
463 int UtcDaliControlGestureSignals(void)
465 ToolkitTestApplication application;
466 ConnectionTracker connectionTracker;
467 Control control = Control::New();
469 // Each gesture detector gets created when connecting to the gesture signals
470 DALI_TEST_CHECK( !control.GetTapGestureDetector() );
471 control.ConnectSignal( &connectionTracker, "tapped", &TestVoidCallback );
472 DALI_TEST_CHECK( control.GetTapGestureDetector() );
474 DALI_TEST_CHECK( !control.GetPanGestureDetector() );
475 control.ConnectSignal( &connectionTracker, "panned", &TestVoidCallback );
476 DALI_TEST_CHECK( control.GetPanGestureDetector() );
478 DALI_TEST_CHECK( !control.GetPinchGestureDetector() );
479 control.ConnectSignal( &connectionTracker, "pinched", &TestVoidCallback );
480 DALI_TEST_CHECK( control.GetPinchGestureDetector() );
482 DALI_TEST_CHECK( !control.GetLongPressGestureDetector() );
483 control.ConnectSignal( &connectionTracker, "long-pressed", &TestVoidCallback );
484 DALI_TEST_CHECK( control.GetLongPressGestureDetector() );
489 int UtcDaliControlImplKeyInputFocusGainedSignal(void)
491 ToolkitTestApplication application;
493 Control control = Control::New();
494 Stage::GetCurrent().Add( control );
496 gKeyInputFocusCallBackCalled = false;
497 control.KeyInputFocusGainedSignal().Connect(&TestKeyInputFocusCallback);
499 application.SendNotification();
500 application.Render();
502 control.SetKeyInputFocus();
504 DALI_TEST_CHECK( control.HasKeyInputFocus() );
506 DALI_TEST_CHECK( gKeyInputFocusCallBackCalled );
511 int UtcDaliControlImplKeyInputFocusLostSignal(void)
513 ToolkitTestApplication application;
515 Control control = Control::New();
516 Stage::GetCurrent().Add( control );
518 gKeyInputFocusCallBackCalled = false;
519 control.KeyInputFocusLostSignal().Connect(&TestKeyInputFocusCallback);
521 application.SendNotification();
522 application.Render();
524 control.SetKeyInputFocus();
526 DALI_TEST_CHECK( control.HasKeyInputFocus() );
528 control.ClearKeyInputFocus();
530 DALI_TEST_CHECK( gKeyInputFocusCallBackCalled );