public void RemovePluginsWithChildType() { var currentlyBuilding = new Dictionary <Type, TypeIdentity>(); var repository = new PluginRepository(); Func <Type, TypeIdentity> identityGenerator = TypeIdentityBuilder.IdentityFactory(repository, currentlyBuilding); PartDefinition parentDefinition = new PartDefinition { Identity = identityGenerator(typeof(MockExportingInterfaceImplementation)), }; var parentFileInfo = new PluginFileInfo("a", DateTimeOffset.Now); repository.AddPart(parentDefinition, parentFileInfo); PartDefinition childDefinition = new PartDefinition { Identity = identityGenerator(typeof(MockChildExportingInterfaceImplementation)), }; var childFileInfo = new PluginFileInfo("b", DateTimeOffset.Now); repository.AddPart(childDefinition, childFileInfo); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockExportingInterfaceImplementation)))); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); Assert.IsTrue( repository.IsSubTypeOf( TypeIdentity.CreateDefinition(typeof(object)), TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); repository.RemovePlugins(new string[] { childFileInfo.Path }); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockExportingInterfaceImplementation)))); Assert.IsFalse(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); }
public void AddTypeWithParentTypeFirst() { var repository = new PluginRepository(); Func <Type, TypeIdentity> identityGenerator = t => TypeIdentity.CreateDefinition(t); var objectDefinition = TypeDefinition.CreateDefinition(typeof(object), identityGenerator); repository.AddType(objectDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(object).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(object)))); var stringDefinition = TypeDefinition.CreateDefinition(typeof(string), identityGenerator); repository.AddType(stringDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(string).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(string)))); Assert.IsTrue(repository.IsSubTypeOf(TypeIdentity.CreateDefinition(typeof(object)), TypeIdentity.CreateDefinition(typeof(string)))); }
public void AddTypeWithGenericParentLast() { var repository = new PluginRepository(); Func <Type, TypeIdentity> identityGenerator = t => TypeIdentity.CreateDefinition(t); var listDefinition = TypeDefinition.CreateDefinition(typeof(List <>), identityGenerator); repository.AddType(listDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(List <>).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(List <>)))); var enumerableDefinition = TypeDefinition.CreateDefinition(typeof(IEnumerable <>), identityGenerator); repository.AddType(enumerableDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(IEnumerable <>).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(IEnumerable <>)))); Assert.IsTrue( repository.IsSubTypeOf( TypeIdentity.CreateDefinition(typeof(IEnumerable <>)), TypeIdentity.CreateDefinition(typeof(List <>)))); }
public void AddTypeWithGenericParentFirst() { var repository = new PluginRepository(); Func<Type, TypeIdentity> identityGenerator = t => TypeIdentity.CreateDefinition(t); var enumerableDefinition = TypeDefinition.CreateDefinition(typeof(IEnumerable<>), identityGenerator); repository.AddType(enumerableDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(IEnumerable<>).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(IEnumerable<>)))); var listDefinition = TypeDefinition.CreateDefinition(typeof(List<>), identityGenerator); repository.AddType(listDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(List<>).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(List<>)))); Assert.IsTrue( repository.IsSubTypeOf( TypeIdentity.CreateDefinition(typeof(IEnumerable<>)), TypeIdentity.CreateDefinition(typeof(List<>)))); }
public void RemovePluginsWithParentType() { var currentlyBuilding = new Dictionary<Type, TypeIdentity>(); var repository = new PluginRepository(); Func<Type, TypeIdentity> identityGenerator = TypeIdentityBuilder.IdentityFactory(repository, currentlyBuilding); PartDefinition parentDefinition = new PartDefinition { Identity = identityGenerator(typeof(MockExportingInterfaceImplementation)), }; var parentFileInfo = new PluginFileInfo("a", DateTimeOffset.Now); repository.AddPart(parentDefinition, parentFileInfo); PartDefinition childDefinition = new PartDefinition { Identity = identityGenerator(typeof(MockChildExportingInterfaceImplementation)), }; var childFileInfo = new PluginFileInfo("b", DateTimeOffset.Now); repository.AddPart(childDefinition, childFileInfo); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockExportingInterfaceImplementation)))); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); Assert.IsTrue( repository.IsSubTypeOf( TypeIdentity.CreateDefinition(typeof(object)), TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); repository.RemovePlugins(new string[] { parentFileInfo.Path }); Assert.IsFalse(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockExportingInterfaceImplementation)))); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); Assert.IsFalse( repository.IsSubTypeOf( TypeIdentity.CreateDefinition(typeof(object)), TypeIdentity.CreateDefinition(typeof(MockChildExportingInterfaceImplementation)))); }
public void AddTypeWithParentTypeLast() { var repository = new PluginRepository(); Func<Type, TypeIdentity> identityGenerator = t => TypeIdentity.CreateDefinition(t); var stringDefinition = TypeDefinition.CreateDefinition(typeof(string), identityGenerator); repository.AddType(stringDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(string).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(string)))); var objectDefinition = TypeDefinition.CreateDefinition(typeof(object), identityGenerator); repository.AddType(objectDefinition); Assert.IsTrue(repository.ContainsDefinitionForType(typeof(object).AssemblyQualifiedName)); Assert.IsTrue(repository.ContainsDefinitionForType(TypeIdentity.CreateDefinition(typeof(object)))); Assert.IsTrue(repository.IsSubTypeOf(TypeIdentity.CreateDefinition(typeof(object)), TypeIdentity.CreateDefinition(typeof(string)))); }