2 // ModuleBuilderTest - NUnit Test Cases for the ModuleBuilder class
\r
4 // Zoltan Varga (vargaz@freemail.hu)
\r
6 // (C) Ximian, Inc. http://www.ximian.com
\r
12 using System.Threading;
\r
13 using System.Reflection;
\r
14 using System.Reflection.Emit;
\r
16 using System.Collections;
\r
18 using NUnit.Framework;
\r
20 namespace MonoTests.System.Reflection.Emit
\r
24 public class ModuleBuilderTest : Assertion
\r
26 static string TempFolder = Path.Combine (Path.GetTempPath (), "MonoTests.System.Reflection.Emit.ModuleBuilderTest");
\r
29 public void SetUp () {
\r
30 while (Directory.Exists (TempFolder))
\r
31 TempFolder = Path.Combine (TempFolder, "2");
\r
32 Directory.CreateDirectory (TempFolder);
\r
36 public void TearDown () {
\r
38 // This throws an exception under MS.NET, since the directory contains loaded
\r
40 Directory.Delete (TempFolder, true);
\r
46 // Some of these tests overlap with the tests for Module
\r
49 public void TestGlobalData () {
\r
51 AssemblyName assemblyName = new AssemblyName();
\r
52 assemblyName.Name = "foo";
\r
55 = Thread.GetDomain().DefineDynamicAssembly(
\r
56 assemblyName, AssemblyBuilderAccess.RunAndSave, TempFolder);
\r
58 string resfile = Path.Combine (TempFolder, "res");
\r
59 using (StreamWriter sw = new StreamWriter (resfile)) {
\r
60 sw.WriteLine ("FOO");
\r
63 ModuleBuilder mb = ab.DefineDynamicModule("foo.dll", "foo.dll");
\r
65 mb.DefineInitializedData ("DATA", new byte [100], FieldAttributes.Public);
\r
66 mb.DefineInitializedData ("DATA2", new byte [100], FieldAttributes.Public);
\r
67 mb.DefineInitializedData ("DATA3", new byte [99], FieldAttributes.Public);
\r
68 mb.DefineUninitializedData ("DATA4", 101, FieldAttributes.Public);
\r
69 mb.DefineInitializedData ("DATA_PRIVATE", new byte [100], 0);
\r
70 mb.CreateGlobalFunctions ();
\r
72 ab.Save ("foo.dll");
\r
74 Assembly assembly = Assembly.LoadFrom (Path.Combine (TempFolder, "foo.dll"));
\r
76 Module module = assembly.GetLoadedModules ()[0];
\r
78 string[] expectedFieldNames = new string [] {
\r
79 "DATA", "DATA2", "DATA3", "DATA4"
\r
81 ArrayList fieldNames = new ArrayList ();
\r
82 foreach (FieldInfo fi in module.GetFields ()) {
\r
83 fieldNames.Add (fi.Name);
\r
85 AssertArrayEqualsSorted (expectedFieldNames, fieldNames.ToArray (typeof (string)));
\r
87 AssertEquals (module.GetField ("DATA") != null, true);
\r
88 AssertEquals (module.GetField ("DATA2") != null, true);
\r
89 AssertEquals (module.GetField ("DATA3") != null, true);
\r
90 AssertEquals (module.GetField ("DATA4") != null, true);
\r
91 AssertEquals (module.GetField ("DATA_PRIVATE"), null);
\r
92 AssertEquals (module.GetField ("DATA_PRIVATE", BindingFlags.NonPublic | BindingFlags.Static) != null, true);
\r
95 private static void AssertArrayEqualsSorted (Array o1, Array o2) {
\r
96 Array s1 = (Array)o1.Clone ();
\r
97 Array s2 = (Array)o2.Clone ();
\r
102 AssertEquals (s1.Length, s2.Length);
\r
103 for (int i = 0; i < s1.Length; ++i)
\r
104 AssertEquals (s1.GetValue (i), s2.GetValue (i));
\r