public void when_null_assemblies()
        {
            var result = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(null);

            Assert.AreEqual(0, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }
        public void when_no_assemblies()
        {
            var assemblies = new Assembly[] {};
            var result     = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(0, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }
        public void when_multiple_interfaces()
        {
            var assembly   = GenerateAssembly(@"public class Foo : IInterface, IInterface2 {}");
            var assemblies = new[] { assembly };
            var result     = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(1, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }
        public void when_empty_assembly()
        {
            var assembly   = GenerateAssembly(@"");
            var assemblies = new[] { assembly };
            var result     = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(0, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }
        public void when_constructor_throws_an_exception()
        {
            var assembly   = GenerateAssembly(@"public class Foo : IInterface { public Foo() { throw new System.Exception(); } }");
            var assemblies = new[] { assembly };

            var result = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(0, result.Instances.Count());
            Assert.AreEqual(1, result.Exceptions.Count());
        }
        public void when_is_derived()
        {
            var assembly = GenerateAssembly(
                @"public class Foo : IInterface {}
public class Bar : Foo {}");
            var assemblies = new[] { assembly };
            var result     = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(2, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }
        public void ShouldNotLoadPrivateNestedClass()
        {
            var assemblies = new[]
            {
                GenerateAssembly(@"public class Foo : IInterface {}"),
                GenerateAssembly(@"public class Foo { private class Bar : IInterface {} }"),
            };
            var result = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(1, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }
        public void when_nested_class()
        {
            var assemblies = new[]
            {
                GenerateAssembly(@"public class Foo : IInterface {}"),
                GenerateAssembly(@"public class Foo { public class Bar : IInterface {} }"),
            };

            var result = TypeInstantiator.ExportedInstancesFromAssemblies <IInterface>(assemblies);

            Assert.AreEqual(2, result.Instances.Count());
            Assert.AreEqual(0, result.Exceptions.Count());
        }