예제 #1
0
        public void GetEmittableField()
        {
            var field          = ReflectionObjectMother.GetSomeField();
            var emittableField = ReflectionObjectMother.GetSomeField();

            CheckGetEmittable(p => p.GetEmittableField(field), emittableField, emittableField.DeclaringType);
        }
예제 #2
0
        public virtual void SetUp()
        {
            _mockRepository = new MockRepository();

            _mutableType = MutableTypeObjectMother.Create();
            _nestedTypeCodeGeneratorFactoryMock = _mockRepository.StrictMock <IMutableNestedTypeCodeGeneratorFactory>();
            _codeGeneratorMock             = _mockRepository.StrictMock <IReflectionEmitCodeGenerator>();
            _emittableOperandProviderMock  = _mockRepository.StrictMock <IEmittableOperandProvider> ();
            _memberEmitterMock             = _mockRepository.StrictMock <IMemberEmitter>();
            _initializationBuilderMock     = _mockRepository.StrictMock <IInitializationBuilder>();
            _proxySerializationEnablerMock = _mockRepository.StrictMock <IProxySerializationEnabler>();

            _generator = new MutableTypeCodeGenerator(
                _mutableType,
                _nestedTypeCodeGeneratorFactoryMock,
                _codeGeneratorMock,
                _emittableOperandProviderMock,
                _memberEmitterMock,
                _initializationBuilderMock,
                _proxySerializationEnablerMock);

            _typeBuilderMock        = _mockRepository.StrictMock <ITypeBuilder>();
            _debugInfoGeneratorMock = _mockRepository.StrictMock <DebugInfoGenerator>();

            _fakeInitializationField   = ReflectionObjectMother.GetSomeField();
            _fakeInitializationMethod  = ReflectionObjectMother.GetSomeMethod();
            _fakeInitializationMembers = Tuple.Create(_fakeInitializationField, _fakeInitializationMethod);
        }
예제 #3
0
        public void SetUp()
        {
            _memberSelectorMock = MockRepository.GenerateStrictMock <IMemberSelector>();

            _name       = "TypeName";
            _namespace  = "MyNamespace";
            _attributes = (TypeAttributes)7;

            _customType = new TestableCustomType(
                _name,
                _namespace,
                _attributes,
                genericTypeDefinition: null,
                typeArguments: Type.EmptyTypes)
            {
                NestedTypes  = new[] { ReflectionObjectMother.GetSomeType() },
                Interfaces   = new[] { typeof(IDisposable) },
                Fields       = new[] { ReflectionObjectMother.GetSomeField() },
                Constructors = new[] { ReflectionObjectMother.GetSomeConstructor() },
                Methods      = new[] { ReflectionObjectMother.GetSomeMethod() },
                Properties   = new[] { ReflectionObjectMother.GetSomeProperty() },
                Events       = new[] { ReflectionObjectMother.GetSomeEvent() }
            };
            _customType.SetMemberSelector(_memberSelectorMock);

            _typeArgument = ReflectionObjectMother.GetSomeType();
            _genericTypeUnderlyingDefinition = typeof(IList <>);
            _genericType = CustomTypeObjectMother.Create(
                name: "GenericType`1", genericTypeDefinition: _genericTypeUnderlyingDefinition, typeArguments: new[] { _typeArgument });

            _typeParameter         = ReflectionObjectMother.GetSomeGenericParameter();
            _genericTypeDefinition = CustomTypeObjectMother.Create(name: "GenericTypeDefinition`1", typeArguments: new[] { _typeParameter });
        }
예제 #4
0
        public void Emit_FieldInfo()
        {
            var field = ReflectionObjectMother.GetSomeField();
            var fakeEmittableOperand = MockRepository.GenerateStub <FieldInfo> ();

            _emittableOperandProviderStub.Stub(stub => stub.GetEmittableField(field)).Return(fakeEmittableOperand);

            _innerILGeneratorMock.Expect(mock => mock.Emit(OpCodes.Ldfld, fakeEmittableOperand));

            _decorator.Emit(OpCodes.Ldfld, field);

            _innerILGeneratorMock.VerifyAllExpectations();
        }
        public void Emit_FieldInfo()
        {
            var field = ReflectionObjectMother.GetSomeField();
            var fakeEmittableOperand = new Mock <FieldInfo>().Object;

            _emittableOperandProviderStub.Setup(stub => stub.GetEmittableField(field)).Returns(fakeEmittableOperand);

            _innerILGeneratorMock.Setup(mock => mock.Emit(OpCodes.Ldfld, fakeEmittableOperand)).Verifiable();

            _decorator.Emit(OpCodes.Ldfld, field);

            _innerILGeneratorMock.Verify();
        }
예제 #6
0
        public void GetFields()
        {
            Assert.That(_customType.Fields, Is.Not.Null.And.Not.Empty);
            var bindingAttr = BindingFlags.NonPublic;
            var fakeResult  = new[] { ReflectionObjectMother.GetSomeField() };

            _memberSelectorMock.Expect(mock => mock.SelectFields(_customType.Fields, bindingAttr, _customType)).Return(fakeResult);

            var result = _customType.GetFields(bindingAttr);

            _memberSelectorMock.VerifyAllExpectations();
            Assert.That(result, Is.EqualTo(fakeResult));
        }
예제 #7
0
        public void GetField()
        {
            Assert.That(_customType.Fields, Is.Not.Null.And.Not.Empty);
            var name        = "some name";
            var bindingAttr = BindingFlags.NonPublic;
            var fakeResult  = ReflectionObjectMother.GetSomeField();

            _memberSelectorMock.Expect(mock => mock.SelectSingleField(_customType.Fields, bindingAttr, name, _customType)).Return(fakeResult);

            var resultField = _customType.GetField(name, bindingAttr);

            _memberSelectorMock.VerifyAllExpectations();
            Assert.That(resultField, Is.SameAs(fakeResult));
        }
예제 #8
0
        public void GetEmittableXXX_RuntimeInfos()
        {
            var type             = ReflectionObjectMother.GetSomeType();
            var genericParameter = ReflectionObjectMother.GetSomeGenericParameter();
            var field            = ReflectionObjectMother.GetSomeField();
            var ctor             = ReflectionObjectMother.GetSomeConstructor();
            var method           = ReflectionObjectMother.GetSomeMethod();

            Assert.That(_provider.GetEmittableType(type), Is.SameAs(type));
            Assert.That(_provider.GetEmittableType(genericParameter), Is.SameAs(genericParameter));
            Assert.That(_provider.GetEmittableField(field), Is.SameAs(field));
            Assert.That(_provider.GetEmittableConstructor(ctor), Is.SameAs(ctor));
            Assert.That(_provider.GetEmittableMethod(method), Is.SameAs(method));
        }
예제 #9
0
        public void GetEmittableXXX_Mutable()
        {
            var emittableType             = ReflectionObjectMother.GetSomeType();
            var emittableGenericParameter = ReflectionObjectMother.GetSomeGenericParameter();
            var emittableField            = ReflectionObjectMother.GetSomeField();
            var emittableConstructor      = ReflectionObjectMother.GetSomeConstructor();
            var emittableMethod           = ReflectionObjectMother.GetSomeMethod();

            _provider.AddMapping(_mutableType, emittableType);
            _provider.AddMapping(_mutableGenericParameter, emittableGenericParameter);
            _provider.AddMapping(_mutableField, emittableField);
            _provider.AddMapping(_mutableConstructor, emittableConstructor);
            _provider.AddMapping(_mutableMethod, emittableMethod);

            Assert.That(_provider.GetEmittableType(_mutableType), Is.SameAs(emittableType));
            Assert.That(_provider.GetEmittableType(_mutableGenericParameter), Is.SameAs(emittableGenericParameter));
            Assert.That(_provider.GetEmittableField(_mutableField), Is.SameAs(emittableField));
            Assert.That(_provider.GetEmittableConstructor(_mutableConstructor), Is.SameAs(emittableConstructor));
            Assert.That(_provider.GetEmittableMethod(_mutableMethod), Is.SameAs(emittableMethod));
        }
예제 #10
0
        public void DelegatingMembers()
        {
            var mappedType             = MutableTypeObjectMother.Create();
            var mappedGenericParameter = MutableGenericParameterObjectMother.Create();
            var mappedField            = MutableFieldInfoObjectMother.Create();
            var mappedConstructor      = MutableConstructorInfoObjectMother.Create();
            var mappedMethod           = MutableMethodInfoObjectMother.Create();

            var emittableType             = ReflectionObjectMother.GetSomeType();
            var emittableGenericParameter = ReflectionObjectMother.GetSomeGenericParameter();
            var emittableField            = ReflectionObjectMother.GetSomeField();
            var emittableConstructor      = ReflectionObjectMother.GetSomeConstructor();
            var emittableMethod           = ReflectionObjectMother.GetSomeMethod();

            var helper = new DecoratorTestHelper <IEmittableOperandProvider> (_decorator, _innerMock);

            helper.CheckDelegation(d => d.AddMapping(mappedType, emittableType));
            helper.CheckDelegation(d => d.AddMapping(mappedGenericParameter, emittableGenericParameter));
            helper.CheckDelegation(d => d.AddMapping(mappedField, emittableField));
            helper.CheckDelegation(d => d.AddMapping(mappedConstructor, emittableConstructor));
            helper.CheckDelegation(d => d.AddMapping(mappedMethod, emittableMethod));
        }