Author: gert
Date: 2006-05-20 12:48:37 -0400 (Sat, 20 May 2006)
New Revision: 60892

Modified:
   trunk/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs
   trunk/mcs/class/corlib/Test/System.Reflection/ChangeLog
Log:
* AssemblyTest.cs: Added tests for bugs #78464, #78465, #78466. Spaces to
tabs.


Modified: trunk/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs
===================================================================
--- trunk/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs       
2006-05-20 16:39:23 UTC (rev 60891)
+++ trunk/mcs/class/corlib/Test/System.Reflection/AssemblyTest.cs       
2006-05-20 16:48:37 UTC (rev 60892)
@@ -44,22 +44,22 @@
        [TestFixture]
        public class AssemblyTest
        {
-                [Test] 
-                public void CreateInstance() 
-                {
+               [Test] 
+               public void CreateInstance() 
+               {
                        Type type = typeof (AssemblyTest);
-                        Object obj = type.Assembly.CreateInstance 
("MonoTests.System.Reflection.AssemblyTest");
+                       Object obj = type.Assembly.CreateInstance 
("MonoTests.System.Reflection.AssemblyTest");
                        Assert.IsNotNull (obj, "#01");
                        Assert.AreEqual (GetType (), obj.GetType (), "#02");
-               } 
+               }
 
-                [Test] 
-                public void CreateInvalidInstance() 
-                { 
+               [Test] 
+               public void CreateInvalidInstance() 
+               {
                        Type type = typeof (AssemblyTest);
-                        Object obj = 
type.Assembly.CreateInstance("NunitTests.ThisTypeDoesNotExist");
+                       Object obj = 
type.Assembly.CreateInstance("NunitTests.ThisTypeDoesNotExist");
                        Assert.IsNull (obj, "#03");
-               } 
+               }
 
                [Test]
 #if NET_2_0
@@ -242,18 +242,146 @@
                                        AppDomain.CurrentDomain.Evidence);
                                ab.Save (Path.GetFileName (assemblyFileName));
 
-                               using (FileStream fs = 
File.OpenRead(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);
-                                       fs.Close();
+                                       fs.Read (buffer, 0, buffer.Length);
+                                       Assembly assembly = Assembly.Load 
(buffer);
+                                       Assert.AreEqual (string.Empty, 
assembly.Location);
+                                       fs.Close ();
                                }
                        } finally {
                                File.Delete (assemblyFileName);
                        }
                }
 
+               [Test]
+               [Category ("NotWorking")]
+               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 ();
+                               CrossDomainTester crossDomainTester = 
CreateCrossDomainTester (testDomain);
+                               try {
+                                       crossDomainTester.bug78464 
(assemblyFileName);
+                               } finally {
+                                       AppDomain.Unload (testDomain);
+                               }
+                       } finally {
+                               File.Delete (assemblyFileName);
+                       }
+               }
+
+               [Test]
+               [Category ("NotWorking")]
+               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 ();
+                               CrossDomainTester crossDomainTester = 
CreateCrossDomainTester (testDomain);
+                               try {
+                                       crossDomainTester.bug78465 
(assemblyFileName);
+                               } finally {
+                                       AppDomain.Unload (testDomain);
+                               }
+                       } finally {
+                               File.Delete (assemblyFileName);
+                       }
+               }
+
+               [Test]
+               [Category ("NotWorking")]
+               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");
+                               Assert.IsNull 
(assembly.GetManifestResourceStream ("read"), "#A9");
+                               try {
+                                       assembly.GetFile ("readme.txt");
+                                       Assert.Fail ("#A10");
+                               } catch (FileNotFoundException) {
+                               }
+
+                               string assemblyFileNameB = Path.Combine 
(Path.GetTempPath (),
+                                       "bug78468b.dll");
+
+                               AppDomain testDomain = CreateTestDomain ();
+                               CrossDomainTester crossDomainTester = 
CreateCrossDomainTester (testDomain);
+                               try {
+                                       crossDomainTester.bug78468 
(assemblyFileNameB);
+                               } finally {
+                                       AppDomain.Unload (testDomain);
+                                       File.Delete (assemblyFileNameB);
+                               }
+                       } finally {
+                               File.Delete (assemblyFileNameA);
+                               File.Delete (resourceFileName);
+                       }
+               }
+
 #if NET_2_0
                [Test]
                [Category ("NotWorking")]
@@ -284,6 +412,97 @@
                        assembly.CreateInstance 
("MonoTests.System.Reflection.AssemblyTest");
                }
 #endif
+
+               private static AppDomain CreateTestDomain ()
+               {
+                       return AppDomain.CreateDomain ("CompileFromDom", 
AppDomain.CurrentDomain.Evidence,
+                               AppDomain.CurrentDomain.SetupInformation);
+               }
+
+               private static CrossDomainTester CreateCrossDomainTester 
(AppDomain domain)
+               {
+                       Type testerType = typeof (CrossDomainTester);
+
+                       return (CrossDomainTester) 
domain.CreateInstanceAndUnwrap (
+                               testerType.Assembly.FullName, 
testerType.FullName, false,
+                               BindingFlags.Public | BindingFlags.Instance, 
null, new object[0],
+                               CultureInfo.InvariantCulture, new object[0], 
domain.Evidence);
+               }
+
+               private class CrossDomainTester : MarshalByRefObject
+               {
+                       public void bug78464 (string assemblyFileName)
+                       {
+                               AssemblyName assemblyName = new AssemblyName ();
+                               assemblyName.Name = "bug78464";
+
+                               AssemblyBuilder ab = AppDomain.CurrentDomain
+                                       .DefineDynamicAssembly (assemblyName,
+                                       AssemblyBuilderAccess.Save,
+                                       Path.GetDirectoryName 
(assemblyFileName),
+                                       AppDomain.CurrentDomain.Evidence);
+                               ab.Save (Path.GetFileName (assemblyFileName));
+
+                               Assembly assembly;
+
+                               using (FileStream fs = File.OpenRead 
(assemblyFileName)) {
+                                       byte[] buffer = new byte[fs.Length];
+                                       fs.Read (buffer, 0, buffer.Length);
+                                       assembly = Assembly.Load (buffer);
+                                       fs.Close ();
+                               }
+
+                               Assert.AreEqual (string.Empty, 
assembly.Location, "#1");
+
+                               assembly = Assembly.LoadFrom (assemblyFileName, 
AppDomain.CurrentDomain.Evidence);
+                               Assert.IsFalse (assembly.Location == 
string.Empty, "#2");
+                               Assert.AreEqual (Path.GetFileName 
(assemblyFileName), Path.GetFileName(assembly.Location), "#3");
+                               // note: we cannot check if directory names 
match, as MS.NET seems to 
+                               // convert directory part of assembly location 
to lowercase
+                               Assert.IsFalse 
(Path.GetDirectoryName(assembly.Location) == string.Empty, "#4");
+                       }
+
+                       public void bug78465 (string assemblyFileName)
+                       {
+                               Assembly assembly = Assembly.LoadFrom 
(assemblyFileName, AppDomain.CurrentDomain.Evidence);
+                               Assert.IsFalse (assembly.Location == 
string.Empty, "#2");
+                               Assert.AreEqual (Path.GetFileName 
(assemblyFileName), Path.GetFileName (assembly.Location), "#3");
+                               // note: we cannot check if directory names 
match, as MS.NET seems to 
+                               // convert directory part of assembly location 
to lowercase
+                               Assert.IsFalse (Path.GetDirectoryName 
(assembly.Location) == string.Empty, "#4");
+                       }
+
+                       public void bug78468 (string assemblyFileName)
+                       {
+                               AssemblyName assemblyName = new AssemblyName ();
+                               assemblyName.Name = "bug78468b";
+
+                               AssemblyBuilder ab = AppDomain.CurrentDomain
+                                       .DefineDynamicAssembly (assemblyName,
+                                       AssemblyBuilderAccess.Save,
+                                       Path.GetDirectoryName 
(assemblyFileName),
+                                       AppDomain.CurrentDomain.Evidence);
+                               ab.AddResourceFile ("read", "readme.txt");
+                               ab.Save (Path.GetFileName (assemblyFileName));
+
+                               Assembly assembly = Assembly.LoadFrom 
(assemblyFileName, AppDomain.CurrentDomain.Evidence);
+                               Assert.IsTrue (assembly.Location != 
string.Empty, "#B1");
+                               string[] resNames = 
assembly.GetManifestResourceNames ();
+                               Assert.IsNotNull (resNames, "#B2");
+                               Assert.AreEqual (1, resNames.Length, "#B3");
+                               Assert.AreEqual ("read", resNames[0], "#B4");
+                               ManifestResourceInfo resInfo = 
assembly.GetManifestResourceInfo ("read");
+                               Assert.IsNotNull (resInfo, "#B5");
+                               Assert.AreEqual ("readme.txt", 
resInfo.FileName, "#B6");
+                               Assert.IsNull (resInfo.ReferencedAssembly, 
"#B7");
+                               Assert.AreEqual ((ResourceLocation) 0, 
resInfo.ResourceLocation, "#B8");
+                               Stream s = assembly.GetManifestResourceStream 
("read");
+                               Assert.IsNotNull (s, "#B9");
+                               s.Close ();
+                               s = assembly.GetFile ("readme.txt");
+                               Assert.IsNotNull (s, "#B10");
+                               s.Close ();
+                       }
+               }
        }
 }
-

Modified: trunk/mcs/class/corlib/Test/System.Reflection/ChangeLog
===================================================================
--- trunk/mcs/class/corlib/Test/System.Reflection/ChangeLog     2006-05-20 
16:39:23 UTC (rev 60891)
+++ trunk/mcs/class/corlib/Test/System.Reflection/ChangeLog     2006-05-20 
16:48:37 UTC (rev 60892)
@@ -1,3 +1,8 @@
+2006-05-20  Gert Driesen  <[EMAIL PROTECTED]>
+
+       * AssemblyTest.cs: Added tests for bugs #78464, #78465 and #78468.
+       Spaces to tabs.
+
 2006-05-09  Atsushi Enomoto  <[EMAIL PROTECTED]>
 
        * BinderTests.cs : (BindToMethodNamedArgs) hmm, why it didn't

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to