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/public-api/dali-core.h>
27 #include <dali-toolkit/dali-toolkit.h>
28 #include <dali-toolkit/devel-api/controls/control-wrapper.h>
29 #include <dali-toolkit/devel-api/controls/control-wrapper-impl.h>
30 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
31 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
34 using namespace Dali::Toolkit;
36 void utc_dali_toolkit_control_wrapper_startup(void)
38 test_return_value = TET_UNDEF;
41 void utc_dali_toolkit_control_wrapper_cleanup(void)
43 test_return_value = TET_PASS;
46 ///////////////////////////////////////////////////////////////////////////////////////////////////
50 bool gOnRelayout = false;
53 ///////////////////////////////////////////////////////////////////////////////////////////////////
57 struct TestCustomControl : public Toolkit::Internal::ControlWrapper
62 TestCustomControl() : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
63 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT )) ,
64 mDaliProperty( Property::INVALID_INDEX ),
65 mSizeSet( Vector3::ZERO ),
66 mTargetSize( Vector3::ZERO ),
72 TestCustomControl(bool nego) : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
73 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT ) ),
74 mDaliProperty( Property::INVALID_INDEX ),
75 mSizeSet( Vector3::ZERO ),
76 mTargetSize( Vector3::ZERO ),
83 virtual ~TestCustomControl()
87 void Initialize( const char* name = NULL )
89 mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE );
94 virtual void OnInitialize( const char* name ) {}
96 // From Toolkit::Internal::ControlWrapper
97 virtual void OnStageConnection( int depth )
101 virtual void OnStageDisconnection()
104 virtual void OnChildAdd( Actor& child )
107 virtual void OnChildRemove( Actor& child )
110 virtual void OnPropertySet( Property::Index index, Property::Value propertyValue )
113 virtual void OnSizeSet( const Vector3& targetSize )
115 mSizeSet = targetSize;
117 virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize )
119 mTargetSize = targetSize;
121 virtual bool OnTouchEvent( const TouchEvent& event )
125 virtual bool OnHoverEvent( const HoverEvent& event )
129 virtual bool OnWheelEvent( const WheelEvent& event )
133 virtual bool OnKeyEvent( const KeyEvent& event )
137 virtual void OnKeyInputFocusGained()
140 virtual void OnKeyInputFocusLost()
143 virtual Vector3 GetNaturalSize()
145 return Vector3( 0.0f, 0.0f, 0.0f );
148 virtual float GetHeightForWidth( float width )
153 virtual float GetWidthForHeight( float height )
158 virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
163 virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
167 virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
171 virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
176 virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
180 virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
185 void SetDaliProperty(std::string s)
187 Self().SetProperty(mDaliProperty, s);
189 void TestRelayoutRequest()
194 float TestGetHeightForWidthBase( float width )
196 return GetHeightForWidthBase( width );
199 float TestGetWidthForHeightBase( float height )
201 return GetWidthForHeightBase( height );
204 float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
206 return CalculateChildSizeBase( child, dimension );
209 bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
211 return RelayoutDependentOnChildrenBase( dimension );
214 Property::Index mDaliProperty;
223 static std::string customControlTypeName = "TestCustomControl";
224 static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL );
226 int UtcDaliControlWrapperConstructor(void)
228 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
230 Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
231 ControlWrapper controlWrapper;
233 DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
235 controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
237 DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
242 int UtcDaliControlWrapperDestructor(void)
244 TestApplication application;
246 ControlWrapper control = ControlWrapper::New( customControlTypeName, *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
248 ControlWrapper control2( control );
250 DALI_TEST_CHECK( control );
252 DALI_TEST_CHECK( !control );
254 DALI_TEST_CHECK( control2 );
256 DALI_TEST_CHECK( !control2 );
261 int UtcDaliControlWrapperRelayoutRequest(void)
263 TestApplication application;
265 DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
267 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
268 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
270 Stage::GetCurrent().Add( controlWrapper );
272 application.SendNotification();
273 application.Render();
275 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
278 controlWrapperImpl->TestRelayoutRequest();
279 application.SendNotification();
280 application.Render();
282 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
287 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
289 TestApplication application;
291 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
292 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
294 float width = 300.0f;
297 application.SendNotification();
298 application.Render();
300 v = controlWrapperImpl->TestGetHeightForWidthBase( width );
302 DALI_TEST_EQUALS( width, v, TEST_LOCATION );
307 int UtcDaliControlWrapperGetWidthForHeightBase(void)
309 TestApplication application;
311 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
312 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
314 float height = 300.0f;
317 application.SendNotification();
318 application.Render();
320 v = controlWrapperImpl->TestGetWidthForHeightBase( height );
322 DALI_TEST_EQUALS( height, v, TEST_LOCATION );
327 int UtcDaliControlWrapperCalculateChildSizeBase(void)
329 TestApplication application;
331 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
332 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
334 Actor child = Actor::New();
335 child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
336 child.SetSize(150, 150);
338 application.SendNotification();
339 application.Render();
342 v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
343 DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
348 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
350 TestApplication application;
352 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
353 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
357 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
358 application.SendNotification();
359 application.Render();
361 DALI_TEST_EQUALS( v, true, TEST_LOCATION );
363 controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
364 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
365 application.SendNotification();
366 application.Render();
367 DALI_TEST_EQUALS( v, false, TEST_LOCATION );
372 int UtcDaliControlWrapperRegisterVisualToSelf(void)
374 ToolkitTestApplication application;
376 Test::ObjectDestructionTracker objectDestructionTracker;
379 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
380 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
382 objectDestructionTracker.Start( controlWrapper );
384 Property::Index index = 1;
386 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
387 Toolkit::Visual::Base visual;
390 map[Visual::Property::TYPE] = Visual::COLOR;
391 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
393 visual = visualFactory.CreateVisual( map );
394 DALI_TEST_CHECK( visual );
397 controlWrapperImpl->RegisterVisual( index, visual );
399 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
400 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
403 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
408 int UtcDaliControlWrapperRegisterDisabledVisual(void)
410 ToolkitTestApplication application;
412 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
413 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
415 Property::Index TEST_PROPERTY = 1;
417 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
418 Toolkit::Visual::Base visual;
421 map[Visual::Property::TYPE] = Visual::COLOR;
422 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
424 visual = visualFactory.CreateVisual( map );
425 DALI_TEST_CHECK(visual);
427 // Register index with a color visual
428 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
430 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
431 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
433 Stage::GetCurrent().Add( controlWrapper );
436 application.SendNotification();
437 application.Render();
439 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
441 DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
443 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
445 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
450 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
452 ToolkitTestApplication application;
454 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
455 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
457 Property::Index index = 1;
459 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
460 Toolkit::Visual::Base visual;
463 map[Visual::Property::TYPE] = Visual::COLOR;
464 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
466 visual = visualFactory.CreateVisual( map );
467 DALI_TEST_CHECK(visual);
469 // Register index with a color visual
470 controlWrapperImpl->RegisterVisual( index, visual );
472 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
475 controlWrapperImpl->UnregisterVisual( index );
477 DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
482 int UtcDaliControlWrapperTransitionDataMap1N(void)
484 TestApplication application;
487 map["target"] = "Actor1";
488 map["property"] = "randomProperty";
489 map["initialValue"] = Color::MAGENTA;
490 map["targetValue"] = Color::RED;
491 map["animator"] = Property::Map()
492 .Add("alphaFunction", "EASE_OUT")
493 .Add("timePeriod", Property::Map()
495 .Add("duration", 1.0f));
497 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
499 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
500 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
502 //DummyControl actor = DummyControl::New();
503 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
504 controlWrapper.SetName("Actor1");
505 controlWrapper.SetColor(Color::CYAN);
506 Stage::GetCurrent().Add(controlWrapper);
508 Animation anim = controlWrapperImpl->CreateTransition( transition );
509 DALI_TEST_CHECK( ! anim );
511 Property::Map returnedMap = transition.GetAnimatorAt(0);
513 Property::Value* value = returnedMap.Find("property");
514 DALI_TEST_CHECK( value != NULL);
515 DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
517 value = returnedMap.Find("initialValue");
518 DALI_TEST_CHECK( value != NULL);
519 DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
521 value = returnedMap.Find("targetValue");
522 DALI_TEST_CHECK( value != NULL);
523 DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
525 value = returnedMap.Find("animator");
526 DALI_TEST_CHECK( value != NULL);
527 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
529 value = returnedAnimatorMap.Find("alphaFunction");
530 DALI_TEST_CHECK( value != NULL);
531 DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
533 value = returnedAnimatorMap.Find("timePeriod");
534 DALI_TEST_CHECK( value != NULL);
535 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
537 value = returnedTimePeriodMap.Find("delay");
538 DALI_TEST_CHECK( value != NULL);
539 DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
541 value = returnedTimePeriodMap.Find("duration");
542 DALI_TEST_CHECK( value != NULL);
543 DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
548 int UtcDaliControlWrapperApplyThemeStyle(void)
550 ToolkitTestApplication application;
552 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
553 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
555 controlWrapperImpl->ApplyThemeStyle();
557 DALI_TEST_CHECK( true );
561 int UtcDaliControlWrapperTestControlProperties(void)
563 ToolkitTestApplication application;
565 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
566 ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl );
568 Stage::GetCurrent().Add( controlWrapper );
570 // "background" property
571 Property::Map rendererMap;
572 rendererMap[Visual::Property::TYPE] = Visual::COLOR;
573 rendererMap[ColorVisual::Property::MIX_COLOR] = Color::RED;
574 controlWrapper.SetProperty( Control::Property::BACKGROUND, rendererMap );
575 Property::Value propertyValue = controlWrapper.GetProperty( Control::Property::BACKGROUND );
576 Property::Map* resultMap = propertyValue.GetMap();
577 DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
578 DALI_TEST_EQUALS( resultMap->Find( Visual::Property::TYPE )->Get<int>(), (int)Visual::COLOR, TEST_LOCATION );
579 DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
580 DALI_TEST_EQUALS( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>(), Color::RED, TEST_LOCATION );
582 // "keyInputFocus" property
583 controlWrapper.SetProperty( Control::Property::KEY_INPUT_FOCUS, true );
584 DALI_TEST_EQUALS( true, controlWrapper.GetProperty( Control::Property::KEY_INPUT_FOCUS ).Get< bool >(), TEST_LOCATION );
586 // "styleName" property
587 controlWrapper.SetProperty( Control::Property::STYLE_NAME, "MyCustomStyle" );
588 DALI_TEST_EQUALS( "MyCustomStyle", controlWrapper.GetProperty( Control::Property::STYLE_NAME ).Get< std::string >(), TEST_LOCATION );
593 int UtcDaliControlWrapperTypeRegistryCreation(void)
595 ToolkitTestApplication application;
597 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( "ControlWrapper" );
598 DALI_TEST_CHECK( typeInfo )
600 // Check that we can't create a ControlWrapper instance
601 BaseHandle baseHandle = typeInfo.CreateInstance();
602 DALI_TEST_CHECK( !baseHandle )