public void CreateReturnsInstanceCreatedWithMatchingParameterConstructorTest()
        {
            var args = new object[]
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString(),
                DateTime.UtcNow,
                true,
                Guid.NewGuid(),
                Environment.TickCount
            };

            var target = new DefaultTypeCreator();

            var actual = target.Create(typeof(Person), null, null, args);

            actual.Should().BeOfType<Person>();

            var person = (Person) actual;

            person.FirstName.Should().Be((string) args[0]);
            person.LastName.Should().Be((string) args[1]);
            person.DOB.Should().Be((DateTime) args[2]);
            person.IsActive.Should().Be((bool) args[3]);
            person.Id.Should().Be((Guid) args[4]);
            person.Priority.Should().Be((int) args[5]);
        }
        public void CreateReturnsInstanceCreatedWithCreatedParameters()
        {
            var constructorResolver = new DefaultConstructorResolver(CacheLevel.PerInstance);
            var constructorInfo     = constructorResolver.Resolve(typeof(SimpleConstructor), null) !;
            var args = new object[]
            {
                new SlimModel()
            };

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();

            executeStrategy.CreateParameters(constructorInfo).Returns(args);
            configuration.ConstructorResolver.Returns(constructorResolver);
            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.Configuration.Returns(configuration);

            var sut = new DefaultTypeCreator();

            var actual = sut.Create(executeStrategy, typeof(SimpleConstructor), null);

            actual.Should().NotBeNull();
        }
        public void PriorityReturnsHigherThanDefaultTypeCreator()
        {
            var sut   = new ArrayTypeCreator();
            var other = new DefaultTypeCreator();

            sut.Priority.Should().BeGreaterThan(other.Priority);
        }
        public void CanCreateThrowsExceptionWithNullTypeTest()
        {
            var target = new DefaultTypeCreator();

            Action action = () => target.CanCreate(null, null, null);

            action.ShouldThrow<ArgumentNullException>();
        }
        public void CanCreateReturnsWhetherTypeCanBeCreatedTest(Type targetType, bool expected)
        {
            var target = new DefaultTypeCreator();

            var actual = target.CanCreate(targetType, null, null);

            actual.Should().Be(expected);
        }
Ejemplo n.º 6
0
        public void ImplementedByTypeReturnsTypeCreatorType()
        {
            var creator = new DefaultTypeCreator();

            var sut = new BuildCapability(creator, false, false);

            sut.ImplementedByType.Should().Be <DefaultTypeCreator>();
        }
        public void CreateThrowsExceptionWhenNoTypeNotSupportedTest()
        {
            var target = new DefaultTypeCreator();

            Action action = () => target.Create(typeof(Stream), null, null);

            action.ShouldThrow<NotSupportedException>();
        }
        public void CreateReturnsInstanceCreatedWithDefaultConstructorTest()
        {
            var target = new DefaultTypeCreator();

            var actual = target.Create(typeof(Person), null, null);

            actual.Should().NotBeNull();
        }
        public void AddWithTypeCreatorThrowsExceptionWithNullConfiguration()
        {
            var typeCreator = new DefaultTypeCreator();

            Action action = () => BuildConfigurationExtensions.Add(null !, typeCreator);

            action.Should().Throw <ArgumentNullException>();
        }
        public void CanPopulateReturnsTrueTest()
        {
            var target = new DefaultTypeCreator();

            var actual = target.CanPopulate(typeof(Person), null, null);

            actual.Should().BeTrue();
        }
        public void CanPopulateThrowsExceptionWithNullTypeTest()
        {
            var buildChain = new LinkedList<object>();

            var target = new DefaultTypeCreator();

            Action action = () => target.CanPopulate(null, "Name", buildChain);

            action.ShouldThrow<ArgumentNullException>();
        }
        public void AddWithTypeCreatorAddsTypeCreatorToConfiguration()
        {
            var typeCreator = new DefaultTypeCreator();

            var sut = new BuildConfiguration();

            var config = sut.Add(typeCreator);

            config.Should().Be(sut);

            sut.TypeCreators.Should().Contain(typeCreator);
        }
        public void UpdateTypeCreatorThrowsExceptionWhenOnlyBaseClassFound()
        {
            var sut         = new BuildConfiguration();
            var typeCreator = new DefaultTypeCreator();

            sut.TypeCreators.Add(typeCreator);

            Action action = () => sut.UpdateTypeCreator <ArrayTypeCreator>(x =>
            {
                // Do nothing
            });

            action.Should().Throw <InvalidOperationException>();
        }
        public void UpdateTypeCreatorUpdateMatchingTypeCreatorMatchingExplicitType()
        {
            var maxCount = Environment.TickCount;
            var sut      = new BuildConfiguration();
            var first    = new DefaultTypeCreator();
            var second   = new ArrayTypeCreator();

            sut.TypeCreators.Add(first);
            sut.TypeCreators.Add(second);

            var config = sut.UpdateTypeCreator <ArrayTypeCreator>(x => { x.MaxCount = maxCount; });

            config.Should().Be(sut);

            second.MaxCount.Should().Be(maxCount);
        }
        public void CreateThrowsExceptionWhenNoAppropriateConstructorFoundTest()
        {
            var args = new object[]
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString(),
                Guid.NewGuid(),
                Environment.TickCount
            };

            var target = new DefaultTypeCreator();

            Action action = () => target.Create(typeof(Person), null, null, args);

            action.ShouldThrow<MissingMemberException>();
        }
Ejemplo n.º 16
0
        public void CreateThrowsExceptionWhenTypeNotSupported()
        {
            var targetType = typeof(Environment);

            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();
            var executeStrategy = Substitute.For <IExecuteStrategy>();

            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, targetType).Returns(targetType);
            executeStrategy.Configuration.Returns(configuration);

            var sut = new DefaultTypeCreator();

            Action action = () => sut.Create(executeStrategy, targetType);

            action.Should().Throw <NotSupportedException>();
        }
Ejemplo n.º 17
0
        public void CanCreateReturnsWhetherTypeCanBeCreatedTest(Type targetType, bool expected)
        {
            var constructorInfo = targetType.GetConstructors().FirstOrDefault();

            var typeResolver        = Substitute.For <ITypeResolver>();
            var constructorResolver = Substitute.For <IConstructorResolver>();
            var configuration       = Substitute.For <IBuildConfiguration>();

            configuration.TypeResolver.Returns(typeResolver);
            configuration.ConstructorResolver.Returns(constructorResolver);
            typeResolver.GetBuildType(configuration, targetType).Returns(targetType);
            constructorResolver.Resolve(targetType, null).Returns(constructorInfo);

            var sut = new DefaultTypeCreator();

            var actual = sut.CanCreate(configuration, null !, targetType);

            actual.Should().Be(expected);
        }
        public void CreateThrowsExceptionWhenNoTypeNotSupported()
        {
            var buildChain = new BuildHistory();

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();

            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Configuration.Returns(configuration);

            var sut = new DefaultTypeCreator();

            Action action = () => sut.Create(executeStrategy, typeof(Stream));

            action.Should().Throw <NotSupportedException>();
        }
        public void CreateThrowsExceptionWhenConstructorNotFound()
        {
            var constructorResolver = Substitute.For <IConstructorResolver>();
            var executeStrategy     = Substitute.For <IExecuteStrategy>();
            var typeResolver        = Substitute.For <ITypeResolver>();
            var configuration       = Substitute.For <IBuildConfiguration>();

            constructorResolver.Resolve(Arg.Any <Type>()).Returns((ConstructorInfo?)null);
            configuration.ConstructorResolver.Returns(constructorResolver);
            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.Configuration.Returns(configuration);

            var sut = new DefaultTypeCreator();

            Action action = () => sut.Create(executeStrategy, typeof(Person), null);

            action.Should().Throw <NotSupportedException>();
        }
        public void CreateReturnsInstanceCreatedWithResolvedDefaultConstructorWhenArgumentsIsNull()
        {
            var constructorResolver = new DefaultConstructorResolver(CacheLevel.PerInstance);

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();

            configuration.ConstructorResolver.Returns(constructorResolver);
            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.Configuration.Returns(configuration);

            var sut = new DefaultTypeCreator();

            var actual = sut.Create(executeStrategy, typeof(Person), null);

            actual.Should().NotBeNull();
        }
        public void CanCreateReturnsTrueWhenTypeHasPublicConstructor()
        {
            var type            = typeof(Person);
            var constructorInfo = typeof(Person).GetConstructors().First();

            var configuration       = Substitute.For <IBuildConfiguration>();
            var typeResolver        = Substitute.For <ITypeResolver>();
            var constructorResolver = Substitute.For <IConstructorResolver>();
            var buildChain          = Substitute.For <IBuildChain>();

            configuration.TypeResolver.Returns(typeResolver);
            configuration.ConstructorResolver.Returns(constructorResolver);
            typeResolver.GetBuildType(configuration, type).Returns(type);
            constructorResolver.Resolve(type, Arg.Any <object?[]?>()).Returns(constructorInfo);

            var sut = new DefaultTypeCreator();

            var actual = sut.CanCreate(configuration, buildChain, type);

            actual.Should().BeTrue();
        }
        public void CreateThrowsExceptionWhenTypeConstructorsDoNotSupportProvidedArguments()
        {
            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();

            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.Configuration.Returns(configuration);

            var args = new object[]
            {
                Guid.NewGuid()
            };

            var sut = new DefaultTypeCreator();

            Action action = () => sut.Create(executeStrategy, typeof(Person), args);

            action.Should().Throw <NotSupportedException>();
        }
        public void CanCreateReturnsFalseWhenNoPublicConstructorFound()
        {
            var             type            = typeof(FactoryItem);
            ConstructorInfo?constructorInfo = null;

            var configuration       = Substitute.For <IBuildConfiguration>();
            var typeResolver        = Substitute.For <ITypeResolver>();
            var constructorResolver = Substitute.For <IConstructorResolver>();
            var buildChain          = Substitute.For <IBuildChain>();

            configuration.TypeResolver.Returns(typeResolver);
            configuration.ConstructorResolver.Returns(constructorResolver);
            typeResolver.GetBuildType(configuration, type).Returns(type);
            constructorResolver.Resolve(type, Arg.Any <object?[]?>()).Returns(constructorInfo);

            var sut = new DefaultTypeCreator();

            var actual = sut.CanCreate(configuration, buildChain, type);

            actual.Should().BeFalse();
        }
        public void CreateReturnsInstanceCreatedWithProvidedArguments()
        {
            var constructorInfo = typeof(Person).GetConstructors().First();

            var executeStrategy     = Substitute.For <IExecuteStrategy>();
            var typeResolver        = Substitute.For <ITypeResolver>();
            var constructorResolver = Substitute.For <IConstructorResolver>();
            var configuration       = Substitute.For <IBuildConfiguration>();

            configuration.TypeResolver.Returns(typeResolver);
            configuration.ConstructorResolver.Returns(constructorResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.Configuration.Returns(configuration);
            constructorResolver.Resolve(typeof(Person), Arg.Any <object?[]?>()).Returns(constructorInfo);

            var args = new object[]
            {
                Guid.NewGuid().ToString(),
                Guid.NewGuid().ToString(),
                DateTime.UtcNow,
                true,
                Guid.NewGuid(),
                Environment.TickCount
            };

            var sut = new DefaultTypeCreator();

            var actual = sut.Create(executeStrategy, typeof(Person), args);

            actual.Should().BeOfType <Person>();

            var person = (Person)actual !;

            person.FirstName.Should().Be((string)args[0]);
            person.LastName.Should().Be((string)args[1]);
            person.DOB.Should().Be((DateTime)args[2]);
            person.IsActive.Should().Be((bool)args[3]);
            person.Id.Should().Be((Guid)args[4]);
            person.Priority.Should().Be((int)args[5]);
        }
        public void PopulateReturnsProvidedInstance()
        {
            var expected            = Model.Create <Simple>() !;
            var buildChain          = new BuildHistory();
            var constructorResolver = new DefaultConstructorResolver(CacheLevel.PerInstance);

            var executeStrategy = Substitute.For <IExecuteStrategy>();
            var typeResolver    = Substitute.For <ITypeResolver>();
            var configuration   = Substitute.For <IBuildConfiguration>();

            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, Arg.Any <Type>()).Returns(x => x.Arg <Type>());
            executeStrategy.BuildChain.Returns(buildChain);
            executeStrategy.Configuration.Returns(configuration);
            configuration.ConstructorResolver.Returns(constructorResolver);

            var sut = new DefaultTypeCreator();

            var actual = sut.Populate(executeStrategy, expected);

            actual.Should().Be(expected);
        }
        public void AddWithTypeCreatorThrowsExceptionWithNullCompilerTest()
        {
            var rule = new DefaultTypeCreator();

            IBuildStrategyCompiler target = null;

            Action action = () => target.Add(rule);

            action.ShouldThrow<ArgumentNullException>();
        }
        public void AddWithTypeCreatorAddsRuleToCompilerTest()
        {
            var rule = new DefaultTypeCreator();

            var target = new BuildStrategyCompiler();

            target.Add(rule);

            target.TypeCreators.Should().Contain(rule);
        }
        public void PopulateReturnsProvidedInstanceTest()
        {
            var executeStrategy = new DummyExecuteStrategy();
            var expected = new SlimModel();

            var target = new DefaultTypeCreator();

            var actual = target.Populate(expected, executeStrategy);

            actual.Should().BeSameAs(expected);
        }
        public void PopulateThrowsExceptionWithNullTypeTest()
        {
            var executeStrategy = new DummyExecuteStrategy();

            var target = new DefaultTypeCreator();

            Action action = () => target.Populate(null, executeStrategy);

            action.ShouldThrow<ArgumentNullException>();
        }
        public void ProrityReturnsHigherThanDefaultTypeCreatorTest()
        {
            var target = new ArrayTypeCreator();
            var other = new DefaultTypeCreator();

            target.Priority.Should().BeGreaterThan(other.Priority);
        }
        public void CreateWithThrowsExceptionWhenPropertyCannotBeCreatedTest()
        {
            var typeCreator = new DefaultTypeCreator();
            var typeCreators = new List<ITypeCreator>();

            var buildStrategy = Substitute.For<IBuildStrategy>();
            var resolver = Substitute.For<IConstructorResolver>();

            typeCreators.Add(typeCreator);

            resolver.Resolve(typeof(SlimModel), Arg.Any<object[]>()).Returns(typeof(SlimModel).GetConstructors()[0]);
            buildStrategy.ConstructorResolver.Returns(resolver);
            buildStrategy.TypeCreators.Returns(typeCreators.AsReadOnly());

            var target = new DefaultExecuteStrategy();

            target.Initialize(buildStrategy, buildStrategy.GetBuildLog());

            Action action = () => target.CreateWith(typeof(SlimModel));

            action.ShouldThrow<BuildException>();
        }