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-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()
60 ///////////////////////////////////////////////////////////////////////////////////////////////////
63 int UtcDaliControlConstructor(void)
65 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
69 DALI_TEST_CHECK( !Control::DownCast(dummy) );
71 dummy = DummyControl::New();
73 DALI_TEST_CHECK( Control::DownCast(dummy) );
77 int UtcDaliControlNew(void)
79 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
83 DALI_TEST_CHECK( !Control::DownCast(control) );
85 control = Control::New();
87 DALI_TEST_CHECK( Control::DownCast(control) );
92 int UtcDaliControlRegister(void)
94 ToolkitTestApplication application;
96 // Ensure the object is registered after creation
97 ObjectRegistry registry = Stage::GetCurrent().GetObjectRegistry();
98 DALI_TEST_CHECK( registry );
100 gObjectCreatedCallBackCalled = false;
101 registry.ObjectCreatedSignal().Connect( &TestCallback );
103 Alignment alignment = Alignment::New();
105 DALI_TEST_CHECK( gObjectCreatedCallBackCalled );
109 int UtcDaliControlCopyAndAssignment(void)
111 ToolkitTestApplication application;
113 DummyControl control = DummyControl::New();
114 Control emptyControl;
116 Control controlCopy( control );
117 DALI_TEST_CHECK( control == controlCopy );
119 Control emptyControlCopy( emptyControl );
120 DALI_TEST_CHECK( emptyControl == emptyControlCopy );
122 Control controlEquals;
123 controlEquals = control;
124 DALI_TEST_CHECK( control == controlEquals );
126 Control emptyControlEquals;
127 emptyControlEquals = emptyControl;
128 DALI_TEST_CHECK( emptyControl == emptyControlEquals );
132 DALI_TEST_CHECK( control == controlCopy );
136 int UtcDaliControlDownCast(void)
138 ToolkitTestApplication application;
140 DummyControl control;
142 DALI_TEST_CHECK( !Control::DownCast( control ) );
144 control = DummyControl::New();
146 DALI_TEST_CHECK( Control::DownCast( control ) );
150 DALI_TEST_CHECK( !Control::DownCast( actor ) );
152 actor = Actor::New();
154 DALI_TEST_CHECK( !Control::DownCast( actor ) );
158 int UtcDaliControlDownCastTemplate(void)
160 ToolkitTestApplication application;
162 DummyControl control;
164 DALI_TEST_CHECK( !DummyControl::DownCast( control ));
166 control = DummyControl::New();
168 DALI_TEST_CHECK( DummyControl::DownCast( control ) );
172 DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
174 actor = Actor::New();
176 DALI_TEST_CHECK( !DummyControl::DownCast( actor ) );
180 int UtcDaliControlKeyInputFocus(void)
182 ToolkitTestApplication application;
183 Stage stage = Stage::GetCurrent();
185 DummyControl control;
187 PushButton pushButton1 = PushButton::New();
188 stage.Add( pushButton1 );
190 pushButton1.SetKeyInputFocus();
191 DALI_TEST_CHECK( pushButton1.HasKeyInputFocus() );
193 pushButton1.ClearKeyInputFocus();
194 DALI_TEST_CHECK( !pushButton1.HasKeyInputFocus() );
198 int UtcDaliControlGetImplementation(void)
200 ToolkitTestApplication application;
202 DummyControl control;
208 Toolkit::Internal::Control& controlImpl = control.GetImplementation();
209 (void)controlImpl; // Avoid unused warning
210 tet_result(TET_FAIL);
212 catch (DaliException &exception)
214 tet_result(TET_PASS);
222 const DummyControl constControl(control);
223 const Toolkit::Internal::Control& controlImpl = constControl.GetImplementation();
224 (void)controlImpl; // Avoid unused warning
225 tet_result(TET_FAIL);
227 catch (DaliException &exception)
229 tet_result(TET_PASS);
233 control = DummyControl::New();
239 Toolkit::Internal::Control& controlImpl = control.GetImplementation();
240 (void)controlImpl; // Avoid unused warning
241 tet_result(TET_PASS);
243 catch (DaliException &exception)
245 tet_result(TET_FAIL);
253 const DummyControl constControl(control);
254 const Toolkit::Internal::Control& controlImpl = constControl.GetImplementation();
255 (void)controlImpl; // Avoid unused warning
256 tet_result(TET_PASS);
258 catch (DaliException &exception)
260 tet_result(TET_FAIL);
266 int UtcDaliControlSignalConnectDisconnect(void)
268 ToolkitTestApplication application;
271 DummyControl dummy = DummyControlImpl::New();
273 Actor actor = Actor::New();
274 DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
275 Toolkit::Internal::Control& control = dummy.GetImplementation();
276 DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
277 DALI_TEST_CHECK( dummyImpl );
279 actor.SetSizeSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
280 DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 1u, TEST_LOCATION );
281 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
282 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value, Vector3::ZERO, TEST_LOCATION );
284 const Vector3 newSize( 10, 10, 0 );
285 actor.SetSize( newSize );
286 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
287 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value, newSize, TEST_LOCATION );
289 dummyImpl->mCustomSlot1Called = false;
290 actor.SetSizeSignal().Disconnect( dummyImpl, &DummyControlImpl::CustomSlot1 );
291 DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
292 const Vector3 ignoredSize( 20, 20, 0 );
293 actor.SetSize( ignoredSize );
294 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
295 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value, newSize/*not ignoredSize*/, TEST_LOCATION );
300 int UtcDaliControlSignalAutomaticDisconnect(void)
302 ToolkitTestApplication application;
304 Actor actor = Actor::New();
307 DummyControl dummy = DummyControlImpl::New();
308 Toolkit::Internal::Control& control = dummy.GetImplementation();
309 DummyControlImpl* dummyImpl = dynamic_cast<DummyControlImpl*>(&control);
310 DALI_TEST_CHECK( dummyImpl );
312 actor.SetSizeSignal().Connect( dummyImpl, &DummyControlImpl::CustomSlot1 );
313 DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 1u, TEST_LOCATION );
314 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, false, TEST_LOCATION );
315 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value, Vector3::ZERO, TEST_LOCATION );
317 const Vector3 newSize( 10, 10, 0 );
318 actor.SetSize( newSize );
319 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Called, true, TEST_LOCATION );
320 DALI_TEST_EQUALS( dummyImpl->mCustomSlot1Value, newSize, TEST_LOCATION );
322 // dummyControl automatically disconnects
324 DALI_TEST_EQUALS( actor.SetSizeSignal().GetConnectionCount(), 0u, TEST_LOCATION );
326 const Vector3 ignoredSize( 20, 20, 0 );
327 actor.SetSize( ignoredSize );
331 int UtcDaliControlTestParameters(void)
333 ToolkitTestApplication application;
334 DummyControl test = DummyControl::New();
336 Vector3 maxSize = test.GetNaturalSize();
337 Vector3 minSize = maxSize / 2.0f;
339 Toolkit::Control::SizePolicy widthPolicy( Control::Fixed );
340 Toolkit::Control::SizePolicy heightPolicy( Control::Fixed );
341 test.SetSizePolicy( widthPolicy, heightPolicy );
342 test.GetSizePolicy( widthPolicy, heightPolicy );
344 DALI_TEST_CHECK( widthPolicy == Control::Fixed && heightPolicy == Control::Fixed );
346 test.SetSize( 0.7f, 0.7f, 0.7f );
347 float width = 640.0f;
348 float height = test.GetHeightForWidth( width );
349 DALI_TEST_CHECK( test.GetWidthForHeight( height ) == width );
351 test.SetMinimumSize( minSize );
352 DALI_TEST_CHECK( test.GetMinimumSize() == minSize );
354 test.SetMaximumSize( maxSize );
355 DALI_TEST_CHECK( test.GetMaximumSize() == maxSize );
357 test.KeyEventSignal();
359 // Provide coverage for pointer destructor
360 Control* testControlPtr = new Control;
361 DALI_TEST_CHECK( testControlPtr );
362 delete testControlPtr;
366 int UtcDaliControlBackgroundColor(void)
368 ToolkitTestApplication application;
369 Control control = Control::New();
371 DALI_TEST_CHECK( !control.GetBackgroundActor() );
372 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
374 control.SetBackgroundColor( Color::RED );
375 DALI_TEST_CHECK( control.GetBackgroundActor() );
376 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
381 int UtcDaliControlBackgroundImage(void)
383 ToolkitTestApplication application;
384 Control control = Control::New();
386 DALI_TEST_CHECK( !control.GetBackgroundActor() );
387 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
389 Image image = Image::New("TestImage");
390 control.SetBackground( image );
391 DALI_TEST_CHECK( control.GetBackgroundActor() );
392 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::WHITE, TEST_LOCATION );
394 control.SetBackgroundColor( Color::GREEN );
395 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::GREEN, TEST_LOCATION );
397 control.ClearBackground();
398 DALI_TEST_CHECK( !control.GetBackgroundActor() );
399 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
401 control.SetBackgroundColor( Color::YELLOW );
402 control.SetBackground( image );
403 DALI_TEST_CHECK( control.GetBackgroundActor() );
404 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::YELLOW, TEST_LOCATION );
409 int UtcDaliControlBackgroundProperties(void)
411 ToolkitTestApplication application;
412 Control control = Control::New();
414 DALI_TEST_CHECK( !control.GetBackgroundActor() );
415 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
416 DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::TRANSPARENT, TEST_LOCATION );
417 DALI_TEST_CHECK( !control.GetProperty( Control::PROPERTY_BACKGROUND ).Get< Property::Map >().Count() );
419 control.SetProperty( Control::PROPERTY_BACKGROUND_COLOR, Color::RED );
420 DALI_TEST_CHECK( control.GetBackgroundActor() );
421 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
422 DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::RED, TEST_LOCATION );
424 Property::Map imageMap;
425 imageMap[ "filename" ] = "TestImage";
427 map[ "image" ] = imageMap;
428 control.SetProperty( Control::PROPERTY_BACKGROUND, map );
429 DALI_TEST_CHECK( control.GetBackgroundActor() );
430 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
431 DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::RED, TEST_LOCATION );
433 Property::Value propValue = control.GetProperty( Control::PROPERTY_BACKGROUND );
434 DALI_TEST_CHECK( propValue.HasKey( "image" ) );
435 DALI_TEST_CHECK( propValue.GetValue( "image" ).HasKey( "filename" ) );
436 DALI_TEST_CHECK( propValue.GetValue( "image" ).GetValue( "filename" ).Get< std::string>() == "TestImage" );
438 Property::Map emptyMap;
439 control.SetProperty( Control::PROPERTY_BACKGROUND, emptyMap );
440 DALI_TEST_CHECK( !control.GetBackgroundActor() );
441 DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::TRANSPARENT, TEST_LOCATION );
442 DALI_TEST_EQUALS( control.GetProperty( Control::PROPERTY_BACKGROUND_COLOR ).Get< Vector4 >(), Color::TRANSPARENT, TEST_LOCATION );
443 DALI_TEST_CHECK( !control.GetProperty( Control::PROPERTY_BACKGROUND ).Get< Property::Map >().Count() );
448 int UtcDaliControlSizePolicyProperties(void)
450 ToolkitTestApplication application;
452 Control control = Control::New();
454 Control::SizePolicy widthPolicy( Control::Fixed );
455 Control::SizePolicy heightPolicy( Control::Fixed );
457 control.GetSizePolicy( widthPolicy, heightPolicy );
458 DALI_TEST_EQUALS( "FIXED", control.GetProperty( Control::PROPERTY_WIDTH_POLICY ).Get< std::string >(), TEST_LOCATION );
459 DALI_TEST_EQUALS( "FIXED", control.GetProperty( Control::PROPERTY_HEIGHT_POLICY ).Get< std::string >(), TEST_LOCATION );
461 control.SetSizePolicy( Control::Flexible, Control::Range );
462 DALI_TEST_EQUALS( "FLEXIBLE", control.GetProperty( Control::PROPERTY_WIDTH_POLICY ).Get< std::string >(), TEST_LOCATION );
463 DALI_TEST_EQUALS( "RANGE", control.GetProperty( Control::PROPERTY_HEIGHT_POLICY ).Get< std::string >(), TEST_LOCATION );
465 control.SetProperty( Control::PROPERTY_WIDTH_POLICY, "MAXIMUM" );
466 control.SetProperty( Control::PROPERTY_HEIGHT_POLICY, "MINIMUM" );
467 control.GetSizePolicy( widthPolicy, heightPolicy );
468 DALI_TEST_EQUALS( Control::Maximum, widthPolicy, TEST_LOCATION );
469 DALI_TEST_EQUALS( Control::Minimum, heightPolicy, TEST_LOCATION );
474 int UtcDaliControlSizeProperties(void)
476 ToolkitTestApplication application;
478 Control control = Control::New();
480 DALI_TEST_EQUALS( control.GetMinimumSize(), control.GetProperty( Control::PROPERTY_MINIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
481 DALI_TEST_EQUALS( control.GetMaximumSize(), control.GetProperty( Control::PROPERTY_MAXIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
483 control.SetMinimumSize( Vector3( 100.0f, 200.0f, 300.0f ) );
484 DALI_TEST_EQUALS( Vector3( 100.0f, 200.0f, 300.0f ), control.GetProperty( Control::PROPERTY_MINIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
487 control.SetMaximumSize( Vector3( 200.0f, 250.0f, 800.0f ) );
488 DALI_TEST_EQUALS( Vector3( 200.0f, 250.0f, 800.0f ), control.GetProperty( Control::PROPERTY_MAXIMUM_SIZE ).Get< Vector3 >(), TEST_LOCATION );
490 control.SetProperty( Control::PROPERTY_MINIMUM_SIZE, Vector3( 1.0f, 2.0f, 3.0f ) );
491 control.SetProperty( Control::PROPERTY_MAXIMUM_SIZE, Vector3( 10.0f, 20.0f, 30.0f ) );
492 DALI_TEST_EQUALS( control.GetMinimumSize(), Vector3( 1.0f, 2.0f, 3.0f ), TEST_LOCATION );
493 DALI_TEST_EQUALS( control.GetMaximumSize(), Vector3( 10.0f, 20.0f, 30.0f ), TEST_LOCATION );
498 int UtcDaliControlKeyProperties(void)
500 ToolkitTestApplication application;
502 Control control = Control::New();
503 Stage::GetCurrent().Add( control );
505 DALI_TEST_EQUALS( control.HasKeyInputFocus(), control.GetProperty( Control::PROPERTY_KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
507 control.SetKeyInputFocus();
508 DALI_TEST_EQUALS( true, control.GetProperty( Control::PROPERTY_KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
510 control.ClearKeyInputFocus();
511 DALI_TEST_EQUALS( false, control.GetProperty( Control::PROPERTY_KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
513 control.SetProperty( Control::PROPERTY_KEY_INPUT_FOCUS, true );
514 DALI_TEST_EQUALS( true, control.HasKeyInputFocus(), TEST_LOCATION );
519 int UtcDaliControlGestureSignals(void)
521 ToolkitTestApplication application;
522 ConnectionTracker connectionTracker;
523 Control control = Control::New();
525 // Each gesture detector gets created when connecting to the gesture signals
526 DALI_TEST_CHECK( !control.GetTapGestureDetector() );
527 control.ConnectSignal( &connectionTracker, Control::SIGNAL_TAPPED, &TestVoidCallback );
528 DALI_TEST_CHECK( control.GetTapGestureDetector() );
530 DALI_TEST_CHECK( !control.GetPanGestureDetector() );
531 control.ConnectSignal( &connectionTracker, Control::SIGNAL_PANNED, &TestVoidCallback );
532 DALI_TEST_CHECK( control.GetPanGestureDetector() );
534 DALI_TEST_CHECK( !control.GetPinchGestureDetector() );
535 control.ConnectSignal( &connectionTracker, Control::SIGNAL_PINCHED, &TestVoidCallback );
536 DALI_TEST_CHECK( control.GetPinchGestureDetector() );
538 DALI_TEST_CHECK( !control.GetLongPressGestureDetector() );
539 control.ConnectSignal( &connectionTracker, Control::SIGNAL_LONG_PRESSED, &TestVoidCallback );
540 DALI_TEST_CHECK( control.GetLongPressGestureDetector() );