public void bug78465() { string assemblyFileName = Path.Combine( Path.GetTempPath(), "bug78465.dll"); try { AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = "bug78465"; AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save, Path.GetDirectoryName(assemblyFileName), AppDomain.CurrentDomain.Evidence); ab.Save(Path.GetFileName(assemblyFileName)); using (FileStream fs = File.OpenRead(assemblyFileName)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); Assembly assembly = Assembly.Load(buffer); Assert.AreEqual(string.Empty, assembly.Location, "#1"); fs.Close(); } AppDomain testDomain = CreateTestDomain(AppDomain.CurrentDomain.BaseDirectory, false); CrossDomainTester crossDomainTester = CreateCrossDomainTester(testDomain); try { crossDomainTester.bug78465(assemblyFileName); } finally { AppDomain.Unload(testDomain); } } finally { File.Delete(assemblyFileName); } }
public void CompileFromDomBatch_NotInMemory() { // create a file in temp directory to ensure that compiler is not removing // too much (temporary) files string tempFile = Path.Combine(_tempDir, "file." + _codeProvider.FileExtension); using (FileStream fs = File.Create(tempFile)) { fs.Close(); } // compile and verify result in separate appdomain to avoid file locks AppDomain testDomain = CreateTestDomain(); CrossDomainTester compileTester = CreateCrossDomainTester(testDomain); string outputAssembly = null; try { outputAssembly = compileTester.CompileAssemblyFromDomBatch(_tempDir); } finally { AppDomain.Unload(testDomain); } // there should be two files in temp dir: temp file and output assembly string[] tempFiles = Directory.GetFiles(_tempDir); Assert.AreEqual(2, tempFiles.Length, "#1"); Assert.IsTrue(File.Exists(outputAssembly), "#2"); Assert.IsTrue(File.Exists(tempFile), "#3"); }
public void Load_Culture_Mismatch() { string tempDir = Path.Combine(Path.GetTempPath(), "MonoTests.System.Reflection.AssemblyTest"); string cultureTempDir = Path.Combine(tempDir, "en-US"); if (!Directory.Exists(cultureTempDir)) { Directory.CreateDirectory(cultureTempDir); } AppDomain ad = CreateTestDomain(tempDir, true); try { CrossDomainTester cdt = CreateCrossDomainTester(ad); // PART A AssemblyName aname = new AssemblyName(); aname.Name = "bug79712a"; aname.CultureInfo = new CultureInfo("nl-BE"); cdt.GenerateAssembly(aname, Path.Combine(tempDir, "bug79712a.dll")); aname = new AssemblyName(); aname.Name = "bug79712a"; aname.CultureInfo = CultureInfo.InvariantCulture; #if NET_2_0 Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#A1"); #else Assert.IsTrue(cdt.AssertFileLoadException(aname), "#A2"); #endif // PART B aname = new AssemblyName(); aname.Name = "bug79712b"; aname.CultureInfo = new CultureInfo("nl-BE"); cdt.GenerateAssembly(aname, Path.Combine(tempDir, "en-US/bug79712b.dll")); aname = new AssemblyName(); aname.Name = "bug79712b"; aname.CultureInfo = new CultureInfo("en-US"); #if NET_2_0 Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#B1"); #else Assert.IsTrue(cdt.AssertFileLoadException(aname), "#B2"); #endif } finally { AppDomain.Unload(ad); if (Directory.Exists(tempDir)) { Directory.Delete(tempDir, true); } } }
[Test] // bug #79715 public void Load_PartialVersion() { string tempDir = Path.Combine(Path.GetTempPath(), "MonoTests.System.Reflection.AssemblyTest"); if (!Directory.Exists(tempDir)) { Directory.CreateDirectory(tempDir); } AppDomain ad = CreateTestDomain(tempDir, true); try { CrossDomainTester cdt = CreateCrossDomainTester(ad); AssemblyName aname = new AssemblyName(); aname.Name = "bug79715"; aname.Version = new Version(1, 2, 3, 4); cdt.GenerateAssembly(aname, Path.Combine(tempDir, "bug79715.dll")); aname = new AssemblyName(); aname.Name = "bug79715"; aname.Version = new Version(1, 2); Assert.IsTrue(cdt.AssertLoad(aname), "#A1"); Assert.IsTrue(cdt.AssertLoad(aname.FullName), "#A2"); aname = new AssemblyName(); aname.Name = "bug79715"; aname.Version = new Version(1, 2, 3); Assert.IsTrue(cdt.AssertLoad(aname), "#B1"); Assert.IsTrue(cdt.AssertLoad(aname.FullName), "#B2"); aname = new AssemblyName(); aname.Name = "bug79715"; aname.Version = new Version(1, 2, 3, 4); Assert.IsTrue(cdt.AssertLoad(aname), "#C1"); Assert.IsTrue(cdt.AssertLoad(aname.FullName), "#C2"); } finally { AppDomain.Unload(ad); if (Directory.Exists(tempDir)) { Directory.Delete(tempDir, true); } } }
public void bug78464() { string assemblyFileName = Path.Combine( Path.GetTempPath(), "bug78464.dll"); try { // execute test in separate appdomain to allow assembly to be unloaded AppDomain testDomain = CreateTestDomain(AppDomain.CurrentDomain.BaseDirectory, false); CrossDomainTester crossDomainTester = CreateCrossDomainTester(testDomain); try { crossDomainTester.bug78464(assemblyFileName); } finally { AppDomain.Unload(testDomain); } } finally { File.Delete(assemblyFileName); } }
[Category("NotWorking")] // patch for bug #79720 must be committed first public void Load_Culture() { string tempDir = Path.Combine(Path.GetTempPath(), "MonoTests.System.Reflection.AssemblyTest"); string cultureTempDir = Path.Combine(tempDir, "nl-BE"); if (!Directory.Exists(cultureTempDir)) { Directory.CreateDirectory(cultureTempDir); } cultureTempDir = Path.Combine(tempDir, "en-US"); if (!Directory.Exists(cultureTempDir)) { Directory.CreateDirectory(cultureTempDir); } AppDomain ad = CreateTestDomain(tempDir, true); try { CrossDomainTester cdt = CreateCrossDomainTester(ad); // PART A AssemblyName aname = new AssemblyName(); aname.Name = "culturea"; cdt.GenerateAssembly(aname, Path.Combine(tempDir, "culturea.dll")); aname = new AssemblyName(); aname.Name = "culturea"; Assert.IsTrue(cdt.AssertLoad(aname), "#A1"); aname = new AssemblyName(); aname.Name = "culturea"; aname.CultureInfo = new CultureInfo("nl-BE"); Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#A2"); aname = new AssemblyName(); aname.Name = "culturea"; aname.CultureInfo = CultureInfo.InvariantCulture; Assert.IsTrue(cdt.AssertLoad(aname), "#A3"); // PART B aname = new AssemblyName(); aname.Name = "cultureb"; aname.CultureInfo = new CultureInfo("nl-BE"); cdt.GenerateAssembly(aname, Path.Combine(tempDir, "cultureb.dll")); aname = new AssemblyName(); aname.Name = "cultureb"; aname.CultureInfo = new CultureInfo("nl-BE"); Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#B1"); aname = new AssemblyName(); aname.Name = "cultureb"; Assert.IsTrue(cdt.AssertLoad(aname), "#B2"); aname = new AssemblyName(); aname.Name = "cultureb"; aname.CultureInfo = new CultureInfo("en-US"); Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#B3"); // PART C aname = new AssemblyName(); aname.Name = "culturec"; aname.CultureInfo = new CultureInfo("nl-BE"); cdt.GenerateAssembly(aname, Path.Combine(tempDir, "nl-BE/culturec.dll")); aname = new AssemblyName(); aname.Name = "culturec"; aname.CultureInfo = new CultureInfo("nl-BE"); Assert.IsTrue(cdt.AssertLoad(aname), "#C1"); aname = new AssemblyName(); aname.Name = "culturec"; Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#C2"); aname = new AssemblyName(); aname.Name = "culturec"; aname.CultureInfo = CultureInfo.InvariantCulture; Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#C3"); // PART D aname = new AssemblyName(); aname.Name = "cultured"; aname.CultureInfo = new CultureInfo("nl-BE"); cdt.GenerateAssembly(aname, Path.Combine(tempDir, "en-US/cultured.dll")); aname = new AssemblyName(); aname.Name = "cultured"; aname.CultureInfo = new CultureInfo("nl-BE"); Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#D1"); aname = new AssemblyName(); aname.Name = "cultured"; Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#D2"); aname = new AssemblyName(); aname.Name = "cultured"; aname.CultureInfo = CultureInfo.InvariantCulture; Assert.IsTrue(cdt.AssertFileNotFoundException(aname), "#D3"); } finally { AppDomain.Unload(ad); if (Directory.Exists(tempDir)) { Directory.Delete(tempDir, true); } } }
public void bug78468() { string assemblyFileNameA = Path.Combine(Path.GetTempPath(), "bug78468a.dll"); string resourceFileName = Path.Combine(Path.GetTempPath(), "readme.txt"); using (StreamWriter sw = File.CreateText(resourceFileName)) { sw.WriteLine("FOO"); sw.Close(); } try { AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = "bug78468a"; AssemblyBuilder ab = AppDomain.CurrentDomain .DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Save, Path.GetTempPath(), AppDomain.CurrentDomain.Evidence); ab.AddResourceFile("read", "readme.txt"); ab.Save(Path.GetFileName(assemblyFileNameA)); Assembly assembly; using (FileStream fs = File.OpenRead(assemblyFileNameA)) { byte[] buffer = new byte[fs.Length]; fs.Read(buffer, 0, buffer.Length); assembly = Assembly.Load(buffer); fs.Close(); } Assert.AreEqual(string.Empty, assembly.Location, "#A1"); string[] resNames = assembly.GetManifestResourceNames(); Assert.IsNotNull(resNames, "#A2"); Assert.AreEqual(1, resNames.Length, "#A3"); Assert.AreEqual("read", resNames[0], "#A4"); ManifestResourceInfo resInfo = assembly.GetManifestResourceInfo("read"); Assert.IsNotNull(resInfo, "#A5"); Assert.AreEqual("readme.txt", resInfo.FileName, "#A6"); Assert.IsNull(resInfo.ReferencedAssembly, "#A7"); Assert.AreEqual((ResourceLocation)0, resInfo.ResourceLocation, "#A8"); try { assembly.GetManifestResourceStream("read"); Assert.Fail("#A9"); } catch (FileNotFoundException) { } try { assembly.GetFile("readme.txt"); Assert.Fail("#A10"); } catch (FileNotFoundException) { } string assemblyFileNameB = Path.Combine(Path.GetTempPath(), "bug78468b.dll"); AppDomain testDomain = CreateTestDomain(AppDomain.CurrentDomain.BaseDirectory, false); CrossDomainTester crossDomainTester = CreateCrossDomainTester(testDomain); try { crossDomainTester.bug78468(assemblyFileNameB); } finally { AppDomain.Unload(testDomain); File.Delete(assemblyFileNameB); } } finally { File.Delete(assemblyFileNameA); File.Delete(resourceFileName); } }