Example #1
0
        public void Composer_WhenProvidedNullDesignationDelegate_ThrowsArgumentException()
        {
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            Assert.Throws <ArgumentNullException>(
                () => ModuleComposer <NoFunctions, object, object> .Compose(mockModuleLoader.Object, null));
        }
Example #2
0
        public void Composer_WhenProvidedNullModuleLoader_ThrowsArgumentException()
        {
            var mockDesignation = new Action <IModuleDesignator <NoFunctions, object> >(designator => { });

            Assert.Throws <ArgumentNullException>(
                () => ModuleComposer <NoFunctions, object, object> .Compose(null, mockDesignation));
        }
Example #3
0
        public void Composer_WhenTFunctionIsNotEnum_ThrowsInvalidCastException()
        {
            var mockDesignation  = new Action <IModuleDesignator <object, object> >(designator => { });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            Assert.Throws <InvalidCastException>(
                () => ModuleComposer <object, object, object> .Compose(mockModuleLoader.Object, mockDesignation));
        }
        public void ModuleComposer_GivenAutofacModuleLoader_ShouldProvideAContainerWhichCanResolveDependencies()
        {
            var container = ModuleComposer <Functions, Module, IContainer> .Compose(new AutofacModuleLoader(), designator =>
            {
                designator.Use <TestModule>(Functions.Function);
            });

            var dependency = container.Resolve <IDependency>();

            Assert.IsInstanceOf <Dependency>(dependency);
        }
Example #5
0
        public void Composer_WhenDesignationDelegateDoesNotDefineAModuleForAllFunctions_ThrowsInvalidOperationException()
        {
            var mockDesignation = new Action <IModuleDesignator <SomeFunctions, object> >(designator =>
            {
                designator.Use <object>(SomeFunctions.Function1);
                //designator.Use<object>(SomeFunctions.Function2); //COMMENTED ON PURPOSE
            });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            Assert.Throws <InvalidOperationException>(
                () => ModuleComposer <SomeFunctions, object, object> .Compose(mockModuleLoader.Object, mockDesignation));
        }
Example #6
0
        public void Composer_WhenProvidedDesignationDelegate_ExecutesDelegate()
        {
            bool wasCalled       = false;
            var  mockDesignation = new Action <IModuleDesignator <NoFunctions, object> >(designator =>
            {
                wasCalled = true;
            });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            ModuleComposer <NoFunctions, object, object> .Compose(mockModuleLoader.Object, mockDesignation);

            Assert.IsTrue(wasCalled);
        }
Example #7
0
        public void Composer_WhenAllFunctionsDefinedUsingGenericMethod_EachModuleIsUnique()
        {
            var mockDesignation = new Action <IModuleDesignator <SomeFunctions, object> >(designator =>
            {
                designator.Use <object>(SomeFunctions.Function1);
                designator.Use <object>(SomeFunctions.Function2);
            });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            ModuleComposer <SomeFunctions, object, object> .Compose(mockModuleLoader.Object, mockDesignation);

            mockModuleLoader.Verify(loader => loader.LoadModules(It.Is(Distinct())));
        }
Example #8
0
        public void Composer_WhenAllFunctionalModulesProvided_ProvidesAllModulesToModuleLoader()
        {
            var module1         = new object();
            var module2         = new object();
            var mockDesignation = new Action <IModuleDesignator <SomeFunctions, object> >(designator =>
            {
                designator.Use(module1, SomeFunctions.Function1);
                designator.Use(module2, SomeFunctions.Function2);
            });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            ModuleComposer <SomeFunctions, object, object> .Compose(mockModuleLoader.Object, mockDesignation);

            mockModuleLoader.Verify(
                LoadModulesRecievedEnumerableWith(module1, module2));
        }
Example #9
0
        public void Composer_WhenAllFunctionsDefined_ReturnsContainerCreatedByModuleLoader()
        {
            var module1         = new object();
            var module2         = new object();
            var mockContainer   = new object();
            var mockDesignation = new Action <IModuleDesignator <SomeFunctions, object> >(designator =>
            {
                designator.Use(module1, SomeFunctions.Function1);
                designator.Use(module2, SomeFunctions.Function2);
            });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            mockModuleLoader.Setup(loader => loader.LoadModules(It.IsAny <IEnumerable <object> >()))
            .Returns(mockContainer);

            var container = ModuleComposer <SomeFunctions, object, object> .Compose(mockModuleLoader.Object, mockDesignation);

            Assert.AreSame(mockContainer, container);
        }
Example #10
0
        public void Composer_WhenFunctionDefinedByMultipleModules_ProvidesLastDefinedModulesForEachFunctionToModuleLoader()
        {
            var module1         = new object();
            var module2         = new object();
            var module3         = new object();
            var module4         = new object();
            var mockDesignation = new Action <IModuleDesignator <SomeFunctions, object> >(designator =>
            {
                designator.Use(module1, SomeFunctions.Function1);
                designator.Use(module2, SomeFunctions.Function2);
                designator.Use(module3, SomeFunctions.Function1);
                designator.Use(module4, SomeFunctions.Function2);
            });
            var mockModuleLoader = new Mock <IModuleLoader <object, object> >();

            ModuleComposer <SomeFunctions, object, object> .Compose(mockModuleLoader.Object, mockDesignation);

            mockModuleLoader.Verify(
                LoadModulesRecievedEnumerableWith(module3, module4));
        }