/src/UnitTests/IOC/Configuration/AssemblyContainerLoaderTests.cs
http://github.com/philiplaureano/LinFu · C# · 125 lines · 85 code · 28 blank · 12 comment · 0 complexity · 9312addc70cd3d3e7a9739c4584efaed MD5 · raw file
- using System;
- using LinFu.IoC.Configuration;
- using LinFu.IoC.Interfaces;
- using LinFu.Reflection;
- using Moq;
- using Xunit;
- using SampleLibrary;
- namespace LinFu.UnitTests.IOC.Configuration
- {
- public class AssemblyContainerLoaderTests : BaseTestFixture
- {
- protected override void Init()
- {
- _mockAssemblyLoader = new Mock<IAssemblyLoader>();
- _mockTypeExtractor = new Mock<ITypeExtractor>();
- _mockTypeLoader = new Mock<ITypeLoader>();
- }
- protected override void Term()
- {
- _mockAssemblyLoader.VerifyAll();
- _mockTypeExtractor.VerifyAll();
- _mockTypeLoader.VerifyAll();
- _mockAssemblyLoader = null;
- _mockTypeExtractor = null;
- _mockTypeLoader = null;
- }
- private Mock<IAssemblyLoader> _mockAssemblyLoader;
- private Mock<ITypeExtractor> _mockTypeExtractor;
- private Mock<ITypeLoader> _mockTypeLoader;
- [Fact]
- public void AssemblyContainerLoaderShouldCallAssemblyLoader()
- {
- var containerLoader = new AssemblyContainerLoader();
- // The container loader should use the assembly loader
- // to load the assembly
- var filename = "input.dll";
- _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(typeof(SampleClass).Assembly);
- containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
- containerLoader.Load(filename);
- }
- [Fact]
- public void AssemblyContainerLoaderShouldCallTypeExtractor()
- {
- var containerLoader = new AssemblyContainerLoader();
- var filename = "input.dll";
- var targetAssembly = typeof(SampleClass).Assembly;
- // Make sure that it calls the assembly loader
- _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(targetAssembly);
- // It must call the Type Extractor
- _mockTypeExtractor.Expect(extractor => extractor.GetTypes(targetAssembly))
- .Returns(new[] {typeof(SampleClass)});
- var assemblyActionLoader = new AssemblyActionLoader<IServiceContainer>(() => containerLoader.TypeLoaders);
- assemblyActionLoader.TypeExtractor = _mockTypeExtractor.Object;
- containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
- containerLoader.AssemblyActionLoader = assemblyActionLoader;
- containerLoader.Load(filename);
- }
- [Fact]
- public void AssemblyContainerLoaderShouldCallTypeLoader()
- {
- // HACK: The Cut&Paste is ugly, but it works
- var containerLoader = new AssemblyContainerLoader();
- var filename = "input.dll";
- var targetAssembly = typeof(SampleClass).Assembly;
- // Make sure that it calls the assembly loader
- _mockAssemblyLoader.Expect(loader => loader.Load(filename)).Returns(targetAssembly);
- // It must call the Type Extractor
- _mockTypeExtractor.Expect(extractor => extractor.GetTypes(targetAssembly))
- .Returns(new[] {typeof(SampleClass)});
- // Make sure that it calls the type loaders
- _mockTypeLoader.Expect(loader => loader.CanLoad(typeof(SampleClass))).Returns(true);
- _mockTypeLoader.Expect(loader => loader.Load(typeof(SampleClass)))
- .Returns(new Action<IServiceContainer>[0]);
- var assemblyActionLoader = new AssemblyActionLoader<IServiceContainer>(() => containerLoader.TypeLoaders);
- assemblyActionLoader.TypeExtractor = _mockTypeExtractor.Object;
- containerLoader.AssemblyLoader = _mockAssemblyLoader.Object;
- containerLoader.AssemblyActionLoader = assemblyActionLoader;
- // The container loader should call the type loader
- // once the load method is called
- containerLoader.TypeLoaders.Add(_mockTypeLoader.Object);
- containerLoader.Load(filename);
- }
- [Fact]
- public void AssemblyContainerLoaderShouldOnlyLoadDllFiles()
- {
- var mockTypeLoader = new Mock<ITypeLoader>();
- var containerLoader = new AssemblyContainerLoader();
- containerLoader.TypeLoaders.Add(mockTypeLoader.Object);
- // This should return true
- var validFile = typeof(AssemblyContainerLoaderTests).Assembly.Location;
- Assert.True(containerLoader.CanLoad(validFile));
- // This should return false;
- var invalidFile = "input.txt";
- Assert.False(containerLoader.CanLoad(invalidFile));
- }
- }
- }