Example #1
0
        // TODO: Test
        public void AddForwardingExplicitInterfaceProperty(PropertyInfo propertyInfo, MethodInfo getterMethodInfo, MethodInfo setterMethodInfo)
        {
            ArgumentUtility.CheckNotNull("propertyInfo", propertyInfo);

            var propertyEmitter = _classEmitter.CreateInterfacePropertyImplementation(propertyInfo);

            CreateGetterAndSetterForExplicitInterfaceProperty(propertyInfo, getterMethodInfo, setterMethodInfo, propertyEmitter);
        }
Example #2
0
        public void PropertyNameIsChangedOnInterfaceImplementation()
        {
            var classEmitter = new CustomClassEmitter(Scope, "PropertyNameIsChangedOnInterfaceImplementation", typeof(object), new[] { typeof(IInterfaceWithProperty) },
                                                      TypeAttributes.Public | TypeAttributes.Class, false);

            CustomPropertyEmitter property = classEmitter.CreateInterfacePropertyImplementation(
                typeof(IInterfaceWithProperty).GetProperty("Property", _declaredInstanceBindingFlags));

            Assert.That(property.PropertyBuilder.Name, Is.Not.EqualTo("Property"));
            Assert.That(property.PropertyBuilder.Name, Is.EqualTo(typeof(IInterfaceWithProperty).FullName + ".Property"));

            property.SetMethod = classEmitter.CreateInterfaceMethodImplementation(
                typeof(IInterfaceWithProperty).GetMethod("set_Property", _declaredInstanceBindingFlags));
            property.SetMethod.AddStatement(new ReturnStatement());

            classEmitter.BuildType();
        }
Example #3
0
        public void CreateInterfacePropertyImplementation()
        {
            var classEmitter = new CustomClassEmitter(Scope, "CreateInterfacePropertyImplementation", typeof(object), new[] { typeof(IInterfaceWithProperty) },
                                                      TypeAttributes.Public | TypeAttributes.Class, false);

            CustomPropertyEmitter property = classEmitter.CreateInterfacePropertyImplementation(
                typeof(IInterfaceWithProperty).GetProperty("Property", _declaredInstanceBindingFlags));

            Assert.That(property.GetMethod, Is.Null);
            Assert.That(property.SetMethod, Is.Null);

            property.SetMethod = classEmitter.CreateInterfaceMethodImplementation(
                typeof(IInterfaceWithProperty).GetMethod("set_Property", _declaredInstanceBindingFlags));
            property.SetMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();

            var instance = (IInterfaceWithProperty)Activator.CreateInstance(builtType);

            instance.Property = 7;
        }
        public void ImplementingSimpleMembersOfOpenGenericInterface()
        {
            CustomClassEmitter classEmitter =
                new CustomClassEmitter(
                    Scope,
                    "ImplementingSimpleMembersOfOpenGenericInterface",
                    typeof(object),
                    new Type[] { typeof(GenericInterfaceWithAllKindsOfMembers <int>) },
                    TypeAttributes.Public | TypeAttributes.Class, false);

            MethodInfo baseMethod       = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetMethod("Method");
            var        overriddenMethod = classEmitter.CreateInterfaceMethodImplementation(baseMethod);

            overriddenMethod.AddStatement(new ReturnStatement());

            PropertyInfo          baseProperty       = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetProperty("Property");
            CustomPropertyEmitter overriddenProperty = classEmitter.CreateInterfacePropertyImplementation(baseProperty);

            overriddenProperty.GetMethod = classEmitter.CreateInterfaceMethodImplementation(baseProperty.GetGetMethod());
            overriddenProperty.GetMethod.AddStatement(new ReturnStatement(new ConstReference(13)));

            EventInfo          baseEvent       = typeof(GenericInterfaceWithAllKindsOfMembers <int>).GetEvent("Event");
            CustomEventEmitter overriddenEvent = classEmitter.CreateInterfaceEventImplementation(baseEvent);

            overriddenEvent.AddMethod = classEmitter.CreateInterfaceMethodImplementation(baseEvent.GetAddMethod());
            overriddenEvent.AddMethod.AddStatement(new ReturnStatement());
            overriddenEvent.RemoveMethod = classEmitter.CreateInterfaceMethodImplementation(baseEvent.GetRemoveMethod());
            overriddenEvent.RemoveMethod.AddStatement(new ReturnStatement());

            Type builtType = classEmitter.BuildType();
            GenericInterfaceWithAllKindsOfMembers <int> instance = (GenericInterfaceWithAllKindsOfMembers <int>)Activator.CreateInstance(builtType);

            instance.Method(7);
            Assert.That(instance.Property, Is.EqualTo(13));
            instance.Event += delegate { return(0); };
            instance.Event -= delegate { return(0); };
        }