* roottypes.cs: Rename from tree.cs.
[mono.git] / mcs / class / corlib / Test / System.Reflection / ModuleTest.cs
index cb92a9d760b7c9a44837a6809d51dcad697de26f..a1d3e242e0431650fe4d765de7f83d4dfe8873ab 100644 (file)
@@ -4,14 +4,14 @@
 // Zoltan Varga (vargaz@freemail.hu)\r
 //\r
 // (C) Ximian, Inc.  http://www.ximian.com\r
+// Copyright (C) 2005 Novell, Inc (http://www.novell.com)
 //\r
-//\r
-\r
 \r
 using System;\r
 using System.Threading;\r
 using System.Reflection;\r
 using System.Reflection.Emit;\r
+using System.Runtime.Serialization;
 using System.IO;\r
 using System.Collections;\r
 \r
@@ -46,6 +46,7 @@ public class ModuleTest : Assertion
        // Some of these tests overlap with the tests for ModuleBuilder\r
 \r
        [Test]\r
+       [Category("NotDotNet")] // path length can cause suprious failures\r
        public void TestGlobalData () {\r
 \r
                string name = "moduletest-assembly";\r
@@ -117,7 +118,183 @@ public class ModuleTest : Assertion
                AssertEquals (m2.GetField ("DATA"), null);\r
                AssertEquals (m2.GetField ("DATA", BindingFlags.Public), null);\r
        }\r
-       \r
+\r
+#if NET_2_0\r
+\r
+       [Test]\r
+       public void ResolveType () {\r
+               Type t = typeof (ModuleTest);\r
+               Module module = t.Module;\r
+\r
+               AssertEquals (t, module.ResolveType (t.MetadataToken));\r
+\r
+               /* We currently throw ArgumentException for this one */\r
+               try {\r
+                       module.ResolveType (1234);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveType (t.GetMethod ("ResolveType").MetadataToken);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveType (t.MetadataToken + 10000);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentOutOfRangeException) {\r
+               }\r
+       }\r
+\r
+       [Test]\r
+       public void ResolveMethod () {\r
+               Type t = typeof (ModuleTest);\r
+               Module module = t.Module;\r
+\r
+               AssertEquals (t.GetMethod ("ResolveMethod"), module.ResolveMethod (t.GetMethod ("ResolveMethod").MetadataToken));\r
+\r
+               try {\r
+                       module.ResolveMethod (1234);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveMethod (t.MetadataToken);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveMethod (t.GetMethod ("ResolveMethod").MetadataToken + 10000);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentOutOfRangeException) {\r
+               }\r
+       }\r
+\r
+       public int aField;\r
+\r
+       [Test]\r
+       public void ResolveField () {\r
+               Type t = typeof (ModuleTest);\r
+               Module module = t.Module;\r
+\r
+               AssertEquals (t.GetField ("aField"), module.ResolveField (t.GetField ("aField").MetadataToken));\r
+\r
+               try {\r
+                       module.ResolveField (1234);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveField (t.MetadataToken);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveField (t.GetField ("aField").MetadataToken + 10000);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentOutOfRangeException) {\r
+               }\r
+       }\r
+
+       [Ignore ("it breaks nunit-console.exe execution under .NET 2.0")]\r
+       [Test]\r
+       public void ResolveString () {\r
+               Type t = typeof (ModuleTest);\r
+               Module module = t.Module;\r
+\r
+               for (int i = 1; i < 10000; ++i) {\r
+                       try {\r
+                               module.ResolveString (0x70000000 + i);\r
+                       }\r
+                       catch (Exception) {\r
+                       }\r
+               }\r
+\r
+               try {\r
+                       module.ResolveString (1234);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveString (t.MetadataToken);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+\r
+               try {\r
+                       module.ResolveString (0x70000000 | 10000);\r
+                       Fail ();\r
+               }\r
+               catch (ArgumentOutOfRangeException) {\r
+               }\r
+       }\r
+\r
+\r
+       [Test]\r
+       public void ResolveMember () {\r
+               Type t = typeof (ModuleTest);\r
+               Module module = t.Module;\r
+\r
+               AssertEquals (t, module.ResolveMember (t.MetadataToken));\r
+               AssertEquals (t.GetField ("aField"), module.ResolveMember (t.GetField ("aField").MetadataToken));\r
+               AssertEquals (t.GetMethod ("ResolveMember"), module.ResolveMember (t.GetMethod ("ResolveMember").MetadataToken));\r
+\r
+               try {\r
+                       module.ResolveMember (module.MetadataToken);\r
+               }\r
+               catch (ArgumentException) {\r
+               }\r
+       }\r
+#endif\r
+\r
+       [Test]\r
+       public void FindTypes () {\r
+               Module m = typeof (ModuleTest).Module;\r
+\r
+               Type[] t;\r
+\r
+               t = m.FindTypes (Module.FilterTypeName, "FindTypesTest*");\r
+               AssertEquals (2, t.Length);\r
+               AssertEquals ("FindTypesTestFirstClass", t [0].Name);\r
+               AssertEquals ("FindTypesTestSecondClass", t [1].Name);\r
+               t = m.FindTypes (Module.FilterTypeNameIgnoreCase, "findtypestest*");\r
+               AssertEquals (2, t.Length);\r
+               AssertEquals ("FindTypesTestFirstClass", t [0].Name);\r
+               AssertEquals ("FindTypesTestSecondClass", t [1].Name);\r
+       }\r
+
+       [Test]
+       [ExpectedException (typeof (ArgumentNullException))]
+       public void GetObjectData_Null ()
+       {
+               Module m = typeof (ModuleTest).Module;\r
+               m.GetObjectData (null, new StreamingContext (StreamingContextStates.All));\r
+       }\r
+\r
+       class FindTypesTestFirstClass { \r
+       }\r
+\r
+       class FindTypesTestSecondClass {\r
+       }\r
+\r
     private static void AssertArrayEqualsSorted (Array o1, Array o2) {\r
                Array s1 = (Array)o1.Clone ();\r
                Array s2 = (Array)o2.Clone ();\r