Exemplo n.º 1
0
        public void CanGetProductForCompiledTypeMember()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(ITestContractA));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var key2  = new TypeKey(this.GetType(), typeof(ITestContractB));
            var type2 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key2));

            backend.ExpectCompile(type1, type2);

            libraryUnderTest.DeclareTypeMember(key1, type1);
            libraryUnderTest.DeclareTypeMember(key2, type2);
            libraryUnderTest.CompileDeclaredTypeMembers();

            //-- act

            var product1 = libraryUnderTest.GetProduct(ref key1);
            var product2 = libraryUnderTest.GetProduct(ref key2);

            //-- Assert

            product1.Artifact.SourceType.Should().BeSameAs(type1);
            product2.Artifact.SourceType.Should().BeSameAs(type2);
        }
Exemplo n.º 2
0
        public void CanBuildUndeclaredTypeMember()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(string));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var callbackCount = 0;

            //-- act

            var actualResult = libraryUnderTest.GetOrBuildTypeMember(key1, actualKey => {
                callbackCount++;
                actualKey.Should().Be(key1);
                return(type1);
            });

            //-- Assert

            callbackCount.Should().Be(1);
            actualResult.Should().BeSameAs(type1);
        }
Exemplo n.º 3
0
        public void CanPopulateProducts()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(ITestContractA));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var key2  = new TypeKey(this.GetType(), typeof(ITestContractB));
            var type2 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key2));

            libraryUnderTest.PopulateProducts(
                new TypeFactoryProduct <TestArtifact>(key1, new TestArtifact(type1)),
                new TypeFactoryProduct <TestArtifact>(key2, new TestArtifact(type2))
                );

            //-- act

            var product1 = libraryUnderTest.GetProduct(ref key1);
            var product2 = libraryUnderTest.GetProduct(ref key2);

            //-- Assert

            product1.Artifact.SourceType.Should().BeSameAs(type1);
            product2.Artifact.SourceType.Should().BeSameAs(type2);
        }
Exemplo n.º 4
0
        public void CanDeclareAndCompileTypeMembers()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(ITestContractA));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var key2  = new TypeKey(this.GetType(), typeof(ITestContractB));
            var type2 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key2));

            var key3  = new TypeKey(this.GetType(), typeof(ITestContractC));
            var type3 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key3));

            var key4  = new TypeKey(this.GetType(), typeof(ITestContractD));
            var type4 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key4));

            //-- act

            libraryUnderTest.DeclareTypeMember(key1, type1);
            libraryUnderTest.DeclareTypeMember(key2, type2);

            backend.ExpectCompile(type1, type2);
            libraryUnderTest.CompileDeclaredTypeMembers();

            libraryUnderTest.DeclareTypeMember(key3, type3);
            libraryUnderTest.DeclareTypeMember(key4, type4);

            backend.ExpectCompile(type3, type4);
            libraryUnderTest.CompileDeclaredTypeMembers();

            // this should do nothing
            libraryUnderTest.CompileDeclaredTypeMembers();

            var product1 = libraryUnderTest.GetProduct(ref key1);
            var product2 = libraryUnderTest.GetProduct(ref key2);
            var product3 = libraryUnderTest.GetProduct(ref key3);
            var product4 = libraryUnderTest.GetProduct(ref key4);

            //-- assert

            product1.Artifact.SourceType.Should().BeSameAs(type1);
            product2.Artifact.SourceType.Should().BeSameAs(type2);
            product3.Artifact.SourceType.Should().BeSameAs(type3);
            product4.Artifact.SourceType.Should().BeSameAs(type4);
        }
Exemplo n.º 5
0
        public void TypesFailedToCompileDoNotExistAsProducts()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(ITestContractA));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var key2  = new TypeKey(this.GetType(), typeof(ITestContractB));
            var type2 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key2));

            var key3  = new TypeKey(this.GetType(), typeof(ITestContractC));
            var type3 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key3));

            var key4  = new TypeKey(this.GetType(), typeof(ITestContractD));
            var type4 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key4));

            libraryUnderTest.DeclareTypeMember(key1, type1);
            libraryUnderTest.DeclareTypeMember(key2, type2);
            libraryUnderTest.DeclareTypeMember(key3, type3);
            libraryUnderTest.DeclareTypeMember(key4, type4);

            backend.ExpectCompileWithErrors(
                new[] { type1, type2, type3, type4 },
                success: new[] { true, false, true, false });

            //-- act

            Assert.Throws <CompilationErrorsException>(() => {
                libraryUnderTest.CompileDeclaredTypeMembers();
            });

            //-- Assert

            Assert.Throws <KeyNotFoundException>(() => {
                libraryUnderTest.GetProduct(ref key2);
            });

            Assert.Throws <KeyNotFoundException>(() => {
                libraryUnderTest.GetProduct(ref key4);
            });
        }
Exemplo n.º 6
0
        public void SucceededProductsExistAfterFailedCompilation()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(ITestContractA));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var key2  = new TypeKey(this.GetType(), typeof(ITestContractB));
            var type2 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key2));

            var key3  = new TypeKey(this.GetType(), typeof(ITestContractC));
            var type3 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key3));

            var key4  = new TypeKey(this.GetType(), typeof(ITestContractD));
            var type4 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key4));

            libraryUnderTest.DeclareTypeMember(key1, type1);
            libraryUnderTest.DeclareTypeMember(key2, type2);
            libraryUnderTest.DeclareTypeMember(key3, type3);
            libraryUnderTest.DeclareTypeMember(key4, type4);

            backend.ExpectCompileWithErrors(
                new[] { type1, type2, type3, type4 },
                success: new[] { true, false, true, false });

            //-- act

            Assert.Throws <CompilationErrorsException>(() => {
                libraryUnderTest.CompileDeclaredTypeMembers();
            });

            var product1 = libraryUnderTest.GetProduct(ref key1);
            var product3 = libraryUnderTest.GetProduct(ref key3);

            //-- Assert

            product1.Artifact.SourceType.Should().BeSameAs(type1);
            product3.Artifact.SourceType.Should().BeSameAs(type3);
        }
Exemplo n.º 7
0
        public void CompilationErrorsExceptionThrownWhenSomeTypesFailToCompile()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(ITestContractA));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            var key2  = new TypeKey(this.GetType(), typeof(ITestContractB));
            var type2 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key2));

            var key3  = new TypeKey(this.GetType(), typeof(ITestContractC));
            var type3 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key3));

            var key4  = new TypeKey(this.GetType(), typeof(ITestContractD));
            var type4 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key4));

            libraryUnderTest.DeclareTypeMember(key1, type1);
            libraryUnderTest.DeclareTypeMember(key2, type2);
            libraryUnderTest.DeclareTypeMember(key3, type3);
            libraryUnderTest.DeclareTypeMember(key4, type4);

            backend.ExpectCompileWithErrors(
                new[] { type1, type2, type3, type4 },
                success: new[] { true, false, true, false });

            //-- act

            var exception = Assert.Throws <CompilationErrorsException>(() => {
                libraryUnderTest.CompileDeclaredTypeMembers();
            });

            //-- Assert

            exception.TypesFailedToCompile.Should().NotBeNull();
            exception.TypesFailedToCompile.Count.Should().Be(2);
            exception.TypesFailedToCompile[0].Type.Should().BeSameAs(type2);
            exception.TypesFailedToCompile[1].Type.Should().BeSameAs(type4);
        }
Exemplo n.º 8
0
        public void CanGetTypeMemberForExistingProduct()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(string));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            backend.RaiseProductsLoaded(new TypeFactoryProduct <TestArtifact>(key1, new TestArtifact(type1)));

            //-- act

            var actualResult = libraryUnderTest.GetOrBuildTypeMember(key1, actualKey => {
                throw new Exception("Callback should not be invoked");
            });

            //-- Assert

            actualResult.Should().BeSameAs(type1);
        }
Exemplo n.º 9
0
        public void CanGetDeclaredTypeMember()
        {
            //-- arrange

            var backend          = new TestBackend();
            var libraryUnderTest = new TypeLibrary <TestArtifact>(backend);

            var key1  = new TypeKey(this.GetType(), typeof(string));
            var type1 = new TypeMember(new TypeGeneratorInfo(this.GetType(), key1));

            libraryUnderTest.DeclareTypeMember(key1, type1);

            //-- act

            var actualResult = libraryUnderTest.GetOrBuildTypeMember(key1, actualKey => {
                throw new Exception("Callback should not be invoked");
            });

            //-- Assert

            actualResult.Should().BeSameAs(type1);
        }
Exemplo n.º 10
0
 public void SetUp()
 {
     model   = new();
     backend = new();
     sut     = ModelBinding.New(model, backend);
 }