Merge pull request #1896 from meum/patch-1
[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
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
38         public ModuleHandleTest () {
39         }
40
41         public static void gnaf (int i, int j) {
42         }
43
44         public ModuleHandle module;
45
46         [SetUp]
47         public void SetUp () {
48                 module = typeof (ModuleHandleTest).Assembly.GetModules ()[0].ModuleHandle;
49         }
50
51         [Test]
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))]
59         public void ResolveTypeTokenInvalidHandle () {
60                 ModuleHandle.EmptyHandle.ResolveTypeHandle (typeof (ModuleHandleTest).MetadataToken);
61         }
62
63         [Test]
64         [ExpectedException (typeof (TypeLoadException))]
65         public void ResolveTypeTokenInvalidTokenType () {
66                 module.ResolveTypeHandle (1234);
67         }
68
69         [Test]
70         [ExpectedException (typeof (TypeLoadException))]
71         public void ResolveTypeTokenInvalidTokenType2 () {
72                 module.ResolveTypeHandle (0x4000001);
73         }
74
75
76
77         [Test]
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))]
86         public void ResolveFieldTokenInvalidHandle () {
87                 ModuleHandle.EmptyHandle.ResolveFieldHandle (typeof (ModuleHandleTest).MetadataToken);
88         }
89
90         [Test]
91         [ExpectedException (typeof (Exception))]
92         public void ResolveFieldTokenInvalidTokenType () {
93                 module.ResolveFieldHandle (1234);
94         }
95
96         [Test]
97         [ExpectedException (typeof (Exception))]
98         public void ResolveFieldTokenInvalidTokenType2 () {
99                 /* A typedef */
100                 module.ResolveFieldHandle (0x2000002);
101         }
102
103         [Test]
104         [ExpectedException (typeof (Exception))]
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))]
112         public void ResolveFieldTokenInvalidToken () {
113                 /* An out-of-range field def */
114                 module.ResolveFieldHandle (0x40f0001);
115         }
116
117
118
119
120         [Test]
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))]
129         public void ResolveMethodTokenInvalidHandle () {
130                 ModuleHandle.EmptyHandle.ResolveMethodHandle (typeof (ModuleHandleTest).GetMethod ("ResolveMethodToken").MetadataToken);
131         }
132
133         [Test]
134         [ExpectedException (typeof (Exception))]
135         public void ResolveMethodTokenInvalidTokenType () {
136                 module.ResolveMethodHandle (1234);
137         }
138
139         [Test]
140         [ExpectedException (typeof (Exception))]
141         public void ResolveMethodTokenInvalidTokenType2 () {
142                 /* A typedef */
143                 module.ResolveMethodHandle (0x2000002);
144         }
145
146         [Test]
147         [ExpectedException (typeof (Exception))]
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))]
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