1 // 2 // ModuleHandleTest - NUnit Test Cases for the ModuleHandle class 3 // 4 // Zoltan Varga (vargaz@freemail.hu) 5 // 6 // (C) Ximian, Inc. http://www.ximian.com 7 // 8 // 9 10 // 11 // MISSING TESTS: 12 // - dynamic assemblies 13 // 14 15 16 using System; 17 using System.Threading; 18 using System.Reflection; 19 using System.IO; 20 using System.Collections; 21 22 using NUnit.Framework; 23 24 namespace MonoTests.System 25 { 26 27 [TestFixture] 28 public class ModuleHandleTest 29 { 30 public static int foo; 31 32 public static int bar { 33 get { 34 return 0; 35 } 36 } 37 ModuleHandleTest()38 public ModuleHandleTest () { 39 } 40 gnaf(int i, int j)41 public static void gnaf (int i, int j) { 42 } 43 44 public ModuleHandle module; 45 46 [SetUp] SetUp()47 public void SetUp () { 48 module = typeof (ModuleHandleTest).Assembly.GetModules ()[0].ModuleHandle; 49 } 50 51 [Test] ResolveTypeToken()52 public void ResolveTypeToken () { 53 // A typedef 54 Assert.AreEqual (typeof (ModuleHandleTest), Type.GetTypeFromHandle (module.ResolveTypeHandle (typeof (ModuleHandleTest).MetadataToken))); 55 } 56 57 [Test] 58 [ExpectedException (typeof (ArgumentNullException))] ResolveTypeTokenInvalidHandle()59 public void ResolveTypeTokenInvalidHandle () { 60 ModuleHandle.EmptyHandle.ResolveTypeHandle (typeof (ModuleHandleTest).MetadataToken); 61 } 62 63 [Test] 64 [ExpectedException (typeof (TypeLoadException))] ResolveTypeTokenInvalidTokenType()65 public void ResolveTypeTokenInvalidTokenType () { 66 module.ResolveTypeHandle (1234); 67 } 68 69 [Test] 70 [ExpectedException (typeof (TypeLoadException))] ResolveTypeTokenInvalidTokenType2()71 public void ResolveTypeTokenInvalidTokenType2 () { 72 module.ResolveTypeHandle (0x4000001); 73 } 74 75 76 77 [Test] ResolveFieldToken()78 public void ResolveFieldToken () { 79 FieldInfo fi = typeof (ModuleHandleTest).GetField ("foo"); 80 81 Assert.AreEqual (fi, FieldInfo.GetFieldFromHandle (module.ResolveFieldHandle (fi.MetadataToken))); 82 } 83 84 [Test] 85 [ExpectedException (typeof (ArgumentNullException))] ResolveFieldTokenInvalidHandle()86 public void ResolveFieldTokenInvalidHandle () { 87 ModuleHandle.EmptyHandle.ResolveFieldHandle (typeof (ModuleHandleTest).MetadataToken); 88 } 89 90 [Test] 91 [ExpectedException (typeof (Exception))] ResolveFieldTokenInvalidTokenType()92 public void ResolveFieldTokenInvalidTokenType () { 93 module.ResolveFieldHandle (1234); 94 } 95 96 [Test] 97 [ExpectedException (typeof (Exception))] ResolveFieldTokenInvalidTokenType2()98 public void ResolveFieldTokenInvalidTokenType2 () { 99 /* A typedef */ 100 module.ResolveFieldHandle (0x2000002); 101 } 102 103 [Test] 104 [ExpectedException (typeof (Exception))] ResolveFieldTokenInvalidTokenType3()105 public void ResolveFieldTokenInvalidTokenType3 () { 106 /* A memberref which points to a method */ 107 module.ResolveFieldHandle (typeof (Console).GetMethod ("ReadLine").MetadataToken); 108 } 109 110 [Test] 111 [ExpectedException (typeof (Exception))] ResolveFieldTokenInvalidToken()112 public void ResolveFieldTokenInvalidToken () { 113 /* An out-of-range field def */ 114 module.ResolveFieldHandle (0x40f0001); 115 } 116 117 118 119 120 [Test] ResolveMethodToken()121 public void ResolveMethodToken () { 122 MethodInfo mi = typeof (ModuleHandleTest).GetMethod ("ResolveMethodToken"); 123 124 Assert.AreEqual (mi, MethodInfo.GetMethodFromHandle (module.ResolveMethodHandle (mi.MetadataToken))); 125 } 126 127 [Test] 128 [ExpectedException (typeof (ArgumentNullException))] ResolveMethodTokenInvalidHandle()129 public void ResolveMethodTokenInvalidHandle () { 130 ModuleHandle.EmptyHandle.ResolveMethodHandle (typeof (ModuleHandleTest).GetMethod ("ResolveMethodToken").MetadataToken); 131 } 132 133 [Test] 134 [ExpectedException (typeof (Exception))] ResolveMethodTokenInvalidTokenType()135 public void ResolveMethodTokenInvalidTokenType () { 136 module.ResolveMethodHandle (1234); 137 } 138 139 [Test] 140 [ExpectedException (typeof (Exception))] ResolveMethodTokenInvalidTokenType2()141 public void ResolveMethodTokenInvalidTokenType2 () { 142 /* A typedef */ 143 module.ResolveMethodHandle (0x2000002); 144 } 145 146 [Test] 147 [ExpectedException (typeof (Exception))] ResolveMethodTokenInvalidTokenType3()148 public void ResolveMethodTokenInvalidTokenType3 () { 149 /* A memberref which points to a field */ 150 module.ResolveMethodHandle (typeof (Type).GetField ("Delimiter").MetadataToken); 151 } 152 153 [Test] 154 [ExpectedException (typeof (Exception))] ResolveMethodTokenInvalidToken()155 public void ResolveMethodTokenInvalidToken () { 156 /* An out-of-range method def */ 157 module.ResolveMethodHandle (0x60f0001); 158 } 159 160 /* it is not public in 2.0 RTM. 161 [Test] 162 public void GetPEKind () { 163 PortableExecutableKinds pe_kind; 164 ImageFileMachine machine; 165 166 module.GetPEKind (out pe_kind, out machine); 167 168 Assert.AreEqual (PortableExecutableKinds.ILOnly, pe_kind); 169 } 170 171 [Test] 172 [ExpectedException (typeof (ArgumentNullException))] 173 public void GetPEKindInvalidHandle () { 174 PortableExecutableKinds pe_kind; 175 ImageFileMachine machine; 176 177 ModuleHandle.EmptyHandle.GetPEKind (out pe_kind, out machine); 178 } 179 */ 180 } 181 } 182 183