internal void TestPartThatImportsExportWithGenericTypeArg(string lazyLoadedAssemblyPath) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); var exportWithLazy = this.container.GetExportedValue <PartImportingOpenGenericExport>(); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void TestExternalExportWithLazy(string lazyLoadedAssemblyPath) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); var exportWithLazy = this.container.GetExportedValue <ExternalExportWithLazy>(); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); Assert.NotNull(exportWithLazy.YetAnotherExport.Value); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void TestPartThatLazyImportsExportWithMetadataOfCustomType(string lazyLoadedAssemblyPath, bool isRuntime) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); var exportWithLazy = this.container.GetExportedValue <PartThatLazyImportsExportWithMetadataOfCustomType>(); // This next segment we'll permit an assembly load only for code gen cases, which aren't as well tuned at present. AssertEx.False(isRuntime && GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); AssertEx.Equal("Value", exportWithLazy.ImportingProperty.Metadata["Simple"] as string); AssertEx.False(isRuntime && GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); // At this point, loading the assembly is absolutely required. object customEnum = exportWithLazy.ImportingProperty.Metadata["CustomValue"]; AssertEx.Equal("CustomEnum", customEnum.GetType().Name); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void TestPartThatImportsExportWithTypeMetadataViaTMetadata(string lazyLoadedAssemblyPath) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); var exportWithLazy = this.container.GetExportedValue <PartThatLazyImportsExportWithTypeMetadataViaTMetadata>(); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); Assert.Equal("default", exportWithLazy.ImportWithTMetadata.Metadata.SomeProperty); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); Type type = exportWithLazy.ImportWithTMetadata.Metadata.SomeType; Type[] types = exportWithLazy.ImportWithTMetadata.Metadata.SomeTypes; AssertEx.Equal("YetAnotherExport", type.Name); types.Single(t => t.Name == "String"); types.Single(t => t.Name == "YetAnotherExport"); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void TestPartThatImportsExportWithTypeMetadataViaDictionary(string lazyLoadedAssemblyPath) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); var exportWithLazy = this.container.GetExportedValue <PartThatLazyImportsExportWithTypeMetadataViaDictionary>(); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); Assert.NotNull(exportWithLazy.ImportWithDictionary.Metadata.ContainsKey("foo")); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); Type type = (Type)exportWithLazy.ImportWithDictionary.Metadata["SomeType"]; Type[] types = (Type[])exportWithLazy.ImportWithDictionary.Metadata["SomeTypes"]; AssertEx.Equal("YetAnotherExport", type.Name); types.Single(t => t.Name == "String"); types.Single(t => t.Name == "YetAnotherExport"); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void TestExternalExport(string lazyLoadedAssemblyPath, string contractName) { // Verify that before the test, we haven't loaded the assembly. AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); // Now query for the export, but don't evaluate it yet. This shouldn't load the assembly. var export = this.container.GetExport <object>(contractName); AssertEx.NotNull(export); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); // Now evaluate it, and confirm that it loads the assembly (to verify the validity of the test). object value = export.Value; AssertEx.NotNull(value); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void AssertAssembliesNotLoaded(params string[] assemblyPaths) { AssertEx.False(GetLoadedAssemblies().Select(a => a.Location).Intersect(assemblyPaths, StringComparer.OrdinalIgnoreCase).Any()); }
internal void TestGetInputAssembliesDoesNotLoadLazyExport(string lazyLoadedAssemblyPath) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); this.catalog.GetInputAssemblies(); AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }
internal void TestYetAnotherExport(string lazyLoadedAssemblyPath) { AssertEx.False(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); this.CauseLazyLoad2(this.container); AssertEx.True(GetLoadedAssemblies().Any(a => a.Location.Equals(lazyLoadedAssemblyPath, StringComparison.OrdinalIgnoreCase))); }