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.
20 #include <dali/public-api/dali-core.h>
21 #include <dali-test-suite-utils.h>
22 #include <dali/integration-api/events/long-press-gesture-event.h>
23 #include <dali/integration-api/events/pan-gesture-event.h>
24 #include <dali/integration-api/events/pinch-gesture-event.h>
25 #include <dali/integration-api/events/tap-gesture-event.h>
26 #include <dali/integration-api/events/touch-event-integ.h>
34 // Stores data that is populated in the callback and will be read by the Test cases
38 : functorCalled( false ),
39 voidFunctorCalled( false ),
40 receivedGesture( Gesture::Clear ),
46 functorCalled = false;
47 voidFunctorCalled = false;
49 receivedGesture.numberOfTouches = 0u;
50 receivedGesture.screenPoint = Vector2(0.0f, 0.0f);
51 receivedGesture.localPoint = Vector2(0.0f, 0.0f);
57 bool voidFunctorCalled;
58 LongPressGesture receivedGesture;
62 // Functor that sets the data when called
63 struct GestureReceivedFunctor
65 GestureReceivedFunctor(SignalData& data) : signalData(data) { }
67 void operator()(Actor actor, LongPressGesture longPress)
69 signalData.functorCalled = true;
70 signalData.receivedGesture = longPress;
71 signalData.pressedActor = actor;
76 signalData.voidFunctorCalled = true;
79 SignalData& signalData;
82 // Generate a LongPressGestureEvent to send to Core
83 Integration::LongPressGestureEvent GenerateLongPress(
85 unsigned int numberOfTouches,
88 Integration::LongPressGestureEvent longPress( state );
90 longPress.numberOfTouches = numberOfTouches;
91 longPress.point = point;
96 // Generate a PanGestureEvent to send to Core
97 Integration::PanGestureEvent GeneratePan(
99 Vector2 previousPosition,
100 Vector2 currentPosition,
101 unsigned long timeDelta,
102 unsigned int numberOfTouches = 1,
103 unsigned int time = 1u)
105 Integration::PanGestureEvent pan(state);
107 pan.previousPosition = previousPosition;
108 pan.currentPosition = currentPosition;
109 pan.timeDelta = timeDelta;
110 pan.numberOfTouches = numberOfTouches;
115 // Generate a PinchGestureEvent to send to Core
116 Integration::PinchGestureEvent GeneratePinch(
117 Gesture::State state,
122 Integration::PinchGestureEvent pinch(state);
126 pinch.centerPoint = centerpoint;
130 // Generate a TapGestureEvent to send to Core
131 Integration::TapGestureEvent GenerateTap(
132 Gesture::State state,
133 unsigned int numberOfTaps,
134 unsigned int numberOfTouches,
137 Integration::TapGestureEvent tap( state );
139 tap.numberOfTaps = numberOfTaps;
140 tap.numberOfTouches = numberOfTouches;
147 // Create function as Init function called
149 static bool CreateCustomInitCalled = false;
150 BaseHandle CreateCustomInit(void)
152 CreateCustomInitCalled = true;
156 static bool CreateCustomNamedInitCalled = false;
157 BaseHandle CreateCustomNamedInit(void)
159 CreateCustomNamedInitCalled = true;
163 const std::string scriptedName("PopupStyle");
164 static TypeRegistration scriptedType( scriptedName, typeid(Dali::CustomActor), CreateCustomNamedInit );
166 // Property Registration
167 bool setPropertyCalled = false;
168 bool getPropertyCalled = false;
169 void SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value )
171 setPropertyCalled = true;
173 Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex )
175 getPropertyCalled = true;
176 return Property::Value( true );
181 /*******************************************************************************
185 ******************************************************************************/
188 struct MyTestCustomActor : public CustomActorImpl
190 typedef SignalV2< void ()> SignalType;
191 typedef SignalV2< void (float)> SignalTypeFloat;
193 MyTestCustomActor() : CustomActorImpl( true ) // requires touch
196 virtual ~MyTestCustomActor()
199 void ResetCallStack()
203 // From CustomActorImpl
204 virtual void OnStageConnection()
207 virtual void OnStageDisconnection()
210 virtual void OnChildAdd(Actor& child)
213 virtual void OnChildRemove(Actor& child)
216 virtual void OnSizeSet(const Vector3& targetSize)
219 virtual void OnSizeAnimation(Animation& animation, const Vector3& targetSize)
222 virtual bool OnTouchEvent(const TouchEvent& event)
226 virtual bool OnMouseWheelEvent(const MouseWheelEvent& event)
230 virtual bool OnKeyEvent(const KeyEvent& event)
234 virtual void OnKeyInputFocusGained()
237 virtual void OnKeyInputFocusLost()
240 virtual Actor GetChildByAlias(const std::string& actorAlias)
252 class MyTestCustomActor : public CustomActor
256 typedef SignalV2< void ()> SignalType;
257 typedef SignalV2< void (float)> SignalTypeFloat;
263 static MyTestCustomActor New()
265 Impl::MyTestCustomActor* p = new Impl::MyTestCustomActor;
266 return MyTestCustomActor( *p ); // takes ownership
269 virtual ~MyTestCustomActor()
273 static MyTestCustomActor DownCast( BaseHandle handle )
275 MyTestCustomActor result;
277 CustomActor custom = Dali::CustomActor::DownCast( handle );
280 CustomActorImpl& customImpl = custom.GetImplementation();
282 Impl::MyTestCustomActor* impl = dynamic_cast<Impl::MyTestCustomActor*>(&customImpl);
286 result = MyTestCustomActor(customImpl.GetOwner());
293 SignalType& GetCustomSignal()
295 Dali::RefObject& obj = GetImplementation();
296 return static_cast<Impl::MyTestCustomActor&>( obj ).mSignal;
301 MyTestCustomActor(Internal::CustomActor* internal)
302 : CustomActor(internal)
306 MyTestCustomActor( Impl::MyTestCustomActor& impl )
307 : CustomActor( impl )
313 class MyTestCustomActor2 : public CustomActor
321 static MyTestCustomActor2 New()
323 return MyTestCustomActor2(); // takes ownership
326 virtual ~MyTestCustomActor2()
330 static MyTestCustomActor2 DownCast( BaseHandle handle )
332 MyTestCustomActor2 result;
334 CustomActor custom = Dali::CustomActor::DownCast( handle );
337 CustomActorImpl& customImpl = custom.GetImplementation();
339 Impl::MyTestCustomActor* impl = dynamic_cast<Impl::MyTestCustomActor*>(&customImpl);
343 result = MyTestCustomActor2(customImpl.GetOwner());
352 MyTestCustomActor2(Internal::CustomActor* internal)
353 : CustomActor(internal)
357 MyTestCustomActor2( Impl::MyTestCustomActor& impl )
358 : CustomActor( impl )
363 static TypeRegistration customTypeInit( typeid(MyTestCustomActor2), typeid(Dali::CustomActor), CreateCustomInit, true );
366 BaseHandle CreateCustom(void)
368 return MyTestCustomActor::New();
371 static std::string lastSignalConnectionCustom;
373 bool DoConnectSignalCustom( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
375 lastSignalConnectionCustom = signalName;
377 bool connected( true );
379 Dali::BaseHandle handle(object);
380 MyTestCustomActor customActor = MyTestCustomActor::DownCast(handle);
382 if( "sig1" == signalName )
384 customActor.GetCustomSignal().Connect( tracker, functor );
388 // signalName does not match any signal
395 bool DoConnectSignalCustomFailure( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
397 lastSignalConnectionCustom = "failed";
399 return false; // This is supposed to fail
402 struct CustomTestFunctor
406 ++mTotalInstanceCount;
407 ++mCurrentInstanceCount;
410 CustomTestFunctor( const CustomTestFunctor& copyMe )
412 ++mTotalInstanceCount;
413 ++mCurrentInstanceCount;
418 --mCurrentInstanceCount;
426 static int mTotalInstanceCount;
427 static int mCurrentInstanceCount;
428 static int mCallbackCount;
431 int CustomTestFunctor::mTotalInstanceCount = 0;
432 int CustomTestFunctor::mCurrentInstanceCount = 0;
433 int CustomTestFunctor::mCallbackCount = 0;
435 static void ResetFunctorCounts()
437 CustomTestFunctor::mTotalInstanceCount = 0;
438 CustomTestFunctor::mCurrentInstanceCount = 0;
439 CustomTestFunctor::mCallbackCount = 0;
442 static std::string lastActionCustom;
443 bool DoActionCustom(BaseObject* object, const std::string& actionName, const std::vector<Property::Value>& attributes)
445 lastActionCustom = actionName;
449 // Custom type registration
450 static TypeRegistration customType1( typeid(MyTestCustomActor), typeid(Dali::CustomActor), CreateCustom );
453 static SignalConnectorType customSignalConnector1( customType1, "sig1", DoConnectSignalCustom );
454 static SignalConnectorType customSignalConnector2( customType1, "sig2", DoConnectSignalCustomFailure );
455 static const int TEST_SIGNAL_COUNT = 2;
458 static TypeAction customAction1( customType1, "act1", DoActionCustom);
459 static const int TEST_ACTION_COUNT = 1;
461 class TestConnectionTracker : public ConnectionTracker
465 TestConnectionTracker()
470 BaseHandle CreateNamedActorType()
472 Actor actor = Actor::New();
473 actor.SetName( "NamedActor" );
477 TypeRegistration namedActorType( "MyNamedActor", typeid(Dali::Actor), CreateNamedActorType );
478 PropertyRegistration namedActorPropertyOne( namedActorType, "prop-name", PROPERTY_REGISTRATION_START_INDEX, Property::BOOLEAN, &SetProperty, &GetProperty );
480 } // Anonymous namespace
483 // Positive test case for a method
484 int UtcDaliTypeRegistryCreateDaliObjects(void)
486 TestApplication application;
488 TypeRegistry registry; // like this for ctor test coverage
489 registry = TypeRegistry::Get();
493 type = registry.GetTypeInfo( "ImageActor" );
494 DALI_TEST_CHECK( type );
495 DALI_TEST_CHECK( type.GetCreator() );
496 DALI_TEST_CHECK( ImageActor::DownCast( type.GetCreator()() ) );
497 ImageActor ia = ImageActor::DownCast(type.CreateInstance());
498 DALI_TEST_CHECK( ia );
499 Stage::GetCurrent().Add( ia );
500 application.Render();
502 type = registry.GetTypeInfo( "TextActor" );
503 DALI_TEST_CHECK( type );
504 TextActor ta = TextActor::DownCast(type.CreateInstance());
505 DALI_TEST_CHECK( ta );
506 Stage::GetCurrent().Add( ta );
507 application.Render();
509 type = registry.GetTypeInfo( "CameraActor" );
510 DALI_TEST_CHECK( type );
511 CameraActor ca = CameraActor::DownCast(type.CreateInstance());
512 DALI_TEST_CHECK( ca );
513 Stage::GetCurrent().Add( ca );
514 application.Render();
516 type = registry.GetTypeInfo( "LightActor" );
517 DALI_TEST_CHECK( type );
518 LightActor la = LightActor::DownCast(type.CreateInstance());
519 DALI_TEST_CHECK( la );
520 Stage::GetCurrent().Add( la );
521 application.Render();
524 type = registry.GetTypeInfo( "Animation" );
525 DALI_TEST_CHECK( type );
526 Animation an = Animation::DownCast(type.CreateInstance());
527 DALI_TEST_CHECK( an );
529 application.Render();
532 type = registry.GetTypeInfo( "ShaderEffect" );
533 DALI_TEST_CHECK( type );
534 ShaderEffect ef = ShaderEffect::DownCast(type.CreateInstance());
535 DALI_TEST_CHECK( ef );
536 application.Render();
541 /*******************************************************************************
543 * Action through the base handle
545 ******************************************************************************/
546 int UtcDaliTypeRegistryActionViaBaseHandle(void)
548 TestApplication application;
552 type = TypeRegistry::Get().GetTypeInfo( "Actor" );
553 DALI_TEST_CHECK( type );
555 BaseHandle hdl = type.CreateInstance();
556 DALI_TEST_CHECK( hdl );
558 Actor a = Actor::DownCast(hdl);
559 DALI_TEST_CHECK( a );
563 application.SendNotification();
564 application.Render(0);
565 DALI_TEST_CHECK(!a.IsVisible());
567 std::vector<Property::Value> attributes;
569 DALI_TEST_CHECK(hdl.DoAction(Actor::ACTION_SHOW, attributes));
571 application.SendNotification();
572 application.Render(0);
573 DALI_TEST_CHECK(a.IsVisible());
575 DALI_TEST_CHECK(!hdl.DoAction("unknown-action", attributes));
579 int UtcDaliTypeRegistryNames(void)
581 TestApplication application;
585 TypeRegistry::NameContainer names = TypeRegistry::Get().GetTypeNames();
587 for(TypeRegistry::NameContainer::iterator iter = names.begin();
588 iter != names.end(); ++iter)
590 type = TypeRegistry::Get().GetTypeInfo( *iter );
591 DALI_TEST_CHECK( type );
597 // Check named and typeid are equivalent
598 int UtcDaliTypeRegistryNameEquivalence(void)
600 TypeInfo named_type = TypeRegistry::Get().GetTypeInfo( "TextActor" );
601 TypeInfo typeinfo_type = TypeRegistry::Get().GetTypeInfo( typeid(Dali::TextActor) );
603 DALI_TEST_CHECK( named_type );
604 DALI_TEST_CHECK( typeinfo_type );
606 DALI_TEST_CHECK( named_type == typeinfo_type );
608 DALI_TEST_CHECK( named_type.GetName() == typeinfo_type.GetName() );
609 DALI_TEST_CHECK( named_type.GetBaseName() == typeinfo_type.GetBaseName() );
615 int UtcDaliTypeRegistryCustomActor(void)
617 ResetFunctorCounts();
619 TestApplication application;
621 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "MyTestCustomActor" );
622 DALI_TEST_CHECK( type );
624 TypeInfo baseType = TypeRegistry::Get().GetTypeInfo( "CustomActor" );
625 DALI_TEST_CHECK( baseType );
627 BaseHandle handle = type.CreateInstance();
628 DALI_TEST_CHECK( handle );
630 MyTestCustomActor customHandle = MyTestCustomActor::DownCast( handle );
631 DALI_TEST_CHECK( customHandle );
633 TypeInfo::NameContainer names;
634 type.GetActions(names);
635 TypeInfo::NameContainer baseNames;
636 baseType.GetActions(baseNames);
637 DALI_TEST_EQUALS( names.size(), TEST_ACTION_COUNT + baseNames.size(), TEST_LOCATION );
640 type.GetSignals(names);
643 baseType.GetSignals(baseNames);
645 DALI_TEST_EQUALS( names.size(), TEST_SIGNAL_COUNT + baseNames.size(), TEST_LOCATION );
648 TestConnectionTracker tracker;
650 bool connected = handle.ConnectSignal( &tracker, "sig1", CustomTestFunctor() );
651 DALI_TEST_EQUALS( connected, true, TEST_LOCATION );
652 DALI_TEST_CHECK( lastSignalConnectionCustom == "sig1" );
653 DALI_TEST_EQUALS( CustomTestFunctor::mTotalInstanceCount, 2/*temporary copy + FunctorDelegate copy*/, TEST_LOCATION );
654 DALI_TEST_EQUALS( CustomTestFunctor::mCurrentInstanceCount, 1, TEST_LOCATION );
656 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 0, TEST_LOCATION );
657 customHandle.GetCustomSignal().Emit();
658 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 1, TEST_LOCATION );
659 DALI_TEST_EQUALS( CustomTestFunctor::mTotalInstanceCount, 2/*temporary copy + FunctorDelegate copy*/, TEST_LOCATION );
660 DALI_TEST_EQUALS( CustomTestFunctor::mCurrentInstanceCount, 1, TEST_LOCATION );
662 // tracker should automatically disconnect here
663 DALI_TEST_EQUALS( CustomTestFunctor::mTotalInstanceCount, 2/*temporary copy + FunctorDelegate copy*/, TEST_LOCATION );
664 DALI_TEST_EQUALS( CustomTestFunctor::mCurrentInstanceCount, 0, TEST_LOCATION );
666 // Test that functor is disconnected
667 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 1, TEST_LOCATION );
668 customHandle.GetCustomSignal().Emit();
669 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 1/*not incremented*/, TEST_LOCATION );
670 DALI_TEST_EQUALS( CustomTestFunctor::mTotalInstanceCount, 2/*temporary copy + FunctorDelegate copy*/, TEST_LOCATION );
671 DALI_TEST_EQUALS( CustomTestFunctor::mCurrentInstanceCount, 0, TEST_LOCATION );
673 std::vector<Property::Value> attributes;
674 handle.DoAction("act1", attributes);
675 DALI_TEST_CHECK( lastActionCustom == "act1" );
679 int UtcDaliTypeRegistryCustomSignalFailure(void)
681 // Test what happens when signal connnector (DoConnectSignalFailure method) returns false
683 ResetFunctorCounts();
685 TestApplication application;
687 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "MyTestCustomActor" );
688 DALI_TEST_CHECK( type );
690 TypeInfo baseType = TypeRegistry::Get().GetTypeInfo( "CustomActor" );
691 DALI_TEST_CHECK( baseType );
693 BaseHandle handle = type.CreateInstance();
694 DALI_TEST_CHECK( handle );
696 MyTestCustomActor customHandle = MyTestCustomActor::DownCast( handle );
697 DALI_TEST_CHECK( customHandle );
699 TypeInfo::NameContainer names;
700 TypeInfo::NameContainer baseNames;
702 type.GetActions(names);
703 baseType.GetActions(baseNames);
705 DALI_TEST_EQUALS( names.size(), TEST_ACTION_COUNT + baseNames.size(), TEST_LOCATION );
710 type.GetSignals(names);
711 baseType.GetSignals(baseNames);
713 DALI_TEST_EQUALS( names.size(), TEST_SIGNAL_COUNT + baseNames.size(), TEST_LOCATION );
716 TestConnectionTracker tracker;
718 bool connected = handle.ConnectSignal( &tracker, "sig2", CustomTestFunctor() );
719 DALI_TEST_EQUALS( connected, false/*This is supposed to fail*/, TEST_LOCATION );
720 DALI_TEST_CHECK( lastSignalConnectionCustom == "failed" );
721 DALI_TEST_EQUALS( CustomTestFunctor::mTotalInstanceCount, 2/*temporary copy + FunctorDelegate copy*/, TEST_LOCATION );
722 DALI_TEST_EQUALS( CustomTestFunctor::mCurrentInstanceCount, 0/*deleted along with FunctorDelegate*/, TEST_LOCATION );
725 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 0, TEST_LOCATION );
726 customHandle.GetCustomSignal().Emit();
727 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 0/*never called*/, TEST_LOCATION );
729 // tracker should have nothing to disconnect here
732 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 0, TEST_LOCATION );
733 customHandle.GetCustomSignal().Emit();
734 DALI_TEST_EQUALS( CustomTestFunctor::mCallbackCount, 0/*never called*/, TEST_LOCATION );
740 int UtcDaliTypeRegistryInitFunctions(void)
742 TestApplication application;
744 DALI_TEST_CHECK( "MyTestCustomActor2" == customTypeInit.RegisteredName() );
746 DALI_TEST_CHECK( true == CreateCustomInitCalled );
747 TypeInfo type = TypeRegistry::Get().GetTypeInfo( "MyTestCustomActor2" );
748 DALI_TEST_CHECK( type );
755 int UtcDaliTypeRegistryNameInitFunctions(void)
757 TestApplication application;
759 DALI_TEST_CHECK( scriptedName == scriptedType.RegisteredName() );
761 TypeInfo baseType = TypeRegistry::Get().GetTypeInfo( scriptedName );
762 DALI_TEST_CHECK( baseType );
764 BaseHandle handle = baseType.CreateInstance();
766 DALI_TEST_CHECK( true == CreateCustomNamedInitCalled );
767 TypeInfo type = TypeRegistry::Get().GetTypeInfo( scriptedName );
768 DALI_TEST_CHECK( type );
773 int UtcDaliPropertyRegistration(void)
775 TestApplication application;
776 TypeRegistry typeRegistry = TypeRegistry::Get();
778 // Check property count before property registration
779 TypeInfo typeInfo = typeRegistry.GetTypeInfo( typeid(MyTestCustomActor) );
780 DALI_TEST_CHECK( typeInfo );
781 BaseHandle handle = typeInfo.CreateInstance();
782 DALI_TEST_CHECK( handle );
783 Actor customActor = Actor::DownCast( handle );
784 DALI_TEST_CHECK( customActor );
785 unsigned int initialPropertyCount( customActor.GetPropertyCount() );
787 std::string propertyName( "prop-1" );
788 int propertyIndex( PROPERTY_REGISTRATION_START_INDEX );
789 Property::Type propertyType( Property::BOOLEAN );
790 PropertyRegistration property1( customType1, propertyName, propertyIndex, propertyType, &SetProperty, &GetProperty );
792 // Check property count after registration
793 unsigned int postRegistrationPropertyCount( customActor.GetPropertyCount() );
794 DALI_TEST_EQUALS( initialPropertyCount + 1u, postRegistrationPropertyCount, TEST_LOCATION );
796 // Add custom property and check property count
797 customActor.RegisterProperty( "custom-prop-1", true );
798 unsigned int customPropertyCount( customActor.GetPropertyCount() );
799 DALI_TEST_EQUALS( postRegistrationPropertyCount + 1u, customPropertyCount, TEST_LOCATION );
801 // Set the property, ensure SetProperty called
802 DALI_TEST_CHECK( !setPropertyCalled );
803 customActor.SetProperty( propertyIndex, false );
804 DALI_TEST_CHECK( setPropertyCalled );
806 // Get the property, ensure GetProperty called
807 DALI_TEST_CHECK( !getPropertyCalled );
808 (void)customActor.GetProperty< bool >( propertyIndex );
809 DALI_TEST_CHECK( getPropertyCalled );
811 // Check the property name
812 DALI_TEST_EQUALS( customActor.GetPropertyName( propertyIndex ), propertyName, TEST_LOCATION );
813 DALI_TEST_EQUALS( typeInfo.GetPropertyName( propertyIndex ), propertyName, TEST_LOCATION );
815 // Check the property index
816 DALI_TEST_EQUALS( customActor.GetPropertyIndex( propertyName ), propertyIndex, TEST_LOCATION );
818 // Check the property type
819 DALI_TEST_EQUALS( customActor.GetPropertyType( propertyIndex ), propertyType, TEST_LOCATION );
821 // Check property count of type-info is 1
822 Property::IndexContainer indices;
823 typeInfo.GetPropertyIndices( indices );
824 DALI_TEST_EQUALS( indices.size(), 1u, TEST_LOCATION );
826 // Ensure indices returned from actor and customActor differ by two
827 Actor actor = Actor::New();
828 actor.GetPropertyIndices( indices );
829 unsigned int actorIndices = indices.size();
830 customActor.GetPropertyIndices( indices );
831 unsigned int customActorIndices = indices.size();
832 DALI_TEST_EQUALS( actorIndices + 2u, customActorIndices, TEST_LOCATION ); // Custom property + registered property
836 int UtcDaliPropertyRegistrationIndexOutOfBounds(void)
838 TestApplication application;
839 TypeRegistry typeRegistry = TypeRegistry::Get();
841 // Attempt to register a property type out-of-bounds index (less than)
844 PropertyRegistration property1( customType1, "prop-name", PROPERTY_REGISTRATION_START_INDEX - 1, Property::BOOLEAN, &SetProperty, &GetProperty );
845 tet_result( TET_FAIL );
847 catch ( DaliException& e )
849 DALI_TEST_ASSERT( e, "( index >= PROPERTY_REGISTRATION_START_INDEX ) && ( index <= PROPERTY_REGISTRATION_MAX_INDEX )", TEST_LOCATION );
852 // Attempt to register a property type out-of-bounds index (greater than)
855 PropertyRegistration property1( customType1, "prop-name", PROPERTY_REGISTRATION_MAX_INDEX + 1, Property::BOOLEAN, &SetProperty, &GetProperty );
856 tet_result( TET_FAIL );
858 catch ( DaliException& e )
860 DALI_TEST_ASSERT( e, "( index >= PROPERTY_REGISTRATION_START_INDEX ) && ( index <= PROPERTY_REGISTRATION_MAX_INDEX )", TEST_LOCATION );
865 int UtcDaliPropertyRegistrationFunctions(void)
867 TestApplication application;
868 int propertyIndex = PROPERTY_REGISTRATION_START_INDEX + 10;
870 // Attempt to register a property without a setter
873 PropertyRegistration property1( customType1, "prop-name", propertyIndex++, Property::BOOLEAN, NULL, &GetProperty );
874 tet_result( TET_PASS );
876 catch ( DaliException& e )
878 tet_result( TET_FAIL );
881 // Attempt to register a property without a getter
884 PropertyRegistration property1( customType1, "prop-name", propertyIndex++, Property::BOOLEAN, NULL, NULL );
885 tet_result( TET_FAIL );
887 catch ( DaliException& e )
889 DALI_TEST_ASSERT( e, "! \"GetProperty", TEST_LOCATION );
894 int UtcDaliPropertyRegistrationAddSameIndex(void)
896 TestApplication application;
897 int propertyIndex = PROPERTY_REGISTRATION_START_INDEX + 100;
899 // Add one property with a valid property index
900 PropertyRegistration property1( customType1, "prop-name", propertyIndex, Property::BOOLEAN, &SetProperty, &GetProperty );
902 // Attempt to add another property with the same index
905 PropertyRegistration property2( customType1, "prop-name-2", propertyIndex, Property::BOOLEAN, &SetProperty, &GetProperty );
907 catch ( DaliException& e )
909 DALI_TEST_ASSERT( e, "! \"Property index already added", TEST_LOCATION );
914 int UtcDaliPropertyRegistrationPropertyWritable(void)
916 TestApplication application;
917 int propertyIndex1 = PROPERTY_REGISTRATION_START_INDEX + 200;
918 int propertyIndex2 = PROPERTY_REGISTRATION_START_INDEX + 201;
920 // Add two properties, one with SetProperty, one without
921 PropertyRegistration property1( customType1, "prop-name-readwrite", propertyIndex1, Property::BOOLEAN, &SetProperty, &GetProperty );
922 PropertyRegistration property2( customType1, "prop-name-readonly", propertyIndex2, Property::BOOLEAN, NULL, &GetProperty );
924 // Create custom-actor
925 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( typeid(MyTestCustomActor) );
926 DALI_TEST_CHECK( typeInfo );
927 BaseHandle handle = typeInfo.CreateInstance();
928 DALI_TEST_CHECK( handle );
929 Actor customActor = Actor::DownCast( handle );
930 DALI_TEST_CHECK( customActor );
932 // Check whether properties are writable
933 DALI_TEST_CHECK( customActor.IsPropertyWritable( propertyIndex1 ) );
934 DALI_TEST_CHECK( ! customActor.IsPropertyWritable( propertyIndex2 ) );
938 int UtcDaliPropertyRegistrationPropertyAnimatable(void)
940 TestApplication application;
941 int propertyIndex = PROPERTY_REGISTRATION_START_INDEX + 400;
943 // These properties are not animatable
944 PropertyRegistration property1( customType1, "prop-name", propertyIndex, Property::BOOLEAN, &SetProperty, &GetProperty );
946 // Create custom-actor
947 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( typeid(MyTestCustomActor) );
948 DALI_TEST_CHECK( typeInfo );
949 BaseHandle handle = typeInfo.CreateInstance();
950 DALI_TEST_CHECK( handle );
951 Actor customActor = Actor::DownCast( handle );
952 DALI_TEST_CHECK( customActor );
954 // Check if animatable
955 DALI_TEST_CHECK( ! customActor.IsPropertyAnimatable( propertyIndex ) );
959 int UtcDaliPropertyRegistrationInvalidGetAndSet(void)
961 TestApplication application;
962 int propertyIndex = PROPERTY_REGISTRATION_START_INDEX + 2000;
964 // Create custom-actor
965 TypeInfo typeInfo = TypeRegistry::Get().GetTypeInfo( typeid(MyTestCustomActor) );
966 DALI_TEST_CHECK( typeInfo );
967 BaseHandle handle = typeInfo.CreateInstance();
968 DALI_TEST_CHECK( handle );
969 Actor customActor = Actor::DownCast( handle );
970 DALI_TEST_CHECK( customActor );
972 // Try to set an index that hasn't been added
975 customActor.SetProperty( propertyIndex, true );
976 tet_result( TET_FAIL );
978 catch ( DaliException& e )
980 DALI_TEST_ASSERT( e, "! \"Cannot find property index", TEST_LOCATION );
983 // Try to get an index that hasn't been added
986 (void) customActor.GetProperty< bool >( propertyIndex );
987 tet_result( TET_FAIL );
989 catch ( DaliException& e )
991 DALI_TEST_ASSERT( e, "! \"Cannot find property index", TEST_LOCATION );
998 int UtcDaliLongPressGestureDetectorTypeRegistry(void)
1000 TestApplication application;
1002 Actor actor = Actor::New();
1003 actor.SetSize(100.0f, 100.0f);
1004 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
1005 Stage::GetCurrent().Add(actor);
1009 type = TypeRegistry::Get().GetTypeInfo( "LongPressGestureDetector" );
1010 DALI_TEST_CHECK( type );
1011 BaseHandle handle = type.CreateInstance();
1012 DALI_TEST_CHECK( handle );
1013 LongPressGestureDetector detector = LongPressGestureDetector::DownCast( handle );
1014 DALI_TEST_CHECK( detector );
1016 // Attach actor to detector
1018 GestureReceivedFunctor functor( data );
1019 detector.Attach(actor);
1021 // Connect to signal through type
1022 handle.ConnectSignal( &application, LongPressGestureDetector::SIGNAL_LONG_PRESS_DETECTED, functor );
1024 // Render and notify
1025 application.SendNotification();
1026 application.Render();
1029 application.ProcessEvent(GenerateLongPress(Gesture::Possible, 1u, Vector2(50.0f, 10.0f)));
1030 application.ProcessEvent(GenerateLongPress(Gesture::Started, 1u, Vector2(50.0f, 10.0f)));
1031 application.ProcessEvent(GenerateLongPress(Gesture::Finished, 1u, Vector2(50.0f, 10.0f)));
1032 DALI_TEST_EQUALS(true, data.voidFunctorCalled, TEST_LOCATION);
1036 int UtcDaliPanGestureDetectorTypeRegistry(void)
1038 TestApplication application;
1040 Actor actor = Actor::New();
1041 actor.SetSize(100.0f, 100.0f);
1042 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
1043 Stage::GetCurrent().Add(actor);
1047 type = TypeRegistry::Get().GetTypeInfo( "PanGestureDetector" );
1048 DALI_TEST_CHECK( type );
1049 BaseHandle handle = type.CreateInstance();
1050 DALI_TEST_CHECK( handle );
1051 PanGestureDetector detector = PanGestureDetector::DownCast( handle );
1052 DALI_TEST_CHECK( detector );
1054 // Attach actor to detector
1056 GestureReceivedFunctor functor( data );
1057 detector.Attach(actor);
1059 // Connect to signal through type
1060 handle.ConnectSignal( &application, PanGestureDetector::SIGNAL_PAN_DETECTED, functor );
1062 // Render and notify
1063 application.SendNotification();
1064 application.Render();
1067 application.ProcessEvent(GeneratePan(Gesture::Possible, Vector2(10.0f, 20.0f), Vector2(20.0f, 20.0f), 10));
1068 application.ProcessEvent(GeneratePan(Gesture::Started, Vector2(10.0f, 20.0f), Vector2(20.0f, 20.0f), 10));
1069 application.ProcessEvent(GeneratePan(Gesture::Finished, Vector2(10.0f, 20.0f), Vector2(20.0f, 20.0f), 10));
1070 DALI_TEST_EQUALS(true, data.voidFunctorCalled, TEST_LOCATION);
1074 int UtcDaliPinchGestureDetectorTypeRegistry(void)
1076 TestApplication application;
1078 Actor actor = Actor::New();
1079 actor.SetSize(100.0f, 100.0f);
1080 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
1081 Stage::GetCurrent().Add(actor);
1085 type = TypeRegistry::Get().GetTypeInfo( "PinchGestureDetector" );
1086 DALI_TEST_CHECK( type );
1087 BaseHandle handle = type.CreateInstance();
1088 DALI_TEST_CHECK( handle );
1089 PinchGestureDetector detector = PinchGestureDetector::DownCast( handle );
1090 DALI_TEST_CHECK( detector );
1092 // Attach actor to detector
1094 GestureReceivedFunctor functor( data );
1095 detector.Attach(actor);
1097 // Connect to signal through type
1098 handle.ConnectSignal( &application, PinchGestureDetector::SIGNAL_PINCH_DETECTED, functor );
1100 // Render and notify
1101 application.SendNotification();
1102 application.Render();
1105 application.ProcessEvent(GeneratePinch(Gesture::Started, 10.0f, 50.0f, Vector2(20.0f, 10.0f)));
1106 DALI_TEST_EQUALS(true, data.voidFunctorCalled, TEST_LOCATION);
1110 int UtcDaliTapGestureDetectorTypeRegistry(void)
1112 TestApplication application;
1114 Actor actor = Actor::New();
1115 actor.SetSize(100.0f, 100.0f);
1116 actor.SetAnchorPoint(AnchorPoint::TOP_LEFT);
1117 Stage::GetCurrent().Add(actor);
1121 type = TypeRegistry::Get().GetTypeInfo( "TapGestureDetector" );
1122 DALI_TEST_CHECK( type );
1123 BaseHandle handle = type.CreateInstance();
1124 DALI_TEST_CHECK( handle );
1125 TapGestureDetector detector = TapGestureDetector::DownCast( handle );
1126 DALI_TEST_CHECK( detector );
1128 // Attach actor to detector
1130 GestureReceivedFunctor functor( data );
1131 detector.Attach(actor);
1133 // Connect to signal through type
1134 handle.ConnectSignal( &application, TapGestureDetector::SIGNAL_TAP_DETECTED, functor );
1136 // Render and notify
1137 application.SendNotification();
1138 application.Render();
1141 application.ProcessEvent(GenerateTap(Gesture::Possible, 1u, 1u, Vector2(50.0f, 10.0f)));
1142 application.ProcessEvent(GenerateTap(Gesture::Started, 1u, 1u, Vector2(50.0f, 10.0f)));
1143 DALI_TEST_EQUALS(true, data.voidFunctorCalled, TEST_LOCATION);
1147 int UtcDaliTypeRegistryNamedType(void)
1149 TestApplication application;
1150 TypeRegistry typeRegistry = TypeRegistry::Get();
1152 // Create a normal actor
1153 BaseHandle actorHandle = typeRegistry.GetTypeInfo( "Actor" ).CreateInstance();
1154 DALI_TEST_CHECK( actorHandle );
1155 Actor actor( Actor::DownCast( actorHandle ) );
1156 DALI_TEST_CHECK( actor );
1157 unsigned int actorPropertyCount( actor.GetPropertyCount() );
1159 // Create Named Actor Type
1160 BaseHandle namedHandle = typeRegistry.GetTypeInfo( "MyNamedActor" ).CreateInstance();
1161 DALI_TEST_CHECK( namedHandle );
1162 Actor namedActor( Actor::DownCast( namedHandle ) );
1163 DALI_TEST_CHECK( namedActor );
1164 unsigned int namedActorPropertyCount( namedActor.GetPropertyCount() );
1166 DALI_TEST_CHECK( namedActorPropertyCount > actorPropertyCount );