예제 #1
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);
        }
예제 #2
0
        public void DefineTypeFacet_NoParent_NoNestedTypes_NoTypeInitializer_NoInitializations()
        {
            var mutableType = MutableTypeObjectMother.CreateInterface();

            Assert.That(mutableType.BaseType, Is.Null);
            Assert.That(mutableType.MutableTypeInitializer, Is.Null);
            Assert.That(mutableType.Initialization.Expressions, Is.Empty);

            var generator = new MutableTypeCodeGenerator(
                mutableType,
                _nestedTypeCodeGeneratorFactoryMock,
                _codeGeneratorMock,
                _emittableOperandProviderMock,
                _memberEmitterMock,
                _initializationBuilderMock,
                _proxySerializationEnablerMock);

            PopulateContext(generator, 2);

            // No call to SetParent because of null BaseType.
            // No call to AddConstructor because of null TypeInitializer.
            _initializationBuilderMock.Expect(mock => mock.CreateInitializationMembers(mutableType)).Return(null);
            _proxySerializationEnablerMock.Expect(mock => mock.MakeSerializable(mutableType, null));
            _mockRepository.ReplayAll();

            generator.DefineTypeFacets();

            _mockRepository.VerifyAll();
        }
예제 #3
0
        private CodeGenerationContext PopulateContext(MutableTypeCodeGenerator generator, int currentState)
        {
            var context = new CodeGenerationContext(_mutableType, _typeBuilderMock, _debugInfoGeneratorMock, _emittableOperandProviderMock);

            PrivateInvoke.SetNonPublicField(generator, "_context", context);
            PrivateInvoke.SetNonPublicField(generator, "_state", currentState);

            return(context);
        }
        public void ThrowsForInvalidOperation()
        {
            var codeGeneratorStub             = new Mock <IReflectionEmitCodeGenerator>();
            var emittableOperandProviderStub  = new Mock <IEmittableOperandProvider>();
            var memberEmitterStub             = new Mock <IMemberEmitter>();
            var initializationBuilderStub     = new Mock <IInitializationBuilder>();
            var proxySerializationEnablerStub = new Mock <IProxySerializationEnabler>();

            _typeBuilderMock.Setup(stub => stub.RegisterWith(emittableOperandProviderStub.Object, _mutableType));
            _typeBuilderMock.Setup(stub => stub.SetParent(_mutableType.BaseType));
            _typeBuilderMock.Setup(stub => stub.CreateType()).Returns((Type)null);
            codeGeneratorStub
            .Setup(stub => stub.DefineType(It.IsAny <string>(), It.IsAny <TypeAttributes>(), It.IsAny <IEmittableOperandProvider>()))
            .Returns(_typeBuilderMock.Object);
            codeGeneratorStub.SetupGet(stub => stub.DebugInfoGenerator).Returns(_debugInfoGeneratorMock.Object);

            var generator = new MutableTypeCodeGenerator(
                _mutableType,
                _nestedTypeCodeGeneratorFactoryMock.Object,
                codeGeneratorStub.Object,
                emittableOperandProviderStub.Object,
                memberEmitterStub.Object,
                initializationBuilderStub.Object,
                proxySerializationEnablerStub.Object);

            CheckThrowsForInvalidOperation(generator.DefineTypeFacets);
            CheckThrowsForInvalidOperation(() => generator.CreateNestedTypeGenerators().ForceEnumeration());
            CheckThrowsForInvalidOperation(() => generator.CreateType());
            Assert.That(() => generator.DeclareType(), Throws.Nothing);

            CheckThrowsForInvalidOperation(generator.DeclareType);
            CheckThrowsForInvalidOperation(generator.DefineTypeFacets);
            CheckThrowsForInvalidOperation(() => generator.CreateType());
            Assert.That(() => generator.CreateNestedTypeGenerators().ForceEnumeration(), Throws.Nothing);

            CheckThrowsForInvalidOperation(generator.DeclareType);
            CheckThrowsForInvalidOperation(() => generator.CreateNestedTypeGenerators().ForceEnumeration());
            CheckThrowsForInvalidOperation(() => generator.CreateType());
            Assert.That(() => generator.DefineTypeFacets(), Throws.Nothing);

            CheckThrowsForInvalidOperation(generator.DeclareType);
            CheckThrowsForInvalidOperation(() => generator.CreateNestedTypeGenerators().ForceEnumeration());
            CheckThrowsForInvalidOperation(generator.DefineTypeFacets);
            Assert.That(() => generator.CreateType(), Throws.Nothing);
        }
예제 #5
0
        public void ThrowsForInvalidOperation()
        {
            var codeGeneratorStub             = MockRepository.GenerateStub <IReflectionEmitCodeGenerator>();
            var emittableOperandProviderStub  = MockRepository.GenerateStub <IEmittableOperandProvider>();
            var memberEmitterStub             = MockRepository.GenerateStub <IMemberEmitter>();
            var initializationBuilderStub     = MockRepository.GenerateStub <IInitializationBuilder>();
            var proxySerializationEnablerStub = MockRepository.GenerateStub <IProxySerializationEnabler>();

            codeGeneratorStub.Stub(stub => stub.DefineType(null, 0, null)).IgnoreArguments().Return(_typeBuilderMock);
            codeGeneratorStub.Stub(stub => stub.DebugInfoGenerator).Return(_debugInfoGeneratorMock);

            var generator = new MutableTypeCodeGenerator(
                _mutableType,
                _nestedTypeCodeGeneratorFactoryMock,
                codeGeneratorStub,
                emittableOperandProviderStub,
                memberEmitterStub,
                initializationBuilderStub,
                proxySerializationEnablerStub);

            CheckThrowsForInvalidOperation(generator.DefineTypeFacets);
            CheckThrowsForInvalidOperation(() => generator.CreateNestedTypeGenerators().ForceEnumeration());
            CheckThrowsForInvalidOperation(() => generator.CreateType());
            Assert.That(() => generator.DeclareType(), Throws.Nothing);

            CheckThrowsForInvalidOperation(generator.DeclareType);
            CheckThrowsForInvalidOperation(generator.DefineTypeFacets);
            CheckThrowsForInvalidOperation(() => generator.CreateType());
            Assert.That(() => generator.CreateNestedTypeGenerators().ForceEnumeration(), Throws.Nothing);

            CheckThrowsForInvalidOperation(generator.DeclareType);
            CheckThrowsForInvalidOperation(() => generator.CreateNestedTypeGenerators().ForceEnumeration());
            CheckThrowsForInvalidOperation(() => generator.CreateType());
            Assert.That(() => generator.DefineTypeFacets(), Throws.Nothing);

            CheckThrowsForInvalidOperation(generator.DeclareType);
            CheckThrowsForInvalidOperation(() => generator.CreateNestedTypeGenerators().ForceEnumeration());
            CheckThrowsForInvalidOperation(generator.DefineTypeFacets);
            Assert.That(() => generator.CreateType(), Throws.Nothing);
        }