public void SetUp()
 {
     _implementationPropertyInformationStub      = MockRepository.GenerateStub <IPropertyInformation>();
     _declarationPropertyInformationStub         = MockRepository.GenerateStub <IPropertyInformation>();
     _interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
         _implementationPropertyInformationStub, _declarationPropertyInformationStub);
 }
        public void GetGetMethod_GetSetMethod_ExplicitPropertyImplementation()
        {
            var implementationPropertyInfo =
                PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty(
                                               "Remotion.ObjectBinding.UnitTests.TestDomain.IInterfaceToImplement.ExplicitProperty",
                                               BindingFlags.NonPublic | BindingFlags.Instance));
            var declaringPropertyInfo = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("ExplicitProperty"));

            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            var getMethodResult = interfaceImplementationPropertyInformation.GetGetMethod(false);

            CheckMethodInformation(
                typeof(InterfaceImplementationMethodInformation),
                TypeAdapter.Create(typeof(ClassImplementingInterface)),
                "Remotion.ObjectBinding.UnitTests.TestDomain.IInterfaceToImplement.get_ExplicitProperty",
                getMethodResult);

            var setMethodResult = interfaceImplementationPropertyInformation.GetSetMethod(false);

            CheckMethodInformation(
                typeof(InterfaceImplementationMethodInformation),
                TypeAdapter.Create(typeof(ClassImplementingInterface)),
                "Remotion.ObjectBinding.UnitTests.TestDomain.IInterfaceToImplement.set_ExplicitProperty",
                setMethodResult);
        }
        public void CanBeSetFromOutside_ImplicitPropertyImplementationAddingPrivateSetAccessor()
        {
            var implementationPropertyInfo = PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty("PropertyAddingPrivateSetAccessor"));
            var declaringPropertyInfo      = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("PropertyAddingPrivateSetAccessor"));
            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            Assert.That(interfaceImplementationPropertyInformation.CanBeSetFromOutside, Is.False);
        }
        public void CanBeSetFromOutside_ImplicitWriteOnlyPropertyImplementation()
        {
            var implementationPropertyInfo = PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty("WriteOnlyImplicitProperty"));
            var declaringPropertyInfo      = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("WriteOnlyImplicitProperty"));
            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            Assert.That(interfaceImplementationPropertyInformation.CanBeSetFromOutside, Is.True);
        }
        public void CanBeSetFromOutside_ExplicitWriteOnlyPropertyImplementation()
        {
            var implementationPropertyInfo =
                PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty(
                                               "Remotion.ObjectBinding.UnitTests.TestDomain.IInterfaceToImplement.WriteOnlyExplicitProperty",
                                               BindingFlags.NonPublic | BindingFlags.Instance));
            var declaringPropertyInfo = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("WriteOnlyExplicitProperty"));
            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            Assert.That(interfaceImplementationPropertyInformation.CanBeSetFromOutside, Is.True);
        }
        public void GetGetMethod_GetSetMethod_ImplicitWriteOnlyPropertyImplementationAddingPrivateSetAccessor_NonPublicFlagFalse()
        {
            var implementationPropertyInfo = PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty("PropertyAddingPrivateSetAccessor"));
            var declaringPropertyInfo      = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("PropertyAddingPrivateSetAccessor"));

            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            var getMethodResult = interfaceImplementationPropertyInformation.GetGetMethod(false);

            CheckMethodInformation(
                typeof(InterfaceImplementationMethodInformation),
                TypeAdapter.Create(typeof(ClassImplementingInterface)),
                "get_PropertyAddingPrivateSetAccessor",
                getMethodResult);
            Assert.That(interfaceImplementationPropertyInformation.GetSetMethod(false), Is.Null);
        }
        public void GetGetMethod_GetSetMethod_WriteOnlyImplicitPropertyImplementation()
        {
            var implementationPropertyInfo = PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty("WriteOnlyImplicitProperty"));
            var declaringPropertyInfo      = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("WriteOnlyImplicitProperty"));

            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            Assert.That(interfaceImplementationPropertyInformation.GetGetMethod(false), Is.Null);
            var getMethodResult = interfaceImplementationPropertyInformation.GetSetMethod(false);

            CheckMethodInformation(
                typeof(InterfaceImplementationMethodInformation),
                TypeAdapter.Create(typeof(ClassImplementingInterface)),
                "set_WriteOnlyImplicitProperty",
                getMethodResult);
        }
コード例 #8
0
        protected IPropertyInformation GetPropertyInfo(Type type, Type interfaceType, string propertyName)
        {
            PropertyInfo interfacePropertyInfo = interfaceType.GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

            Assert.IsNotNull(interfacePropertyInfo, "Property '{0}' was not found on type '{1}'.", propertyName, interfaceType);
            PropertyInfo propertyInfo = type.GetProperty(propertyName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);

            if (propertyInfo == null)
            {
                Type   interfaceTypeDefinition = interfaceType.IsGenericType ? interfaceType.GetGenericTypeDefinition() : interfaceType;
                string explicitName            = interfaceTypeDefinition.FullName.Replace("`1", "<T>") + "." + interfacePropertyInfo.Name;
                propertyInfo = type.GetProperty(explicitName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
                Assert.IsNotNull(propertyInfo, "Property '{0}' (or '{1}') was not found on type '{2}'.", propertyName, explicitName, type);
            }

            var introducedMemberAttributes = propertyInfo.GetCustomAttributes(typeof(IntroducedMemberAttribute), true);

            if (introducedMemberAttributes.Length > 0)
            {
                var introducedMemberAttribute = introducedMemberAttributes[0] as IntroducedMemberAttribute;
                var interfaceProperty         = PropertyInfoAdapter.Create(introducedMemberAttribute.IntroducedInterface.GetProperty(introducedMemberAttribute.InterfaceMemberName));
                var mixinProperty             = interfaceProperty.FindInterfaceImplementation(introducedMemberAttribute.Mixin);
                var interfaceImplementation   = new InterfaceImplementationPropertyInformation(mixinProperty, interfaceProperty);

                return(new MixinIntroducedPropertyInformation(interfaceImplementation));
            }
            else
            {
                var propertyInfoAdapter  = PropertyInfoAdapter.Create(propertyInfo);
                var interfaceDeclaration = propertyInfoAdapter.FindInterfaceDeclarations().SingleOrDefault();
                if (interfaceDeclaration != null)
                {
                    return(new InterfaceImplementationPropertyInformation(propertyInfoAdapter, interfaceDeclaration));
                }
                else
                {
                    return(propertyInfoAdapter);
                }
            }
        }
        public void GetGetMethod_GetSetMethod_ImplicitReadOnlyOnlyPropertyImplementationAddingSetAccessor()
        {
            var implementationPropertyInfo = PropertyInfoAdapter.Create(typeof(ClassImplementingInterface).GetProperty("PropertyAddingSetAccessor"));
            var declaringPropertyInfo      = PropertyInfoAdapter.Create(typeof(IInterfaceToImplement).GetProperty("PropertyAddingSetAccessor"));

            var interfaceImplementationPropertyInformation = new InterfaceImplementationPropertyInformation(
                implementationPropertyInfo, declaringPropertyInfo);

            var getMethodResult = interfaceImplementationPropertyInformation.GetGetMethod(false);

            CheckMethodInformation(
                typeof(InterfaceImplementationMethodInformation),
                TypeAdapter.Create(typeof(ClassImplementingInterface)),
                "get_PropertyAddingSetAccessor",
                getMethodResult);
            var setMethodResult = interfaceImplementationPropertyInformation.GetSetMethod(false);

            CheckMethodInformation(
                typeof(MethodInfoAdapter),
                TypeAdapter.Create(typeof(ClassImplementingInterface)),
                "set_PropertyAddingSetAccessor",
                setMethodResult);
        }
        public void GetHashCodeTest()
        {
            var equalObject = new InterfaceImplementationPropertyInformation(_implementationPropertyInformationStub, _declarationPropertyInformationStub);

            Assert.That(_interfaceImplementationPropertyInformation.GetHashCode(), Is.EqualTo(equalObject.GetHashCode()));
        }