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 <dali-toolkit/devel-api/controls/control-wrapper.h>
28 #include <dali-toolkit/devel-api/controls/control-wrapper-impl.h>
29 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
30 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
33 using namespace Dali::Toolkit;
35 void utc_dali_toolkit_control_wrapper_startup(void)
37 test_return_value = TET_UNDEF;
40 void utc_dali_toolkit_control_wrapper_cleanup(void)
42 test_return_value = TET_PASS;
45 ///////////////////////////////////////////////////////////////////////////////////////////////////
49 bool gOnRelayout = false;
52 ///////////////////////////////////////////////////////////////////////////////////////////////////
56 struct TestCustomControl : public Toolkit::Internal::ControlWrapper
61 TestCustomControl() : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
62 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT )) ,
63 mDaliProperty( Property::INVALID_INDEX ),
64 mSizeSet( Vector3::ZERO ),
65 mTargetSize( Vector3::ZERO ),
71 TestCustomControl(bool nego) : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS |
72 Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT ) ),
73 mDaliProperty( Property::INVALID_INDEX ),
74 mSizeSet( Vector3::ZERO ),
75 mTargetSize( Vector3::ZERO ),
82 virtual ~TestCustomControl()
86 void Initialize( const char* name = NULL )
88 mDaliProperty = Self().RegisterProperty( "Dali", std::string("no"), Property::READ_WRITE );
93 virtual void OnInitialize( const char* name ) {}
95 // From Toolkit::Internal::ControlWrapper
96 virtual void OnStageConnection( int depth )
100 virtual void OnStageDisconnection()
103 virtual void OnChildAdd( Actor& child )
106 virtual void OnChildRemove( Actor& child )
109 virtual void OnPropertySet( Property::Index index, Property::Value propertyValue )
112 virtual void OnSizeSet( const Vector3& targetSize )
114 mSizeSet = targetSize;
116 virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize )
118 mTargetSize = targetSize;
120 virtual bool OnTouchEvent( const TouchEvent& event )
124 virtual bool OnHoverEvent( const HoverEvent& event )
128 virtual bool OnWheelEvent( const WheelEvent& event )
132 virtual bool OnKeyEvent( const KeyEvent& event )
136 virtual void OnKeyInputFocusGained()
139 virtual void OnKeyInputFocusLost()
142 virtual Vector3 GetNaturalSize()
144 return Vector3( 0.0f, 0.0f, 0.0f );
147 virtual float GetHeightForWidth( float width )
152 virtual float GetWidthForHeight( float height )
157 virtual void OnRelayout( const Vector2& size, RelayoutContainer& container )
162 virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension )
166 virtual void OnCalculateRelayoutSize( Dimension::Type dimension )
170 virtual float CalculateChildSize( const Dali::Actor& child, Dimension::Type dimension )
175 virtual void OnLayoutNegotiated( float size, Dimension::Type dimension )
179 virtual bool RelayoutDependentOnChildren( Dimension::Type dimension = Dimension::ALL_DIMENSIONS )
184 void SetDaliProperty(std::string s)
186 Self().SetProperty(mDaliProperty, s);
188 void TestRelayoutRequest()
193 float TestGetHeightForWidthBase( float width )
195 return GetHeightForWidthBase( width );
198 float TestGetWidthForHeightBase( float height )
200 return GetWidthForHeightBase( height );
203 float TestCalculateChildSizeBase( const Dali::Actor& child, Dimension::Type dimension )
205 return CalculateChildSizeBase( child, dimension );
208 bool TestRelayoutDependentOnChildrenBase( Dimension::Type dimension )
210 return RelayoutDependentOnChildrenBase( dimension );
213 Property::Index mDaliProperty;
221 int UtcDaliControlWrapperConstructor(void)
223 ToolkitTestApplication application; // Exceptions require ToolkitTestApplication
225 Toolkit::Internal::ControlWrapper* controlWrapperImpl = new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
226 ControlWrapper controlWrapper;
228 DALI_TEST_CHECK( !ControlWrapper::DownCast( controlWrapper ) );
230 controlWrapper = ControlWrapper::New( *controlWrapperImpl );
232 DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) );
236 int UtcDaliControlWrapperDestructor(void)
238 TestApplication application;
240 ControlWrapper control = ControlWrapper::New( *( new Toolkit::Internal::ControlWrapper( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ) ) );
242 ControlWrapper control2( control );
244 DALI_TEST_CHECK( control );
246 DALI_TEST_CHECK( !control );
248 DALI_TEST_CHECK( control2 );
250 DALI_TEST_CHECK( !control2 );
255 int UtcDaliControlWrapperRelayoutRequest(void)
257 TestApplication application;
259 DALI_TEST_EQUALS( gOnRelayout, false, TEST_LOCATION );
261 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
262 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
264 Stage::GetCurrent().Add( controlWrapper );
266 application.SendNotification();
267 application.Render();
269 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
272 controlWrapperImpl->TestRelayoutRequest();
273 application.SendNotification();
274 application.Render();
276 DALI_TEST_EQUALS( gOnRelayout, true, TEST_LOCATION );
281 int UtcDaliControlWrapperImplGetHeightForWidthBase(void)
283 TestApplication application;
285 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
286 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
288 float width = 300.0f;
291 application.SendNotification();
292 application.Render();
294 v = controlWrapperImpl->TestGetHeightForWidthBase( width );
296 DALI_TEST_EQUALS( width, v, TEST_LOCATION );
301 int UtcDaliControlWrapperGetWidthForHeightBase(void)
303 TestApplication application;
305 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
306 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
308 float height = 300.0f;
311 application.SendNotification();
312 application.Render();
314 v = controlWrapperImpl->TestGetWidthForHeightBase( height );
316 DALI_TEST_EQUALS( height, v, TEST_LOCATION );
321 int UtcDaliControlWrapperCalculateChildSizeBase(void)
323 TestApplication application;
325 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
326 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
328 Actor child = Actor::New();
329 child.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
330 child.SetSize(150, 150);
332 application.SendNotification();
333 application.Render();
336 v = controlWrapperImpl->TestCalculateChildSizeBase( child, Dali::Dimension::ALL_DIMENSIONS );
337 DALI_TEST_EQUALS( v, 0.0f, TEST_LOCATION );
342 int UtcDaliControlWrapperRelayoutDependentOnChildrenBase(void)
344 TestApplication application;
346 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
347 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
351 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::ALL_DIMENSIONS );
352 application.SendNotification();
353 application.Render();
355 DALI_TEST_EQUALS( v, true, TEST_LOCATION );
357 controlWrapper.SetResizePolicy( Dali::ResizePolicy::FIXED, Dali::Dimension::ALL_DIMENSIONS );
358 v = controlWrapperImpl->TestRelayoutDependentOnChildrenBase( Dali::Dimension::WIDTH );
359 application.SendNotification();
360 application.Render();
361 DALI_TEST_EQUALS( v, false, TEST_LOCATION );
366 int UtcDaliControlWrapperRegisterVisualToSelf(void)
368 ToolkitTestApplication application;
370 Test::ObjectDestructionTracker objectDestructionTracker;
373 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
374 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
376 objectDestructionTracker.Start( controlWrapper );
378 Property::Index index = 1;
380 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
381 Toolkit::Visual::Base visual;
384 map[Visual::Property::TYPE] = Visual::COLOR;
385 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
387 visual = visualFactory.CreateVisual( map );
388 DALI_TEST_CHECK( visual );
391 controlWrapperImpl->RegisterVisual( index, visual );
393 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet
394 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
397 DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed
402 int UtcDaliControlWrapperRegisterDisabledVisual(void)
404 ToolkitTestApplication application;
406 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
407 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
409 Property::Index TEST_PROPERTY = 1;
411 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
412 Toolkit::Visual::Base visual;
415 map[Visual::Property::TYPE] = Visual::COLOR;
416 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
418 visual = visualFactory.CreateVisual( map );
419 DALI_TEST_CHECK(visual);
421 // Register index with a color visual
422 controlWrapperImpl->RegisterVisual( TEST_PROPERTY, visual, false );
424 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( TEST_PROPERTY ), visual, TEST_LOCATION );
425 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
427 Stage::GetCurrent().Add( controlWrapper );
430 application.SendNotification();
431 application.Render();
433 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), false, TEST_LOCATION );
435 DALI_TEST_EQUALS( controlWrapper.OnStage(), true, TEST_LOCATION );
437 controlWrapperImpl->EnableVisual( TEST_PROPERTY, true );
439 DALI_TEST_EQUALS( controlWrapperImpl->IsVisualEnabled( TEST_PROPERTY ), true, TEST_LOCATION );
444 int UtcDaliControlWrapperRegisterUnregisterVisual(void)
446 ToolkitTestApplication application;
448 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
449 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
451 Property::Index index = 1;
453 Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
454 Toolkit::Visual::Base visual;
457 map[Visual::Property::TYPE] = Visual::COLOR;
458 map[ColorVisual::Property::MIX_COLOR] = Color::RED;
460 visual = visualFactory.CreateVisual( map );
461 DALI_TEST_CHECK(visual);
463 // Register index with a color visual
464 controlWrapperImpl->RegisterVisual( index, visual );
466 DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION );
469 controlWrapperImpl->UnregisterVisual( index );
471 DALI_TEST_CHECK( !controlWrapperImpl->GetVisual( index ) );
476 int UtcDaliControlWrapperTransitionDataMap1N(void)
478 TestApplication application;
481 map["target"] = "Actor1";
482 map["property"] = "randomProperty";
483 map["initialValue"] = Color::MAGENTA;
484 map["targetValue"] = Color::RED;
485 map["animator"] = Property::Map()
486 .Add("alphaFunction", "EASE_OUT")
487 .Add("timePeriod", Property::Map()
489 .Add("duration", 1.0f));
491 Dali::Toolkit::TransitionData transition = TransitionData::New( map );
493 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
494 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
496 //DummyControl actor = DummyControl::New();
497 controlWrapper.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
498 controlWrapper.SetName("Actor1");
499 controlWrapper.SetColor(Color::CYAN);
500 Stage::GetCurrent().Add(controlWrapper);
502 Animation anim = controlWrapperImpl->CreateTransition( transition );
503 DALI_TEST_CHECK( ! anim );
505 Property::Map returnedMap = transition.GetAnimatorAt(0);
507 Property::Value* value = returnedMap.Find("property");
508 DALI_TEST_CHECK( value != NULL);
509 DALI_TEST_EQUALS( "randomProperty", value->Get<std::string>(), TEST_LOCATION );
511 value = returnedMap.Find("initialValue");
512 DALI_TEST_CHECK( value != NULL);
513 DALI_TEST_EQUALS( Color::MAGENTA, value->Get<Vector4>(), TEST_LOCATION );
515 value = returnedMap.Find("targetValue");
516 DALI_TEST_CHECK( value != NULL);
517 DALI_TEST_EQUALS( Color::RED, value->Get<Vector4>(), TEST_LOCATION );
519 value = returnedMap.Find("animator");
520 DALI_TEST_CHECK( value != NULL);
521 Property::Map returnedAnimatorMap = value->Get<Property::Map>();
523 value = returnedAnimatorMap.Find("alphaFunction");
524 DALI_TEST_CHECK( value != NULL);
525 DALI_TEST_EQUALS( "EASE_OUT", value->Get<std::string>(), TEST_LOCATION );
527 value = returnedAnimatorMap.Find("timePeriod");
528 DALI_TEST_CHECK( value != NULL);
529 Property::Map returnedTimePeriodMap = value->Get<Property::Map>();
531 value = returnedTimePeriodMap.Find("delay");
532 DALI_TEST_CHECK( value != NULL);
533 DALI_TEST_EQUALS( 0.5f, value->Get<float>(), TEST_LOCATION );
535 value = returnedTimePeriodMap.Find("duration");
536 DALI_TEST_CHECK( value != NULL);
537 DALI_TEST_EQUALS( 1.0f, value->Get<float>(), TEST_LOCATION );
542 int UtcDaliControlWrapperApplyThemeStyle(void)
544 ToolkitTestApplication application;
546 Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT );
547 ControlWrapper controlWrapper = ControlWrapper::New( *controlWrapperImpl );
549 controlWrapperImpl->ApplyThemeStyle();
551 DALI_TEST_CHECK( true );