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