Beispiel #1
0
        public void CreateReturnsValueWithoutCache()
        {
            var             type            = typeof(Singleton);
            ConstructorInfo?constructorInfo = null;

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

            executeStrategy.Configuration.Returns(configuration);
            executeStrategy.BuildChain.Returns(buildChain);
            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 SingletonTypeCreator(CacheLevel.None);

            var actual = sut.Create(executeStrategy, type);

            actual.Should().BeOfType <Singleton>();
            actual.As <Singleton>().Value.Should().NotBeNullOrWhiteSpace();
        }
        private static void AddTypeCreators(IBuildConfiguration configuration)
        {
            var factoryTypeCreator = new FactoryTypeCreator(CacheLevel.Global);

            configuration.Add(factoryTypeCreator);

            var singletonTypeCreator = new SingletonTypeCreator(CacheLevel.Global);

            configuration.Add(singletonTypeCreator);

            configuration.AddTypeCreator <ArrayTypeCreator>();
            configuration.AddTypeCreator <EnumerableTypeCreator>();
            configuration.AddTypeCreator <StructTypeCreator>();
            configuration.AddTypeCreator <DefaultTypeCreator>();
        }
Beispiel #3
0
        public void CanCreateReturnsFalseForInterface()
        {
            var type = typeof(ITestItem);

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

            configuration.TypeResolver.Returns(typeResolver);
            typeResolver.GetBuildType(configuration, type).Returns(type);

            var sut = new SingletonTypeCreator(CacheLevel.PerInstance);

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

            actual.Should().BeFalse();
        }
Beispiel #4
0
        public void CanCreateReturnsTrueWhenNoPublicConstructorAndStaticSingletonPropertyExists()
        {
            var             type            = typeof(Singleton);
            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 SingletonTypeCreator(CacheLevel.PerInstance);

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

            actual.Should().BeTrue();
        }
Beispiel #5
0
        public void CanCreateReturnsFalseWhenDefaultConstructorFound()
        {
            var type            = typeof(TestItem);
            var constructorInfo = type.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 SingletonTypeCreator(CacheLevel.PerInstance);

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

            actual.Should().BeFalse();
        }
Beispiel #6
0
        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 SingletonTypeCreator(CacheLevel.PerInstance);

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

            actual.Should().Be(expected);
        }
Beispiel #7
0
        public void CacheLevelReturnsConstructorValue(CacheLevel cacheLevel)
        {
            var sut = new SingletonTypeCreator(cacheLevel);

            sut.CacheLevel.Should().Be(cacheLevel);
        }