public void WhereFiltersNoneMatchingTypes()
        {
            var expectedTypes = new[] { typeof(int), typeof(object) };
            var types = expectedTypes.Union(new[] { typeof(DefaultConvention) });
            var generatorMock = new Mock<IBindingGenerator>();

            this.SetupTypeFilterGetTypes(types);

            this.testee.SelectAllTypesFrom(new Assembly[0]);
            this.testee.Where(t => t.FullName.StartsWith("System."));
            this.testee.BindWith(generatorMock.Object);

            this.VerifyAllBindingsCreated(expectedTypes, generatorMock);
        }
        public void Configure()
        {
            var types = new[] { typeof(int), typeof(object) };
            var generatorMock = new Mock<IBindingGenerator>();
            var intBindingMocks = new[] { CreateBindingMock(), CreateBindingMock() };
            var objectBindingMocks = new[] { CreateBindingMock(), CreateBindingMock() };

            this.SetupTypeFilterGetTypes(types);
            generatorMock.Setup(g => g.CreateBindings(typeof(int), this.bindingRoot)).Returns(intBindingMocks.Select(b => b.Object));
            generatorMock.Setup(g => g.CreateBindings(typeof(object), this.bindingRoot)).Returns(objectBindingMocks.Select(b => b.Object));

            this.testee.SelectAllTypesFrom(new Assembly[0]);
            this.testee.BindWith(generatorMock.Object);
            this.testee.Configure(c => c.InSingletonScope());

            foreach (var bindingMock in intBindingMocks.Union(objectBindingMocks))
            {
                bindingMock.Verify(b => b.InSingletonScope());
            }
        }
        public void TypesArePassedDistinctToTheGenerator()
        {
            var expectedTypes = new[] { typeof(int), typeof(object) };
            var types = expectedTypes.Union(expectedTypes);
            var generatorMock = new Mock<IBindingGenerator>();

            this.SetupTypeFilterGetTypes(types);

            this.testee.SelectAllTypesFrom(new Assembly[0]);
            this.testee.BindWith(generatorMock.Object);

            this.VerifyAllBindingsCreated(expectedTypes, generatorMock);
        }
        public void AdditionalTypesCanBeSelectedFromOtherAssembliesUsingFromSelectAgain()
        {
            var assemblies1 = new[] { Assembly.GetExecutingAssembly() };
            var assemblies2 = new[] { Assembly.GetCallingAssembly() };
            var types1 = new[] { typeof(object), typeof(float) };
            var types2 = new[] { typeof(double), typeof(int) };
            var generatorMock = new Mock<IBindingGenerator>();

            this.SetupTypeFilterGetTypes(assemblies1, types1);
            this.SetupTypeFilterGetTypes(assemblies2, types2);

            this.testee.SelectAllTypesFrom(assemblies1);
            this.testee.SelectAllTypesFrom(assemblies2);
            this.testee.BindWith(generatorMock.Object);

            this.VerifyAllBindingsCreated(types1.Union(types2), generatorMock);
        }
        public void ExcludingRemovesTheGivenType()
        {
            var expectedTypes = new[] { typeof(int), typeof(object) };
            var types = expectedTypes.Union(new[] { typeof(DefaultConvention) });
            var generatorMock = new Mock<IBindingGenerator>();

            this.SetupTypeFilterGetTypes(types);

            this.testee.SelectAllTypesFrom(new Assembly[0]);
            this.testee.Excluding(new[] { typeof(DefaultConvention) });
            this.testee.BindWith(generatorMock.Object);

            this.VerifyAllBindingsCreated(expectedTypes, generatorMock);
        }