Esempio n. 1
0
        public void CreateParts_should_properly_extract_closed_generic_constructor_argument_when_importing_collection_and_when_contract_type_is_not_specified()
        {
            var exportConvention =
                new ExportConvention
            {
                Members      = t => new[] { t },
                ContractType = x => typeof(ConventionPart4),
            };

            var importConvention =
                new ImportConvention
            {
                Members = t => new[] { typeof(ConventionPart4).GetConstructors().Single() }
            };

            var convention =
                new PartConvention();

            convention.Imports.Add(importConvention);
            convention.Exports.Add(exportConvention);
            convention.Condition = t => t == typeof(ConventionPart4);

            var registry =
                new FakePartRegistry2(convention);
            ConventionPartCreator creator = new ConventionPartCreator(registry);
            var partDefinition            = creator.CreateParts().First();
            var importDefinitin           = partDefinition.ImportDefinitions.Single();

            importDefinitin.ContractName.ShouldEqual("MefContrib.Hosting.Conventions.Tests.IRepository(System.String)");
        }
        public void GetExportContractName_should_return_default_contract_name_of_last_default_convention_when_match_is_available()
        {
            const string expectedContractName = "Bar";

            var service =
                GetServiceWithDefaultConventions();

            service.DefaultConventions.Add(
                new TypeDefaultConvention
            {
                ContractName = expectedContractName,
                ContractType = typeof(decimal),
                TargetType   = typeof(string)
            });

            var member =
                ReflectionServices.GetProperty <FakePart>(x => x.Name);

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var result =
                service.GetExportContractName(convention, member);

            result.ShouldEqual(expectedContractName);
        }
Esempio n. 3
0
        public void Metadata_should_not_null_on_new_instance()
        {
            var export =
                new ExportConvention();

            export.Metadata.ShouldNotBeNull();
        }
        public void GetExportTypeIdentity_should_return_tyoe_identity_of_default_contract_type_of_last_default_convention_when_match_is_available()
        {
            var service =
                GetServiceWithDefaultConventions();

            service.DefaultConventions.Add(
                new TypeDefaultConvention
            {
                ContractName = string.Empty,
                ContractType = typeof(decimal),
                TargetType   = typeof(string)
            });

            var member =
                ReflectionServices.GetProperty <FakePart>(x => x.Name);

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var result =
                service.GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(typeof(decimal));

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void GetExportContractName_should_return_default_contract_name_of_last_default_convention_when_match_is_available()
        {
            const string expectedContractName = "Bar";

            var service =
                GetServiceWithDefaultConventions();

            service.DefaultConventions.Add(
                new TypeDefaultConvention
                {
                    ContractName = expectedContractName,
                    ContractType = typeof(decimal),
                    TargetType = typeof(string)
                });

            var member =
                ReflectionServices.GetProperty<FakePart>(x => x.Name);

            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null,
                    Members = x => new[] { member }
                };

            var result =
                service.GetExportContractName(convention, member);

            result.ShouldEqual(expectedContractName);
        }
        public void Metadata_should_not_null_on_new_instance()
        {
            var export =
                new ExportConvention();

            export.Metadata.ShouldNotBeNull();
        }
Esempio n. 7
0
        public void CreateParts_should_properly_extract_closed_generic_type_parameter()
        {
            var exportConvention =
                new ExportConvention
            {
                Members      = t => new[] { t },
                ContractType = x => typeof(ConventionPart2),
            };

            var importConvention =
                new ImportConvention
            {
                Members      = t => new[] { ReflectionServices.GetProperty <ConventionPart2>(p => p.Repository) },
                ContractType = x => typeof(IRepository <string>)
            };

            var convention =
                new PartConvention();

            convention.Imports.Add(importConvention);
            convention.Exports.Add(exportConvention);
            convention.Condition = t => t == typeof(ConventionPart2);

            var registry =
                new FakePartRegistry2(convention);
            ConventionPartCreator creator = new ConventionPartCreator(registry);
            var partDefinition            = creator.CreateParts().First();

            partDefinition.ImportDefinitions.Single().ContractName.ShouldEqual("MefContrib.Hosting.Conventions.Tests.IRepository(System.String)");
        }
        public void Equals_should_return_false_if_called_with_null()
        {
            var export =
                new ExportConvention();

            var results =
                export.Equals((ExportConvention)null);

            results.ShouldBeFalse();
        }
        public void Equals_should_return_false_when_contract_is_not_same_on_the_instance_that_is_being_compared_againts()
        {
            var export =
                new ExportConvention { ContractName = x => "Foo" };

            var results =
                export.Equals(new ExportConvention { ContractName = x => "Bar" });

            results.ShouldBeFalse();
        }
        public void Equals_should_return_true_if_same_as_instance_being_compared_against()
        {
            var instance =
                new ExportConvention();

            var results =
                instance.Equals(new ExportConvention());

            results.ShouldBeTrue();
        }
        public void Equals_should_return_false_when_type_identity_is_not_same_on_the_instance_that_is_being_compared_against()
        {
            var instance =
                new ExportConvention { ContractType = x => typeof(string) };

            var results =
                instance.Equals(new ExportConvention { ContractType = x => typeof(int) });

            results.ShouldBeFalse();
        }
Esempio n. 12
0
        public void Equals_should_return_false_if_called_with_null()
        {
            var export =
                new ExportConvention();

            var results =
                export.Equals((ExportConvention)null);

            results.ShouldBeFalse();
        }
Esempio n. 13
0
        public void Equals_should_return_true_if_same_as_instance_being_compared_against()
        {
            var instance =
                new ExportConvention();

            var results =
                instance.Equals(new ExportConvention());

            results.ShouldBeTrue();
        }
Esempio n. 14
0
        public void ConventionCatalog_should_import_closed_generic()
        {
            var exportConvention =
                new ExportConvention
            {
                Members      = t => new[] { t },
                ContractType = x => typeof(ConventionPart2),
            };

            var importConvention =
                new ImportConvention
            {
                Members      = t => new[] { ReflectionServices.GetProperty <ConventionPart2>(p => p.Repository) },
                ContractType = x => typeof(IRepository <string>)
            };

            var convention =
                new PartConvention();

            convention.Imports.Add(importConvention);
            convention.Exports.Add(exportConvention);
            convention.Condition = t => t == typeof(ConventionPart2);

            var model =
                new FakePartRegistry2(convention);

            // Setup container
            ConventionCatalog conventionCatalog =
                new ConventionCatalog(model);

            var typeCatalog =
                new TypeCatalog(typeof(AttributedClosedRepository), typeof(AttributedPart2));

            var aggregated =
                new AggregateCatalog(typeCatalog, conventionCatalog);

            var container =
                new CompositionContainer(aggregated);

            var part = new AttributedPart2();

            var batch =
                new CompositionBatch();

            batch.AddPart(part);

            container.Compose(batch);

            // Assert
            part.Part.ShouldNotBeNull();
            part.Part.Repository.ShouldNotBeNull();
        }
Esempio n. 15
0
        public void Equals_should_return_false_when_contract_is_not_same_on_the_instance_that_is_being_compared_againts()
        {
            var export =
                new ExportConvention {
                ContractName = x => "Foo"
            };

            var results =
                export.Equals(new ExportConvention {
                ContractName = x => "Bar"
            });

            results.ShouldBeFalse();
        }
Esempio n. 16
0
        public void Equals_should_return_false_when_type_identity_is_not_same_on_the_instance_that_is_being_compared_against()
        {
            var instance =
                new ExportConvention {
                ContractType = x => typeof(string)
            };

            var results =
                instance.Equals(new ExportConvention {
                ContractType = x => typeof(int)
            });

            results.ShouldBeFalse();
        }
        public void GetExportContractName_should_return_convention_contract_name_when_not_null()
        {
            const string contract = "Contract";

            var convention =
                new ExportConvention
                {
                    ContractName = x => contract,
                    ContractType = x => typeof(string)
                };

            var results = this.Service.GetExportContractName(
                convention, ReflectionServices.GetField<FakePart>(x => x.Count));

            results.ShouldEqual(contract);
        }
Esempio n. 18
0
        public void GetExportContractName_should_return_convention_contract_name_when_not_null()
        {
            const string contract = "Contract";

            var convention =
                new ExportConvention
            {
                ContractName = x => contract,
                ContractType = x => typeof(string)
            };

            var results = this.Service.GetExportContractName(
                convention, ReflectionServices.GetField <FakePart>(x => x.Count));

            results.ShouldEqual(contract);
        }
Esempio n. 19
0
        public void GetExportContractName_should_return_convention_contract_type_when_not_null_and_contract_name_is_null()
        {
            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = x => typeof(string)
            };

            var results = this.Service.GetExportContractName(
                convention, ReflectionServices.GetField <FakePart>(x => x.Count));

            var expectedContractName =
                AttributedModelServices.GetContractName(convention.ContractType.Invoke(null));

            results.ShouldEqual(expectedContractName);
        }
        public void GetExportContractName_should_return_convention_contract_type_when_not_null_and_contract_name_is_null()
        {
            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = x => typeof(string)
                };

            var results = this.Service.GetExportContractName(
                convention, ReflectionServices.GetField<FakePart>(x => x.Count));

            var expectedContractName =
                AttributedModelServices.GetContractName(convention.ContractType.Invoke(null));

            results.ShouldEqual(expectedContractName);
        }
        public void GetExportContractName_should_return_default_contract_name_when_match_is_available()
        {
            var member = 
                ReflectionServices.GetProperty<FakePart>(x => x.Name);

            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null,
                    Members = x => new[] { member }
                };

            var result =
                GetServiceWithDefaultConventions().GetExportContractName(convention, member);

            result.ShouldEqual("Foo");
        }
        public void GetExportContractName_should_return_default_contract_name_when_match_is_available()
        {
            var member =
                ReflectionServices.GetProperty <FakePart>(x => x.Name);

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var result =
                GetServiceWithDefaultConventions().GetExportContractName(convention, member);

            result.ShouldEqual("Foo");
        }
        public void GetExportTypeIdentity_should_return_type_identity_from_convention_when_not_null()
        {
            var convention =
                new ExportConvention
            {
                ContractName = x => string.Empty,
                ContractType = x => typeof(string)
            };

            var service =
                GetServiceWithoutDefaultConventions();

            var result =
                service.GetExportTypeIdentity(convention, ReflectionServices.GetField <FakePart>(x => x.Count));

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(typeof(string));

            result.ShouldEqual(expectedTypeIdentity);
        }
Esempio n. 24
0
        public void GetExportContractName_should_return_contract_name_of_field_type_when_called_with_field_and_contract_name_and_type_are_null()
        {
            var member =
                ReflectionServices.GetField <FakePart>(x => x.Count);

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var results =
                this.Service.GetExportContractName(convention, member);

            var expectedContractName =
                AttributedModelServices.GetContractName(member.FieldType);

            results.ShouldEqual(expectedContractName);
        }
        public void GetExportTypeIdentity_should_return_type_identity_of_default_contract_type_when_match_is_available()
        {
            var member =
                ReflectionServices.GetProperty <FakePart>(x => x.Name);

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var result =
                GetServiceWithDefaultConventions().GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(typeof(int));

            result.ShouldEqual(expectedTypeIdentity);
        }
Esempio n. 26
0
        public void GetExportContractName_should_return_type_identity_of_method_type_when_called_with_method_and_contract_name_and_type_are_null()
        {
            var member =
                ReflectionServices.GetMethod <FakePart>(x => x.DoWork());

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var results =
                this.Service.GetExportContractName(convention, member);

            var expectedContractName =
                AttributedModelServices.GetTypeIdentity(member);

            results.ShouldEqual(expectedContractName);
        }
        public void GetExportContractName_should_return_contract_name_of_property_type_when_called_with_property_and_contract_name_and_type_are_null()
        {
            var member =
                ReflectionServices.GetProperty<FakePart>(x => x.Name);

            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null,
                    Members = x => new[] { member }
                };

            var results =
                this.Service.GetExportContractName(convention, member);

            var expectedContractName =
                AttributedModelServices.GetContractName(member.PropertyType);

            results.ShouldEqual(expectedContractName);
        }
        public void Equals_should_return_false_when_required_metadata_is_not_same_on_the_instance_that_is_being_compared_against()
        {
            var instance =
                new ExportConvention
                {
                    Metadata = new List<MetadataItem>
                    {
                        new MetadataItem("Name", "Foo")
                    }
                };

            var results = 
                instance.Equals(new ExportConvention
                {
                    Metadata = new List<MetadataItem>
                    {
                        new MetadataItem("Name", "Bar")
                    }
                });

            results.ShouldBeFalse();
        }
Esempio n. 29
0
        public void Equals_should_return_false_when_required_metadata_is_not_same_on_the_instance_that_is_being_compared_against()
        {
            var instance =
                new ExportConvention
            {
                Metadata = new List <MetadataItem>
                {
                    new MetadataItem("Name", "Foo")
                }
            };

            var results =
                instance.Equals(new ExportConvention
            {
                Metadata = new List <MetadataItem>
                {
                    new MetadataItem("Name", "Bar")
                }
            });

            results.ShouldBeFalse();
        }
        public void GetExportTypeIdentity_should_return_type_identify_of_method_when_called_with_method_member_and_convention_contract_type_is_null()
        {
            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null
            };

            var member =
                ReflectionServices.GetMethod <FakePart>(x => x.DoWork());

            var service =
                GetServiceWithoutDefaultConventions();

            var result =
                service.GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(member);

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void GetExportContractName_should_return_contract_name_of_property_type_when_called_with_property_and_contract_name_and_type_are_null()
        {
            var member =
                ReflectionServices.GetProperty <FakePart>(x => x.Name);

            var convention =
                new ExportConvention
            {
                ContractName = null,
                ContractType = null,
                Members      = x => new[] { member }
            };

            var service =
                GetServiceWithoutDefaultConventions();

            var results =
                service.GetExportContractName(convention, member);

            var expectedContractName =
                AttributedModelServices.GetContractName(member.PropertyType);

            results.ShouldEqual(expectedContractName);
        }
        public void GetExportContractName_should_return_type_identity_of_method_type_when_called_with_method_and_contract_name_and_type_are_null()
        {
            var member =
                ReflectionServices.GetMethod<FakePart>(x => x.DoWork());

            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null,
                    Members = x => new[] { member }
                };

            var service =
                GetServiceWithoutDefaultConventions();

            var results =
                service.GetExportContractName(convention, member);

            var expectedContractName =
                AttributedModelServices.GetTypeIdentity(member);

            results.ShouldEqual(expectedContractName);
        }
Esempio n. 33
0
        public void ConventionCatalog_should_export_conventionpart()
        {
            // Setup conventions using the semantic model
            // This is NOT the API that the user will be exposed to,
            // there will be a DSL at the front

            var exportConvention =
                new ExportConvention
            {
                Members      = t => new[] { t },
                ContractType = x => typeof(IConventionPart),
            };

            var importConvention =
                new ImportConvention
            {
                Members      = t => new[] { ReflectionServices.GetProperty <IConventionPart>(p => p.Logger) },
                ContractType = x => typeof(ILogger)
            };

            var convention =
                new PartConvention();

            convention.Imports.Add(importConvention);
            convention.Exports.Add(exportConvention);
            convention.Condition = t => t.GetInterfaces().Contains(typeof(IConventionPart));

            var exportConvention2 =
                new ExportConvention
            {
                Members      = t => new[] { typeof(NullLogger) },
                ContractType = x => typeof(ILogger),
            };

            var convention2 =
                new PartConvention();

            convention2.Exports.Add(exportConvention2);
            convention2.Condition = t => t.GetInterfaces().Contains(typeof(ILogger));

            var model =
                new FakePartRegistry2(convention, convention2);

            // Setup container
            ConventionCatalog conventionCatalog =
                new ConventionCatalog(model);

            var typeCatalog =
                new TypeCatalog(typeof(AttributedPart));

            var aggregated =
                new AggregateCatalog(typeCatalog, conventionCatalog);

            var container =
                new CompositionContainer(aggregated);

            var part = new AttributedPart();

            var batch =
                new CompositionBatch();

            batch.AddPart(part);

            container.Compose(batch);

            // Assert
            part.Part.Count().ShouldEqual(2);
            part.Part[0].Logger.ShouldNotBeNull();
            part.Part[1].Logger.ShouldNotBeNull();
        }
        public void GetExportTypeIdentity_should_return_type_identify_of_property_type_when_called_with_property_member_and_convention_contract_type_is_null()
        {
            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null
                };

            var member =
                ReflectionServices.GetProperty<FakePart>(x => x.Name);

            var result =
                this.Service.GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(member.PropertyType);

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void CreateParts_should_properly_extract_closed_generic_constructor_argument_when_importing_collection_and_when_contract_type_is_not_specified()
        {
            var exportConvention =
                new ExportConvention
                {
                    Members = t => new[] { t },
                    ContractType = x => typeof(ConventionPart4),
                };

            var importConvention =
                new ImportConvention
                {
                    Members = t => new[] { typeof(ConventionPart4).GetConstructors().Single() }
                };

            var convention =
                new PartConvention();

            convention.Imports.Add(importConvention);
            convention.Exports.Add(exportConvention);
            convention.Condition = t => t == typeof(ConventionPart4);

            var registry =
                new FakePartRegistry2(convention);
            ConventionPartCreator creator = new ConventionPartCreator(registry);
            var partDefinition = creator.CreateParts().First();
            var importDefinitin = partDefinition.ImportDefinitions.Single();
            importDefinitin.ContractName.ShouldEqual("MefContrib.Hosting.Conventions.Tests.IRepository(System.String)");
        }
        public void GetExportTypeIdentity_should_return_tyoe_identity_of_default_contract_type_of_last_default_convention_when_match_is_available()
        {
            var service =
                GetServiceWithDefaultConventions();

            service.DefaultConventions.Add(
                new TypeDefaultConvention
                {
                    ContractName = string.Empty,
                    ContractType = typeof(decimal),
                    TargetType = typeof(string)
                });

            var member =
                ReflectionServices.GetProperty<FakePart>(x => x.Name);

            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null,
                    Members = x => new[] { member }
                };

            var result =
                service.GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(typeof(decimal));

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void GetExportTypeIdentity_should_return_type_identity_from_convention_when_not_null()
        {
            var convention =
                new ExportConvention
                {
                    ContractName = x => string.Empty,
                    ContractType = x => typeof(string)
                };

            var service =
                GetServiceWithoutDefaultConventions();

            var result =
                service.GetExportTypeIdentity(convention, ReflectionServices.GetField<FakePart>(x => x.Count));

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(typeof(string));

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void GetExportTypeIdentity_should_return_type_identify_of_method_when_called_with_method_member_and_convention_contract_type_is_null()
        {
            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null
                };

            var member =
                ReflectionServices.GetMethod<FakePart>(x => x.DoWork());

            var service =
                GetServiceWithoutDefaultConventions();

            var result =
                service.GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(member);

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void GetExportTypeIdentity_should_return_type_identity_of_default_contract_type_when_match_is_available()
        {
            var member =
                ReflectionServices.GetProperty<FakePart>(x => x.Name);

            var convention =
                new ExportConvention
                {
                    ContractName = null,
                    ContractType = null,
                    Members = x => new[] { member }
                };

            var result =
                GetServiceWithDefaultConventions().GetExportTypeIdentity(convention, member);

            var expectedTypeIdentity =
                AttributedModelServices.GetTypeIdentity(typeof(int));

            result.ShouldEqual(expectedTypeIdentity);
        }
        public void CreateParts_should_properly_extract_closed_generic_type_parameter()
        {
            var exportConvention =
                new ExportConvention
                {
                    Members = t => new[] { t },
                    ContractType = x => typeof(ConventionPart2),
                };

            var importConvention =
                new ImportConvention
                {
                    Members = t => new[] { ReflectionServices.GetProperty<ConventionPart2>(p => p.Repository) },
                    ContractType = x => typeof(IRepository<string>)
                };

            var convention =
                new PartConvention();

            convention.Imports.Add(importConvention);
            convention.Exports.Add(exportConvention);
            convention.Condition = t => t == typeof(ConventionPart2);

            var registry =
                new FakePartRegistry2(convention);
            ConventionPartCreator creator = new ConventionPartCreator(registry);
            var partDefinition = creator.CreateParts().First();
            partDefinition.ImportDefinitions.Single().ContractName.ShouldEqual("MefContrib.Hosting.Conventions.Tests.IRepository(System.String)");
        }