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