Merge pull request #1659 from alexanderkyte/stringbuilder-referencesource
[mono.git] / mcs / class / corlib / Test / System.Reflection.Emit / ModuleBuilderTest.cs
index 33d320e72999283562f76682554f94090d29c0b4..96102b18920561ba0437d271641a8b650af65821 100644 (file)
@@ -224,9 +224,6 @@ namespace MonoTests.System.Reflection.Emit
                }
 
                [Test]
-#if ONLY_1_1
-               [Category ("NotDotNet")] // Parent type was not extensible by the given type
-#endif
                public void DefineType_Parent_Interface ()
                {
                        TypeBuilder tb;
@@ -243,6 +240,17 @@ namespace MonoTests.System.Reflection.Emit
                        Assert.AreEqual (typeof (ICollection), tb.BaseType, "#2");
                }
 
+               [Test]
+               public void DefineType_TypeSize ()
+               {
+                       AssemblyBuilder ab = genAssembly ();
+                       ModuleBuilder mb = ab.DefineDynamicModule ("foo.dll", "foo.dll", true);
+
+                       TypeBuilder tb = mb.DefineType ("Foo", TypeAttributes.Public | TypeAttributes.Sealed | TypeAttributes.SequentialLayout,
+                               typeof (ValueType), 1);
+                       Assert.AreEqual (1, tb.Size);
+               }
+
                [Test]
                [ExpectedException (typeof (ArgumentException))]
                public void DuplicateTypeName () {
@@ -363,6 +371,32 @@ namespace MonoTests.System.Reflection.Emit
                        Assert.AreEqual ("Frub", mi.Name);
                }
 
+               [Test]
+               public void GetMethodTokenCrossMethodBuilders ()
+               {
+                       AssemblyBuilder ab = genAssembly ();
+                       ModuleBuilder moduleb = ab.DefineDynamicModule ("foo.dll", "foo.dll");
+
+                       TypeBuilder tb = moduleb.DefineType ("foo");
+                       MethodBuilder mb = tb.DefineMethod("Frub", MethodAttributes.Static, null, new Type[] { typeof(IntPtr) });
+                       int tok = mb.GetToken().Token;
+                       mb.SetImplementationFlags(MethodImplAttributes.NoInlining);
+                       ILGenerator ilgen = mb.GetILGenerator();
+                       ilgen.Emit(OpCodes.Ret);
+
+                       tb.CreateType ();
+
+                       var mi = (MethodInfo) moduleb.ResolveMember (tok);
+                       Assert.IsNotNull (mi);
+
+                       ModuleBuilder moduleb2 = ab.DefineDynamicModule ("foo2.dll", "foo2.dll");
+                       var tok2 = moduleb2.GetMethodToken (mi).Token;
+
+                       MethodBase mi2 = moduleb.ResolveMethod (tok2);
+                       Assert.IsNotNull (mi2);
+                       Assert.AreEqual ("Frub", mi.Name);
+               }
+
                [Test]
                public void ResolveMemberField ()
                {