2 * Copyright (c) 2016 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 UtcDaliControlGetImplementationN(void)
209 ToolkitTestApplication application;
210 DummyControl control;
216 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( control );
217 (void)controlImpl; // Avoid unused warning
218 tet_result(TET_FAIL);
220 catch (DaliException &exception)
222 tet_result(TET_PASS);
228 int UtcDaliControlGetImplementationConstN(void)
230 ToolkitTestApplication application;
231 DummyControl control;
237 const DummyControl constControl(control);
238 const Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( constControl );
239 (void)controlImpl; // Avoid unused warning
240 tet_result(TET_FAIL);
242 catch (DaliException &exception)
244 tet_result(TET_PASS);
250 int UtcDaliControlGetImplementationP(void)
252 ToolkitTestApplication application;
253 DummyControl control = DummyControl::New();
259 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( control );
260 (void)controlImpl; // Avoid unused warning
261 tet_result(TET_PASS);
263 catch (DaliException &exception)
265 tet_result(TET_FAIL);
271 int UtcDaliControlGetImplementationConstP(void)
273 ToolkitTestApplication application;
274 DummyControl control = DummyControl::New();
279 const DummyControl constControl(control);
280 const Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( constControl );
281 (void)controlImpl; // Avoid unused warning
282 tet_result(TET_PASS);
284 catch (DaliException &exception)
286 tet_result(TET_FAIL);
292 int UtcDaliControlSignalConnectDisconnect(void)
294 ToolkitTestApplication application;
297 DummyControl dummy = DummyControlImpl::New();
299 Actor actor = Actor::New();
300 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 0u, TEST_LOCATION );
301 Toolkit::Internal::Control& control = Toolkit::Internal::GetImplementation( dummy );
302 DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
304 if( dummyImpl == NULL )
306 tet_result( TET_FAIL );
310 actor.OnStageSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
311 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 1u, TEST_LOCATION );
312 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
314 Stage::GetCurrent().Add( actor );
315 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
317 dummyImpl->mCustomSlot1Called = false;
318 actor.OnStageSignal().Disconnect( dummyImpl, &DummyControlImpl::CustomSlot1 );
319 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 0u, TEST_LOCATION );
320 Stage::GetCurrent().Remove( actor );
321 Stage::GetCurrent().Add( actor );
322 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
327 int UtcDaliControlSignalAutomaticDisconnect(void)
329 ToolkitTestApplication application;
331 Actor actor = Actor::New();
334 DummyControl dummy = DummyControlImpl::New();
335 Toolkit::Internal::Control& control = Toolkit::Internal::GetImplementation( dummy );
336 DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
338 if( dummyImpl == NULL )
340 tet_result( TET_FAIL );
344 actor.OnStageSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
345 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 1u, TEST_LOCATION );
346 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
348 Stage::GetCurrent().Add( actor );
349 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
350 Stage::GetCurrent().Remove( actor );
352 // dummyControl automatically disconnects
354 DALI_TEST_EQUALS( actor.OnStageSignal().GetConnectionCount(), 0u, TEST_LOCATION );
356 const Vector3 ignoredSize( 20, 20, 0 );
357 actor.SetSize( ignoredSize );
361 int UtcDaliControlTestParameters(void)
363 ToolkitTestApplication application;
364 DummyControl test = DummyControl::New();
366 test.SetSize( 0.7f, 0.7f, 0.7f );
368 Stage::GetCurrent().Add( test );
370 application.SendNotification();
371 application.Render();
373 float width = 640.0f;
374 float height = test.GetHeightForWidth( width );
375 DALI_TEST_EQUALS( 640.0f, height, TEST_LOCATION );
376 DALI_TEST_EQUALS( 640.0f, test.GetWidthForHeight( height ), TEST_LOCATION );
378 test.KeyEventSignal();
380 // Provide coverage for pointer destructor
381 Control* testControlPtr = new Control;
382 DALI_TEST_CHECK( testControlPtr );
383 delete testControlPtr;
387 int UtcDaliControlBackgroundColor(void)
389 ToolkitTestApplication application;
390 Control control = Control::New();
392 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
394 control.SetBackgroundColor( Color::RED );
396 Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND );
397 Property::Map* resultMap = propValue.GetMap();
398 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
399 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE )->Get<int>() == Visual::COLOR );
400 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
401 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>() == Color::RED );
403 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
405 control.SetBackgroundColor( Color::YELLOW );
407 propValue = control.GetProperty( Control::Property::BACKGROUND );
408 resultMap = propValue.GetMap();
409 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
410 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>() == Color::YELLOW );
412 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::YELLOW, TEST_LOCATION );
417 int UtcDaliControlBackgroundImage(void)
419 ToolkitTestApplication application;
420 Control control = Control::New();
422 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
424 Image image = ResourceImage::New("TestImage");
425 control.SetBackgroundImage( image );
427 Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND );
428 Property::Map* resultMap = propValue.GetMap();
429 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
430 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE )->Get<int>() == Visual::IMAGE );
431 DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) );
432 DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>() == "TestImage" );
434 image = ResourceImage::New("TestImage2");
435 control.SetBackgroundImage( image );
437 propValue = control.GetProperty( Control::Property::BACKGROUND );
438 resultMap = propValue.GetMap();
439 DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) );
440 DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>() == "TestImage2" );
445 int UtcDaliControlBackgroundProperties(void)
447 ToolkitTestApplication application;
448 Control control = Control::New();
450 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
451 DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND ).Get< Property::Map >().Empty() );
453 Property::Map imageMap;
454 imageMap[ Visual::Property::TYPE ] = Visual::IMAGE;
455 imageMap[ ImageVisual::Property::URL ] = "TestImage";
456 control.SetProperty( Control::Property::BACKGROUND, imageMap );
457 Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND );
458 Property::Map* resultMap = propValue.GetMap();
459 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
460 DALI_TEST_EQUALS( resultMap->Find( Visual::Property::TYPE )->Get<int>(),(int)Visual::IMAGE, TEST_LOCATION );
461 DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) );
462 DALI_TEST_EQUALS( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>(), "TestImage", TEST_LOCATION );
464 Property::Map rendererMap;
465 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
466 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
467 control.SetProperty( Control::Property::BACKGROUND, rendererMap );
468 propValue = control.GetProperty( Control::Property::BACKGROUND );
469 resultMap = propValue.GetMap();
470 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
471 DALI_TEST_EQUALS( resultMap->Find( Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
472 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
473 DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::CYAN, TEST_LOCATION );
475 Property::Map emptyMap;
476 control.SetProperty( Control::Property::BACKGROUND, emptyMap );
477 DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND ).Get< Property::Map >().Empty() );
480 control.SetProperty( Control::Property::BACKGROUND, "Foobar.png" );
481 propValue = control.GetProperty( Control::Property::BACKGROUND );
482 resultMap = propValue.GetMap();
483 DALI_TEST_EQUALS( resultMap->Find( Visual::Property::TYPE )->Get<int>(), (int)Visual::IMAGE, TEST_LOCATION );
484 DALI_TEST_EQUALS( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>(), "Foobar.png", TEST_LOCATION );
486 // Deprecated Properties
487 control.SetProperty( Control::Property::BACKGROUND_COLOR, Color::YELLOW );
488 DALI_TEST_EQUALS( control.GetProperty( Control::Property::BACKGROUND_COLOR ).Get< Vector4 >(), Color::YELLOW, TEST_LOCATION );
489 DALI_TEST_EQUALS( control.GetProperty( Control::Property::BACKGROUND_COLOR ).Get< Vector4 >(), control.GetBackgroundColor(), TEST_LOCATION );
491 control.ClearBackground();
493 Property::Map deprecatedImageMap;
494 deprecatedImageMap[ "filename" ] = "TestImage";
495 control.SetProperty( Control::Property::BACKGROUND_IMAGE, deprecatedImageMap );
496 propValue = control.GetProperty( Control::Property::BACKGROUND_IMAGE );
497 resultMap = propValue.GetMap();
498 DALI_TEST_EQUALS( resultMap->Find( ImageVisual::Property::URL )->Get< std::string >(), "TestImage" , TEST_LOCATION );
500 control.SetProperty( Control::Property::BACKGROUND_IMAGE, emptyMap );
501 DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND_IMAGE ).Get< Property::Map >().Empty() );
506 int UtcDaliControlKeyProperties(void)
508 ToolkitTestApplication application;
510 Control control = Control::New();
511 Stage::GetCurrent().Add( control );
513 DALI_TEST_EQUALS( control.HasKeyInputFocus(), control.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
515 control.SetKeyInputFocus();
516 DALI_TEST_EQUALS( true, control.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
518 control.ClearKeyInputFocus();
519 DALI_TEST_EQUALS( false, control.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
521 control.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
522 DALI_TEST_EQUALS( true, control.HasKeyInputFocus(), TEST_LOCATION );
527 int UtcDaliControlGestureSignals(void)
529 ToolkitTestApplication application;
530 ConnectionTracker connectionTracker;
531 Control control = Control::New();
533 // Each gesture detector gets created when connecting to the gesture signals
534 DALI_TEST_CHECK( !control.GetTapGestureDetector() );
535 control.ConnectSignal( &connectionTracker, "tapped", &TestVoidCallback );
536 DALI_TEST_CHECK( control.GetTapGestureDetector() );
538 DALI_TEST_CHECK( !control.GetPanGestureDetector() );
539 control.ConnectSignal( &connectionTracker, "panned", &TestVoidCallback );
540 DALI_TEST_CHECK( control.GetPanGestureDetector() );
542 DALI_TEST_CHECK( !control.GetPinchGestureDetector() );
543 control.ConnectSignal( &connectionTracker, "pinched", &TestVoidCallback );
544 DALI_TEST_CHECK( control.GetPinchGestureDetector() );
546 DALI_TEST_CHECK( !control.GetLongPressGestureDetector() );
547 control.ConnectSignal( &connectionTracker, "longPressed", &TestVoidCallback );
548 DALI_TEST_CHECK( control.GetLongPressGestureDetector() );
553 int UtcDaliControlImplKeyInputFocusGainedSignal(void)
555 ToolkitTestApplication application;
557 Control control = Control::New();
558 Stage::GetCurrent().Add( control );
560 gKeyInputFocusCallBackCalled = false;
561 control.KeyInputFocusGainedSignal().Connect(&TestKeyInputFocusCallback);
563 application.SendNotification();
564 application.Render();
566 control.SetKeyInputFocus();
568 DALI_TEST_CHECK( control.HasKeyInputFocus() );
570 DALI_TEST_CHECK( gKeyInputFocusCallBackCalled );
575 int UtcDaliControlImplKeyInputFocusLostSignal(void)
577 ToolkitTestApplication application;
579 Control control = Control::New();
580 Stage::GetCurrent().Add( control );
582 gKeyInputFocusCallBackCalled = false;
583 control.KeyInputFocusLostSignal().Connect(&TestKeyInputFocusCallback);
585 application.SendNotification();
586 application.Render();
588 control.SetKeyInputFocus();
590 DALI_TEST_CHECK( control.HasKeyInputFocus() );
592 control.ClearKeyInputFocus();
594 DALI_TEST_CHECK( gKeyInputFocusCallBackCalled );
599 int UtcDaliControlImplGetControlExtensionP(void)
601 ToolkitTestApplication application;
602 Control control = Control::New();
604 Toolkit::Internal::Control& controlImpl = Toolkit::Internal::GetImplementation( control );
606 DALI_TEST_CHECK( NULL == controlImpl.GetControlExtension() );