2 // ModuleHandleTest - NUnit Test Cases for the ModuleHandle class
4 // Zoltan Varga (vargaz@freemail.hu)
6 // (C) Ximian, Inc. http://www.ximian.com
12 // - dynamic assemblies
18 using System
.Threading
;
19 using System
.Reflection
;
20 using System
.Reflection
.Emit
;
22 using System
.Collections
;
24 using NUnit
.Framework
;
26 namespace MonoTests
.System
30 public class ModuleHandleTest
: Assertion
32 public static int foo
;
34 public static int bar
{
40 public event EventHandler baz
;
42 public ModuleHandleTest () {
45 public static void gnaf (int i
, int j
) {
48 public ModuleHandle module
;
51 public void SetUp () {
52 module
= typeof (ModuleHandleTest
).Assembly
.GetModules ()[0].ModuleHandle
;
56 public void ResolveTypeToken () {
58 AssertEquals (typeof (ModuleHandleTest
), Type
.GetTypeFromHandle (module
.ResolveTypeHandle (typeof (ModuleHandleTest
).MetadataToken
)));
62 [ExpectedException (typeof (ArgumentNullException
))]
63 public void ResolveTypeTokenInvalidHandle () {
64 ModuleHandle
.EmptyHandle
.ResolveTypeHandle (typeof (ModuleHandleTest
).MetadataToken
);
68 [ExpectedException (typeof (TypeLoadException
))]
69 public void ResolveTypeTokenInvalidTokenType () {
70 module
.ResolveTypeHandle (1234);
74 [ExpectedException (typeof (TypeLoadException
))]
75 public void ResolveTypeTokenInvalidTokenType2 () {
76 module
.ResolveTypeHandle (0x4000001);
82 public void ResolveFieldToken () {
83 FieldInfo fi
= typeof (ModuleHandleTest
).GetField ("foo");
85 AssertEquals (fi
, FieldInfo
.GetFieldFromHandle (module
.ResolveFieldHandle (fi
.MetadataToken
)));
89 [ExpectedException (typeof (ArgumentNullException
))]
90 public void ResolveFieldTokenInvalidHandle () {
91 ModuleHandle
.EmptyHandle
.ResolveFieldHandle (typeof (ModuleHandleTest
).MetadataToken
);
95 [ExpectedException (typeof (Exception
))]
96 public void ResolveFieldTokenInvalidTokenType () {
97 module
.ResolveFieldHandle (1234);
101 [ExpectedException (typeof (Exception
))]
102 public void ResolveFieldTokenInvalidTokenType2 () {
104 module
.ResolveFieldHandle (0x2000002);
108 [ExpectedException (typeof (Exception
))]
109 public void ResolveFieldTokenInvalidTokenType3 () {
110 /* A memberref which points to a method */
111 module
.ResolveFieldHandle (typeof (Console
).GetMethod ("ReadLine").MetadataToken
);
115 [ExpectedException (typeof (Exception
))]
116 public void ResolveFieldTokenInvalidToken () {
117 /* An out-of-range field def */
118 module
.ResolveFieldHandle (0x40f0001);
125 public void ResolveMethodToken () {
126 MethodInfo mi
= typeof (ModuleHandleTest
).GetMethod ("ResolveMethodToken");
128 AssertEquals (mi
, MethodInfo
.GetMethodFromHandle (module
.ResolveMethodHandle (mi
.MetadataToken
)));
132 [ExpectedException (typeof (ArgumentNullException
))]
133 public void ResolveMethodTokenInvalidHandle () {
134 ModuleHandle
.EmptyHandle
.ResolveMethodHandle (typeof (ModuleHandleTest
).GetMethod ("ResolveMethodToken").MetadataToken
);
138 [ExpectedException (typeof (Exception
))]
139 public void ResolveMethodTokenInvalidTokenType () {
140 module
.ResolveMethodHandle (1234);
144 [ExpectedException (typeof (Exception
))]
145 public void ResolveMethodTokenInvalidTokenType2 () {
147 module
.ResolveMethodHandle (0x2000002);
151 [ExpectedException (typeof (Exception
))]
152 public void ResolveMethodTokenInvalidTokenType3 () {
153 /* A memberref which points to a field */
154 module
.ResolveMethodHandle (typeof (Type
).GetField ("Delimiter").MetadataToken
);
158 [ExpectedException (typeof (Exception
))]
159 public void ResolveMethodTokenInvalidToken () {
160 /* An out-of-range method def */
161 module
.ResolveMethodHandle (0x60f0001);
165 public void GetPEKind () {
166 PortableExecutableKind pe_kind
;
167 ImageFileMachine machine
;
169 module
.GetPEKind (out pe_kind
, out machine
);
171 AssertEquals (PortableExecutableKind
.ILOnly
, pe_kind
);
175 [ExpectedException (typeof (ArgumentNullException
))]
176 public void GetPEKindInvalidHandle () {
177 PortableExecutableKind pe_kind
;
178 ImageFileMachine machine
;
180 ModuleHandle
.EmptyHandle
.GetPEKind (out pe_kind
, out machine
);