Add additional ALC assertions and test (#42765)
authorRyan Lucia <rylucia@microsoft.com>
Tue, 29 Sep 2020 20:27:01 +0000 (16:27 -0400)
committerGitHub <noreply@github.com>
Tue, 29 Sep 2020 20:27:01 +0000 (16:27 -0400)
src/libraries/System.Runtime.Loader/tests/AssemblyLoadContextTest.cs
src/libraries/System.Runtime.Loader/tests/LoaderLinkTest.cs
src/libraries/System.Runtime.Loader/tests/SatelliteAssemblies.cs

index fe0b293..8a33d9a 100644 (file)
@@ -78,6 +78,7 @@ namespace System.Runtime.Loader.Tests
             var asm = loadContext.LoadFromAssemblyName(asmName);
 
             Assert.NotNull(asm);
+            Assert.Same(loadContext, AssemblyLoadContext.GetLoadContext(asm));
             Assert.Contains(asm.DefinedTypes, t => t.Name == "TestClass");
         }
 
@@ -91,6 +92,7 @@ namespace System.Runtime.Loader.Tests
             var asm = loadContext.LoadFromAssemblyName(asmName);
 
             Assert.NotNull(asm);
+            Assert.Same(loadContext, AssemblyLoadContext.GetLoadContext(asm));
             Assert.Contains(asm.DefinedTypes, t => t.Name == "TestClass");
         }
 
@@ -122,6 +124,23 @@ namespace System.Runtime.Loader.Tests
         }
 
         [Fact]
+        public static void LoadFromAssemblyName_FallbackToDefaultContext()
+        {
+            var asmName = typeof(System.Linq.Enumerable).Assembly.GetName();
+            asmName.CodeBase = null;
+            var loadContext = new AssemblyLoadContext("FallbackToDefaultContextTest");
+
+            // This should not have any special handlers, so it should just find the version in the default context
+            var asm = loadContext.LoadFromAssemblyName(asmName);
+            Assert.NotNull(asm);
+            var loadedContext = AssemblyLoadContext.GetLoadContext(asm);
+            Assert.NotNull(loadedContext);
+            Assert.Same(AssemblyLoadContext.Default, loadedContext);
+            Assert.NotEqual(loadContext, loadedContext);
+            Assert.Same(typeof(System.Linq.Enumerable).Assembly, asm);
+        }
+
+        [Fact]
         public static void GetLoadContextTest_ValidUserAssembly()
         {
             var asmName = new AssemblyName(TestAssembly);
@@ -141,6 +160,7 @@ namespace System.Runtime.Loader.Tests
             var context = AssemblyLoadContext.GetLoadContext(asm);
 
             Assert.NotNull(context);
+            Assert.Same(AssemblyLoadContext.Default, context);
         }
 
         [Fact]
index c7daa91..ff0f1b6 100644 (file)
@@ -25,7 +25,7 @@ namespace LoaderLinkTest
             Assert.Equal(typeof(ISharedInterface), sharedInterface);
 
             var instance = Activator.CreateInstance(dynamicType);
-            Assert.True(instance is ISharedInterface);
+            Assert.IsAssignableFrom<ISharedInterface>(instance);
 
             Assert.NotNull(((ISharedInterface)instance).TestString); // cast should not fail
         }
index c8d74fb..4f5e626 100644 (file)
@@ -203,7 +203,9 @@ namespace System.Runtime.Loader.Tests
             AssemblyName parentAssemblyName = new AssemblyName(assemblyName);
             Assembly parentAssembly = assemblyLoadContext.LoadFromAssemblyName(parentAssemblyName);
 
-            Assert.Equal(AssemblyLoadContext.GetLoadContext(parentAssembly), AssemblyLoadContext.GetLoadContext(satelliteAssembly));
+            Assert.Same(AssemblyLoadContext.GetLoadContext(parentAssembly), AssemblyLoadContext.GetLoadContext(satelliteAssembly));
+
+            Assert.Equal(culture, satelliteAssembly.GetName().CultureName);
         }
         
         [ConditionalTheory(typeof(PlatformDetection), nameof(PlatformDetection.IsNotInvariantGlobalization))]
@@ -219,8 +221,7 @@ namespace System.Runtime.Loader.Tests
 
             Assert.NotNull(satelliteAssembly);
 
-            AssemblyName parentAssemblyName = new AssemblyName(assemblyName);
-            Assembly parentAssembly = assemblyLoadContext.LoadFromAssemblyName(parentAssemblyName);
+            Assert.Same(assemblyLoadContext, AssemblyLoadContext.GetLoadContext(satelliteAssembly));
 
             Assert.Equal(culture, satelliteAssembly.GetName().CultureName);
         }