2 // DerivedType.cs - NUnit Test Cases for types derived from TypeBuilder
4 // Rodrigo Kumpera <rkumpera@novell.com>
6 // Copyright (C) 2009 Novell, Inc (http://www.novell.com)
10 using System.Collections;
11 using System.Threading;
12 using System.Reflection;
13 using System.Reflection.Emit;
15 using System.Security;
16 using System.Security.Permissions;
17 using System.Runtime.InteropServices;
18 using NUnit.Framework;
19 using System.Runtime.CompilerServices;
21 using System.Collections.Generic;
23 namespace MonoTests.System.Reflection.Emit
26 public class PointerTypeTest
28 AssemblyBuilder assembly;
31 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
35 return "internal__type"+ typeCount++;
39 protected void SetUp ()
41 AssemblyName assemblyName = new AssemblyName ();
42 assemblyName.Name = ASSEMBLY_NAME;
45 Thread.GetDomain ().DefineDynamicAssembly (
46 assemblyName, AssemblyBuilderAccess.RunAndSave, Path.GetTempPath ());
48 module = assembly.DefineDynamicModule ("module1");
53 public void PropertiesValue ()
55 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
56 Type ptr = tb.MakePointerType ();
58 Assert.AreEqual (assembly, ptr.Assembly, "#1");
59 Assert.AreEqual ("ns.type*, " + assembly.FullName, ptr.AssemblyQualifiedName, "#2");
60 Assert.AreEqual ("ns.type*", ptr.FullName, "#4");
61 Assert.AreEqual (module, ptr.Module, "#5");
62 Assert.AreEqual ("ns", ptr.Namespace, "#6");
63 Assert.AreEqual (ptr, ptr.UnderlyingSystemType, "#7");
64 Assert.AreEqual ("type*", ptr.Name, "#8");
69 } catch (NotSupportedException) {}
72 object x = ptr.TypeHandle;
74 } catch (NotSupportedException) {}
78 public void Methods ()
80 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
81 Type ptr = tb.MakePointerType ();
84 ptr.GetInterface ("foo", true);
86 } catch (NotSupportedException) {
93 } catch (NotSupportedException) {
97 Assert.AreEqual (tb, ptr.GetElementType ());
100 ptr.GetEvent ("foo", BindingFlags.Public);
102 } catch (NotSupportedException) {
107 ptr.GetEvents (BindingFlags.Public);
109 } catch (NotSupportedException) {
114 ptr.GetField ("foo", BindingFlags.Public);
116 } catch (NotSupportedException) {
121 ptr.GetFields (BindingFlags.Public);
123 } catch (NotSupportedException) {
128 ptr.GetMembers (BindingFlags.Public);
130 } catch (NotSupportedException) {
135 ptr.GetMethod ("Sort");
137 } catch (NotSupportedException) {
142 ptr.GetMethods (BindingFlags.Public);
144 } catch (NotSupportedException) {
149 ptr.GetNestedType ("bla", BindingFlags.Public);
151 } catch (NotSupportedException) {
156 ptr.GetNestedTypes (BindingFlags.Public);
158 } catch (NotSupportedException) {
163 ptr.GetProperties (BindingFlags.Public);
165 } catch (NotSupportedException) {
170 ptr.GetProperty ("Length");
172 } catch (NotSupportedException) {
177 ptr.GetConstructor (new Type[] { typeof (int) });
179 } catch (NotSupportedException) {
183 TypeAttributes attr = TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Class | TypeAttributes.Public;
184 Assert.AreEqual (attr, ptr.Attributes, "#15");
186 Assert.IsTrue (ptr.HasElementType, "#16");
187 Assert.IsFalse (ptr.IsArray, "#17");
188 Assert.IsFalse (ptr.IsByRef, "#18");
189 Assert.IsFalse (ptr.IsCOMObject, "#19");
190 Assert.IsTrue (ptr.IsPointer, "#20");
191 Assert.IsFalse (ptr.IsPrimitive, "#21");
194 ptr.GetConstructors (BindingFlags.Public);
196 } catch (NotSupportedException) {
201 ptr.InvokeMember ("GetLength", BindingFlags.Public, null, null, null);
203 } catch (NotSupportedException) {
210 } catch (NotSupportedException) {
216 public void GenericTypeMembers ()
218 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
219 Type arr = tb.MakeArrayType ();
222 arr.GetGenericArguments ();
224 } catch (NotSupportedException) {}
227 arr.GetGenericParameterConstraints ();
229 } catch (InvalidOperationException) {}
232 arr.GetGenericTypeDefinition ();
234 } catch (NotSupportedException) {}
236 Assert.IsFalse (arr.ContainsGenericParameters, "#4");
238 var x = arr.GenericParameterAttributes;
240 } catch (NotSupportedException) {}
243 var x = arr.GenericParameterPosition;
245 } catch (InvalidOperationException) {}
247 Assert.IsFalse (arr.ContainsGenericParameters, "#7");
249 Assert.IsFalse (arr.IsGenericParameter, "#8");
250 Assert.IsFalse (arr.IsGenericType, "#9");
251 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
255 public void AttributeValues ()
257 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
258 Assert.AreEqual (TypeAttributes.NotPublic, tb.Attributes, "#1");
260 tb = module.DefineType (MakeName (), TypeAttributes.Public);
261 Assert.AreEqual (TypeAttributes.Public, tb.Attributes, "#2");
263 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
264 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed, tb.Attributes, "#3");
266 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
267 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Abstract, tb.Attributes, "$4");
271 public void AsParamType ()
274 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
275 Type ptr = tb.MakePointerType ();
277 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [1] { ptr });
278 ILGenerator ilgen = mb.GetILGenerator ();
279 ilgen.Emit (OpCodes.Ret);
281 Type res = tb.CreateType ();
283 object o = Activator.CreateInstance (res);
284 //FIXME this crashes the runtime
285 //res.GetMethod ("Test").Invoke (o, new object[1] { null });
289 public void AsLocalVariable ()
292 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
293 Type ptr = tb.MakePointerType ();
295 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [0]);
296 ILGenerator ilgen = mb.GetILGenerator ();
297 ilgen.DeclareLocal (ptr);
298 ilgen.Emit (OpCodes.Ret);
300 Type res = tb.CreateType ();
302 object o = Activator.CreateInstance (res);
303 res.GetMethod ("Test").Invoke (o, null);
307 public void TestEquals ()
309 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
310 Type ptr = tb.MakePointerType ();
311 Type ptr2 = tb.MakePointerType ();
312 Assert.IsTrue (ptr.Equals (ptr), "#2");
316 [Category ("NotWorking")] //two stage type creation makes this fail
317 public void TestEquals2 ()
319 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
320 Type ptr = tb.MakePointerType ();
321 Type ptr2 = tb.MakePointerType ();
322 Assert.IsFalse (ptr.Equals (ptr2), "#1");
326 public void IsSubclassOf ()
328 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
329 Type ptr = tb.MakePointerType ();
330 Assert.IsFalse (ptr.IsSubclassOf (tb), "#1");
331 Assert.IsFalse (ptr.IsSubclassOf (typeof (object[])), "#2");
335 public void IsAssignableFrom ()
337 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
338 Type ptr = tb.MakePointerType ();
339 Assert.IsFalse (ptr.IsAssignableFrom (tb), "#1");
340 Assert.IsFalse (ptr.IsAssignableFrom (typeof (object[])), "#2");
344 [Category ("NotWorking")] //two stage type creation makes this fail
345 public void IsAssignableFrom2 ()
347 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
348 Type ptr = tb.MakePointerType ();
349 Assert.IsFalse (typeof (object[]).IsAssignableFrom (ptr), "#1");
350 Assert.IsFalse (typeof (object).IsAssignableFrom (ptr), "#2");
355 public void GetInterfaceMap ()
357 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
358 Type ptr = tb.MakePointerType ();
360 ptr.GetInterfaceMap (typeof (IEnumerable));
362 } catch (NotSupportedException) {
368 public void IsInstanceOfType ()
370 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
371 Type ptr = tb.MakePointerType ();
372 Assert.IsFalse (ptr.IsInstanceOfType (tb), "#1");
373 Assert.IsFalse (ptr.IsInstanceOfType (null), "#2");
374 Assert.IsFalse (ptr.IsInstanceOfType (new object [1]), "#3");
376 Type t = tb.CreateType ();
377 object obj = Activator.CreateInstance (t);
378 Assert.IsFalse (ptr.IsInstanceOfType (obj), "#4");
382 public void IsGenericTypeDefinition ()
384 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
385 Type ptr = tb.MakePointerType ();
386 Assert.IsFalse (ptr.IsGenericTypeDefinition, "#1");
390 public void IsGenericType ()
392 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
393 Type ptr = tb.MakePointerType ();
394 Assert.IsFalse (ptr.IsGenericType, "#1");
398 public void MakeGenericType ()
400 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
401 Type ptr = tb.MakePointerType ();
403 ptr.MakeGenericType (new Type[] { typeof (string) });
405 } catch (NotSupportedException) {}
409 public void GenericParameterPosition ()
411 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
412 Type ptr = tb.MakePointerType ();
414 int pos = ptr.GenericParameterPosition;
416 } catch (InvalidOperationException) {}
420 public void GenericParameterAttributes ()
422 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
423 Type ptr = tb.MakePointerType ();
425 object attr = ptr.GenericParameterAttributes;
427 } catch (NotSupportedException) {}
431 public void GetGenericParameterConstraints ()
433 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
434 Type ptr = tb.MakePointerType ();
436 ptr.GetGenericParameterConstraints ();
438 } catch (InvalidOperationException) {}
442 public void MakeArrayType ()
444 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
445 Type ptr = tb.MakePointerType ();
446 Type res = ptr.MakeArrayType ();
447 Assert.IsNotNull (res, "#1");
448 Assert.IsTrue (res.IsArray, "#2");
450 res = ptr.MakeArrayType (2);
451 Assert.IsNotNull (res, "#3");
452 Assert.IsTrue (res.IsArray, "#4");
456 public void MakeByRefType ()
458 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
459 Type ptr = tb.MakePointerType ();
460 Type res = ptr.MakeByRefType ();
462 Assert.IsNotNull (res, "#1");
463 Assert.IsTrue (res.IsByRef, "#2");
467 public void MakePointerType ()
469 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
470 Type ptr = tb.MakePointerType ();
471 Type res = ptr.MakePointerType ();
473 Assert.IsNotNull (res, "#1");
474 Assert.IsTrue (res.IsPointer, "#2");
478 public void StructLayoutAttribute ()
480 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
481 Type ptr = tb.MakePointerType ();
483 object x = ptr.StructLayoutAttribute;
485 } catch (NotSupportedException) {}
489 public void ByRefOfGenericTypeParameter ()
491 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
492 var gparam = tb.DefineGenericParameters ("F")[0];
493 Type ptr = gparam.MakePointerType ();
496 ptr.GetGenericArguments ();
498 } catch (NotSupportedException) {}
501 ptr.GetGenericParameterConstraints ();
503 } catch (InvalidOperationException) {}
506 ptr.GetGenericTypeDefinition ();
508 } catch (NotSupportedException) {}
510 Assert.IsTrue (ptr.ContainsGenericParameters, "#4");
512 var x = ptr.GenericParameterAttributes;
514 } catch (NotSupportedException) {}
517 var x = ptr.GenericParameterPosition;
519 } catch (InvalidOperationException) {}
522 Assert.IsFalse (ptr.IsGenericParameter, "#8");
523 Assert.IsFalse (ptr.IsGenericType, "#9");
524 Assert.IsFalse (ptr.IsGenericTypeDefinition, "#10");
526 Assert.AreEqual (TypeAttributes.Public, ptr.Attributes, "#11");
528 Assert.IsTrue (ptr.HasElementType, "#12");
529 Assert.IsTrue (ptr.IsPointer, "#13");
531 Assert.AreEqual (assembly, ptr.Assembly, "#14");
532 Assert.AreEqual (null, ptr.AssemblyQualifiedName, "#15");
533 //XXX LAMEIMPL this passes on MS even thou it's pretty much very wrong.
534 Assert.AreEqual (typeof (Array), ptr.BaseType, "#16");
535 Assert.AreEqual (null, ptr.FullName, "#17");
536 Assert.AreEqual (module, ptr.Module, "#18");
537 Assert.AreEqual (null, ptr.Namespace, "#19");
538 Assert.AreEqual (ptr, ptr.UnderlyingSystemType, "#20");
539 Assert.AreEqual ("F*", ptr.Name, "#21");
541 Assert.AreEqual (gparam, ptr.GetElementType (), "#22");
547 public class ByrefTypeTest
549 AssemblyBuilder assembly;
550 ModuleBuilder module;
552 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
556 return "internal__type"+ typeCount++;
560 protected void SetUp ()
562 SetUp (AssemblyBuilderAccess.RunAndSave);
565 protected void SetUp (AssemblyBuilderAccess mode)
567 AssemblyName assemblyName = new AssemblyName ();
568 assemblyName.Name = ASSEMBLY_NAME;
571 Thread.GetDomain ().DefineDynamicAssembly (
572 assemblyName, mode, Path.GetTempPath ());
574 module = assembly.DefineDynamicModule ("module1");
579 public void PropertiesValue ()
581 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
582 Type byref = tb.MakeByRefType ();
584 Assert.AreEqual (assembly, byref.Assembly, "#1");
585 Assert.AreEqual ("ns.type&, " + assembly.FullName, byref.AssemblyQualifiedName, "#2");
586 Assert.AreEqual ("ns.type&", byref.FullName, "#4");
587 Assert.AreEqual (module, byref.Module, "#5");
588 Assert.AreEqual ("ns", byref.Namespace, "#6");
589 Assert.AreEqual (byref, byref.UnderlyingSystemType, "#7");
590 Assert.AreEqual ("type&", byref.Name, "#8");
593 object x = byref.GUID;
595 } catch (NotSupportedException) {}
598 object x = byref.TypeHandle;
600 } catch (NotSupportedException) {}
604 public void Methods ()
606 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
607 Type byref = tb.MakeByRefType ();
610 byref.GetInterface ("foo", true);
612 } catch (NotSupportedException) {
617 byref.GetInterfaces ();
619 } catch (NotSupportedException) {
623 Assert.AreEqual (tb, byref.GetElementType ());
626 byref.GetEvent ("foo", BindingFlags.Public);
628 } catch (NotSupportedException) {
633 byref.GetEvents (BindingFlags.Public);
635 } catch (NotSupportedException) {
640 byref.GetField ("foo", BindingFlags.Public);
642 } catch (NotSupportedException) {
647 byref.GetFields (BindingFlags.Public);
649 } catch (NotSupportedException) {
654 byref.GetMembers (BindingFlags.Public);
656 } catch (NotSupportedException) {
661 byref.GetMethod ("Sort");
663 } catch (NotSupportedException) {
668 byref.GetMethods (BindingFlags.Public);
670 } catch (NotSupportedException) {
675 byref.GetNestedType ("bla", BindingFlags.Public);
677 } catch (NotSupportedException) {
682 byref.GetNestedTypes (BindingFlags.Public);
684 } catch (NotSupportedException) {
689 byref.GetProperties (BindingFlags.Public);
691 } catch (NotSupportedException) {
696 byref.GetProperty ("Length");
698 } catch (NotSupportedException) {
703 byref.GetConstructor (new Type[] { typeof (int) });
705 } catch (NotSupportedException) {
709 TypeAttributes attr = TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Class | TypeAttributes.Public;
710 Assert.AreEqual (attr, byref.Attributes, "#15");
712 Assert.IsTrue (byref.HasElementType, "#16");
713 Assert.IsFalse (byref.IsArray, "#17");
714 Assert.IsTrue (byref.IsByRef, "#18");
715 Assert.IsFalse (byref.IsCOMObject, "#19");
716 Assert.IsFalse (byref.IsPointer, "#20");
717 Assert.IsFalse (byref.IsPrimitive, "#21");
720 byref.GetConstructors (BindingFlags.Public);
722 } catch (NotSupportedException) {
727 byref.InvokeMember ("GetLength", BindingFlags.Public, null, null, null);
729 } catch (NotSupportedException) {
734 byref.GetArrayRank ();
736 } catch (NotSupportedException) {
742 public void AttributeValues ()
744 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
745 Assert.AreEqual (TypeAttributes.NotPublic, tb.Attributes, "#1");
747 tb = module.DefineType (MakeName (), TypeAttributes.Public);
748 Assert.AreEqual (TypeAttributes.Public, tb.Attributes, "#2");
750 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
751 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed, tb.Attributes, "#3");
753 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
754 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Abstract, tb.Attributes, "$4");
758 public void AsParamType ()
761 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
762 Type byref = tb.MakeByRefType ();
764 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [1] { byref });
765 ILGenerator ilgen = mb.GetILGenerator ();
766 ilgen.Emit (OpCodes.Ret);
768 Type res = tb.CreateType ();
770 object o = Activator.CreateInstance (res);
771 res.GetMethod ("Test").Invoke (o, new object[1] { null });
775 public void AsLocalVariable ()
778 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
779 Type byref = tb.MakeByRefType ();
781 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [0]);
782 ILGenerator ilgen = mb.GetILGenerator ();
783 ilgen.DeclareLocal (byref);
784 ilgen.Emit (OpCodes.Ret);
786 Type res = tb.CreateType ();
788 object o = Activator.CreateInstance (res);
789 res.GetMethod ("Test").Invoke (o, null);
793 public void TestEquals ()
795 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
796 Type byref = tb.MakeByRefType ();
797 Type byref2 = tb.MakeByRefType ();
798 Assert.IsTrue (byref.Equals (byref), "#1");
802 [Category ("NotWorking")] //two stage type creation makes this fail
803 public void TestEquals2 ()
805 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
806 Type byref = tb.MakeByRefType ();
807 Type byref2 = tb.MakeByRefType ();
808 Assert.IsFalse (byref.Equals (byref2), "#1");
812 public void IsSubclassOf ()
814 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
815 Type byref = tb.MakeByRefType ();
816 Assert.IsFalse (byref.IsSubclassOf (tb), "#1");
817 Assert.IsFalse (byref.IsSubclassOf (typeof (object[])), "#2");
821 public void IsAssignableFrom ()
823 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
824 Type byref = tb.MakeByRefType ();
825 Assert.IsFalse (byref.IsAssignableFrom (tb), "#1");
826 Assert.IsFalse (byref.IsAssignableFrom (typeof (object[])), "#2");
830 [Category ("NotWorking")] //two stage type creation makes this fail
831 public void IsAssignableFrom2 ()
833 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
834 Type byref = tb.MakeByRefType ();
835 Assert.IsFalse (typeof (object[]).IsAssignableFrom (byref), "#1");
836 Assert.IsFalse (typeof (object).IsAssignableFrom (byref), "#2");
840 public void GetInterfaceMap ()
842 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
843 Type byref = tb.MakeByRefType ();
845 byref.GetInterfaceMap (typeof (IEnumerable));
847 } catch (NotSupportedException) {
853 public void IsInstanceOfType ()
855 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
856 Type byref = tb.MakeByRefType ();
857 Assert.IsFalse (byref.IsInstanceOfType (tb), "#1");
858 Assert.IsFalse (byref.IsInstanceOfType (null), "#2");
859 Assert.IsFalse (byref.IsInstanceOfType (new object [1]), "#3");
861 Type t = tb.CreateType ();
862 object obj = Activator.CreateInstance (t);
863 Assert.IsFalse (byref.IsInstanceOfType (obj), "#4");
867 public void IsGenericTypeDefinition ()
869 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
870 Type byref = tb.MakeByRefType ();
871 Assert.IsFalse (byref.IsGenericTypeDefinition, "#1");
875 public void IsGenericType ()
877 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
878 Type byref = tb.MakeByRefType ();
879 Assert.IsFalse (byref.IsGenericType, "#1");
883 public void MakeGenericType ()
885 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
886 Type byref = tb.MakeByRefType ();
888 byref.MakeGenericType (new Type[] { typeof (string) });
890 } catch (NotSupportedException) {}
894 public void GenericParameterPosition ()
896 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
897 Type byref = tb.MakeByRefType ();
899 int pos = byref.GenericParameterPosition;
901 } catch (InvalidOperationException) {}
905 public void GenericParameterAttributes ()
907 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
908 Type byref = tb.MakeByRefType ();
910 object attr = byref.GenericParameterAttributes;
912 } catch (NotSupportedException) {}
916 public void GetGenericParameterConstraints ()
918 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
919 Type byref = tb.MakeByRefType ();
921 byref.GetGenericParameterConstraints ();
923 } catch (InvalidOperationException) {}
927 public void MakeArrayType ()
929 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
930 Type byref = tb.MakeByRefType ();
932 byref.MakeArrayType ();
934 } catch (ArgumentException) {};
936 byref.MakeArrayType (2);
938 } catch (ArgumentException) {};
942 public void MakeByRefType ()
944 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
945 Type byref = tb.MakeByRefType ();
947 byref.MakeByRefType ();
949 } catch (ArgumentException) {}
953 public void MakePointerType ()
955 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
956 Type byref = tb.MakeByRefType ();
958 byref.MakePointerType ();
960 } catch (ArgumentException) {}
964 public void StructLayoutAttribute ()
966 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
967 Type byref = tb.MakeByRefType ();
969 object x = byref.StructLayoutAttribute;
971 } catch (NotSupportedException) {}
975 [Category ("NotDotNet")]
976 // CompilerContext no longer supported
977 [Category ("NotWorking")]
978 public void ByRefOfAttriburesUnderCompilerContext ()
980 SetUp (AssemblyBuilderAccess.RunAndSave | (AssemblyBuilderAccess)0x800);
982 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
983 var gparam = tb.DefineGenericParameters ("F")[0];
984 Type byref = gparam.MakeByRefType ();
986 tb = module.DefineType (MakeName (), TypeAttributes.Public);
987 Assert.AreEqual (TypeAttributes.Public , byref.Attributes, "#1");
992 public void ByRefOfGenericTypeParameter ()
994 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
995 var gparam = tb.DefineGenericParameters ("F")[0];
996 Type byref = gparam.MakeByRefType ();
999 byref.GetGenericArguments ();
1001 } catch (NotSupportedException) {}
1004 byref.GetGenericParameterConstraints ();
1006 } catch (InvalidOperationException) {}
1009 byref.GetGenericTypeDefinition ();
1011 } catch (NotSupportedException) {}
1013 Assert.IsTrue (byref.ContainsGenericParameters, "#4");
1015 var x = byref.GenericParameterAttributes;
1017 } catch (NotSupportedException) {}
1020 var x = byref.GenericParameterPosition;
1022 } catch (InvalidOperationException) {}
1025 Assert.IsFalse (byref.IsGenericParameter, "#8");
1026 Assert.IsFalse (byref.IsGenericType, "#9");
1027 Assert.IsFalse (byref.IsGenericTypeDefinition, "#10");
1030 Assert.AreEqual (TypeAttributes.Public, byref.Attributes, "#11");
1032 Assert.IsTrue (byref.HasElementType, "#12");
1033 Assert.IsTrue (byref.IsByRef, "#13");
1035 Assert.AreEqual (assembly, byref.Assembly, "#14");
1036 Assert.AreEqual (null, byref.AssemblyQualifiedName, "#15");
1037 //XXX LAMEIMPL this passes on MS even thou it's pretty much very wrong.
1038 Assert.AreEqual (typeof (Array), byref.BaseType, "#16");
1039 Assert.AreEqual (null, byref.FullName, "#17");
1040 Assert.AreEqual (module, byref.Module, "#18");
1041 Assert.AreEqual (null, byref.Namespace, "#19");
1042 Assert.AreEqual (byref, byref.UnderlyingSystemType, "#20");
1043 Assert.AreEqual ("F&", byref.Name, "#21");
1045 Assert.AreEqual (gparam, byref.GetElementType (), "#22");
1050 public class ArrayTypeTest
1052 AssemblyBuilder assembly;
1053 ModuleBuilder module;
1055 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
1059 return "internal__type"+ typeCount++;
1064 protected void SetUp ()
1066 SetUp (AssemblyBuilderAccess.RunAndSave);
1069 protected void SetUp (AssemblyBuilderAccess mode)
1071 AssemblyName assemblyName = new AssemblyName ();
1072 assemblyName.Name = ASSEMBLY_NAME;
1075 Thread.GetDomain ().DefineDynamicAssembly (
1076 assemblyName, mode, Path.GetTempPath ());
1078 module = assembly.DefineDynamicModule ("module1");
1083 public void OneDimMultiDimentionArray ()
1085 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
1087 Type arr1 = tb.MakeArrayType ();
1088 Type arr2 = tb.MakeArrayType (1);
1089 Type arr3 = arr1.MakeArrayType (1);
1091 Assert.AreEqual ("type[]", arr1.Name, "#1");
1092 Assert.AreEqual ("type[*]", arr2.Name, "#2");
1093 Assert.AreEqual ("type[][*]", arr3.Name, "#3");
1095 var gparam = tb.DefineGenericParameters ("F")[0];
1096 Type arr4 = gparam.MakeArrayType ();
1097 Type arr5 = gparam.MakeArrayType (1);
1099 Assert.AreEqual ("F[]", arr4.Name, "#4");
1100 Assert.AreEqual ("F[*]", arr5.Name, "#5");
1102 var eb = module.DefineEnum ("enum", TypeAttributes.Public, tb);
1103 Type arr6 = eb.MakeArrayType ();
1104 Type arr7 = eb.MakeArrayType (1);
1106 Assert.AreEqual ("enum[]", arr6.Name, "#6");
1107 Assert.AreEqual ("enum[*]", arr7.Name, "#7");
1111 public void PropertiesValue ()
1113 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
1114 Type arr = tb.MakeArrayType ();
1116 Assert.AreEqual (assembly, arr.Assembly, "#1");
1117 Assert.AreEqual ("ns.type[], " + assembly.FullName, arr.AssemblyQualifiedName, "#2");
1118 Assert.AreEqual (typeof (Array), arr.BaseType, "#3");
1119 Assert.AreEqual ("ns.type[]", arr.FullName, "#4");
1120 Assert.AreEqual (module, arr.Module, "#5");
1121 Assert.AreEqual ("ns", arr.Namespace, "#6");
1122 Assert.AreEqual (arr, arr.UnderlyingSystemType, "#7");
1123 Assert.AreEqual ("type[]", arr.Name, "#8");
1126 object x = arr.GUID;
1128 } catch (NotSupportedException) {}
1131 object x = arr.TypeHandle;
1132 Assert.Fail ("#10");
1133 } catch (NotSupportedException) {}
1137 public void Methods ()
1139 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
1140 Type arr = tb.MakeArrayType ();
1143 arr.GetInterface ("foo", true);
1145 } catch (NotSupportedException) {
1150 arr.GetInterfaces ();
1152 } catch (NotSupportedException) {
1156 Assert.AreEqual (tb, arr.GetElementType ());
1159 arr.GetEvent ("foo", BindingFlags.Public);
1161 } catch (NotSupportedException) {
1166 arr.GetEvents (BindingFlags.Public);
1168 } catch (NotSupportedException) {
1173 arr.GetField ("foo", BindingFlags.Public);
1175 } catch (NotSupportedException) {
1180 arr.GetFields (BindingFlags.Public);
1182 } catch (NotSupportedException) {
1187 arr.GetMembers (BindingFlags.Public);
1189 } catch (NotSupportedException) {
1194 arr.GetMethod ("Sort");
1196 } catch (NotSupportedException) {
1201 arr.GetMethods (BindingFlags.Public);
1203 } catch (NotSupportedException) {
1208 arr.GetNestedType ("bla", BindingFlags.Public);
1209 Assert.Fail ("#10");
1210 } catch (NotSupportedException) {
1215 arr.GetNestedTypes (BindingFlags.Public);
1216 Assert.Fail ("#11");
1217 } catch (NotSupportedException) {
1222 arr.GetProperties (BindingFlags.Public);
1223 Assert.Fail ("#12");
1224 } catch (NotSupportedException) {
1229 arr.GetProperty ("Length");
1230 Assert.Fail ("#13");
1231 } catch (NotSupportedException) {
1236 arr.GetConstructor (new Type[] { typeof (int) });
1237 Assert.Fail ("#14");
1238 } catch (NotSupportedException) {
1242 TypeAttributes attr = TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Class | TypeAttributes.Public;
1243 Assert.AreEqual (attr, arr.Attributes, "#15");
1245 Assert.IsTrue (arr.HasElementType, "#16");
1246 Assert.IsTrue (arr.IsArray, "#17");
1247 Assert.IsFalse (arr.IsByRef, "#18");
1248 Assert.IsFalse (arr.IsCOMObject, "#19");
1249 Assert.IsFalse (arr.IsPointer, "#20");
1250 Assert.IsFalse (arr.IsPrimitive, "#21");
1253 arr.GetConstructors (BindingFlags.Public);
1254 Assert.Fail ("#22");
1255 } catch (NotSupportedException) {
1260 arr.InvokeMember ("GetLength", BindingFlags.Public, null, null, null);
1261 Assert.Fail ("#23");
1262 } catch (NotSupportedException) {
1268 public void AttributeValues ()
1270 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
1271 Assert.AreEqual (TypeAttributes.NotPublic, tb.Attributes, "#1");
1273 tb = module.DefineType (MakeName (), TypeAttributes.Public);
1274 Assert.AreEqual (TypeAttributes.Public, tb.Attributes, "#2");
1276 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
1277 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed, tb.Attributes, "#3");
1279 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
1280 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Abstract, tb.Attributes, "$4");
1284 [Category ("NotDotNet")]
1285 // CompilerContext no longer supported
1286 [Category ("NotWorking")]
1287 public void AttributeValuesUnderCompilerContext ()
1289 SetUp (AssemblyBuilderAccess.RunAndSave | (AssemblyBuilderAccess)0x800);
1291 TypeAttributes arrayAttr = TypeAttributes.Sealed | TypeAttributes.Serializable;
1293 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
1294 Assert.AreEqual (TypeAttributes.NotPublic | arrayAttr, tb.MakeArrayType ().Attributes, "#1");
1296 tb = module.DefineType (MakeName (), TypeAttributes.Public);
1297 Assert.AreEqual (TypeAttributes.Public | arrayAttr, tb.MakeArrayType ().Attributes, "#2");
1299 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
1300 Assert.AreEqual (TypeAttributes.Public | arrayAttr, tb.MakeArrayType ().Attributes, "#3");
1302 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
1303 Assert.AreEqual (TypeAttributes.Public | arrayAttr, tb.MakeArrayType ().Attributes, "$4");
1307 public void AsReturnType ()
1310 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1311 Type arr = tb.MakeArrayType ();
1313 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, arr, new Type [0]);
1314 ILGenerator ilgen = mb.GetILGenerator ();
1315 ilgen.Emit (OpCodes.Ldnull);
1316 ilgen.Emit (OpCodes.Ret);
1318 Type res = tb.CreateType ();
1320 object o = Activator.CreateInstance (res);
1321 res.GetMethod ("Test").Invoke (o, null);
1325 public void AsParamType ()
1328 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1329 Type arr = tb.MakeArrayType ();
1331 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [1] { arr });
1332 ILGenerator ilgen = mb.GetILGenerator ();
1333 ilgen.Emit (OpCodes.Ret);
1335 Type res = tb.CreateType ();
1337 object o = Activator.CreateInstance (res);
1338 res.GetMethod ("Test").Invoke (o, new object[1] { null });
1342 public void AsLocalVariable ()
1345 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1346 Type arr = tb.MakeArrayType ();
1348 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, arr, new Type [0]);
1349 ILGenerator ilgen = mb.GetILGenerator ();
1350 ilgen.DeclareLocal (arr);
1351 ilgen.Emit (OpCodes.Ldnull);
1352 ilgen.Emit (OpCodes.Stloc_0);
1353 ilgen.Emit (OpCodes.Ldloc_0);
1354 ilgen.Emit (OpCodes.Ret);
1356 Type res = tb.CreateType ();
1358 object o = Activator.CreateInstance (res);
1359 res.GetMethod ("Test").Invoke (o, null);
1363 public void TestEquals ()
1365 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1366 Type arr = tb.MakeArrayType ();
1367 Type arr2 = tb.MakeArrayType ();
1368 Assert.IsTrue (arr.Equals (arr), "#1");
1372 [Category ("NotWorking")] //two stage type creation makes this fail
1373 public void TestEquals2 ()
1375 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1376 Type arr = tb.MakeArrayType ();
1377 Type arr2 = tb.MakeArrayType ();
1378 Assert.IsFalse (arr.Equals (arr2), "#1");
1382 public void IsSubclassOf ()
1384 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1385 Type arr = tb.MakeArrayType ();
1386 Assert.IsFalse (arr.IsSubclassOf (tb), "#1");
1387 Assert.IsFalse (arr.IsSubclassOf (typeof (object[])), "#2");
1391 public void IsAssignableFrom ()
1393 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1394 Type arr = tb.MakeArrayType ();
1395 Assert.IsFalse (arr.IsAssignableFrom (tb), "#1");
1396 Assert.IsFalse (arr.IsAssignableFrom (typeof (object[])), "#2");
1400 [Category ("NotWorking")] //two stage type creation makes this fail
1401 public void IsAssignableFrom2 ()
1403 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1404 Type arr = tb.MakeArrayType ();
1405 Assert.IsFalse (typeof (object[]).IsAssignableFrom (arr), "#1");
1406 Assert.IsFalse (typeof (object).IsAssignableFrom (arr), "#2");
1410 public void GetInterfaceMap ()
1412 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1413 Type arr = tb.MakeArrayType ();
1415 arr.GetInterfaceMap (typeof (IEnumerable));
1417 } catch (NotSupportedException) {
1423 public void IsInstanceOfType ()
1425 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1426 Type arr = tb.MakeArrayType ();
1427 Assert.IsFalse (arr.IsInstanceOfType (tb), "#1");
1428 Assert.IsFalse (arr.IsInstanceOfType (null), "#2");
1429 Assert.IsFalse (arr.IsInstanceOfType (new object [1]), "#3");
1431 Type t = tb.CreateType ();
1432 object obj = Array.CreateInstance (t, 10);
1433 Assert.IsFalse (arr.IsInstanceOfType (obj), "#4");
1437 public void IsGenericTypeDefinition ()
1439 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1440 Type arr = tb.MakeArrayType ();
1441 Assert.IsFalse (arr.IsGenericTypeDefinition, "#1");
1445 public void IsGenericType ()
1447 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1448 Type arr = tb.MakeArrayType ();
1449 Assert.IsFalse (arr.IsGenericType, "#1");
1453 public void MakeGenericType ()
1455 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1456 Type arr = tb.MakeArrayType ();
1458 arr.MakeGenericType (new Type[] { typeof (string) });
1460 } catch (NotSupportedException) {}
1464 public void GenericParameterPosition ()
1466 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1467 Type arr = tb.MakeArrayType ();
1469 int pos = arr.GenericParameterPosition;
1471 } catch (InvalidOperationException) {}
1475 public void GenericParameterAttributes ()
1477 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1478 Type arr = tb.MakeArrayType ();
1480 object attr = arr.GenericParameterAttributes;
1482 } catch (NotSupportedException) {}
1486 public void GetGenericParameterConstraints ()
1488 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1489 Type arr = tb.MakeArrayType ();
1491 arr.GetGenericParameterConstraints ();
1493 } catch (InvalidOperationException) {}
1497 public void MakeArrayType ()
1499 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1500 Type arr = tb.MakeArrayType ();
1501 Type res = arr.MakeArrayType ();
1502 Assert.IsNotNull (res, "#1");
1503 Assert.IsTrue (res.IsArray, "#2");
1505 res = arr.MakeArrayType (2);
1506 Assert.IsNotNull (res, "#3");
1507 Assert.IsTrue (res.IsArray, "#4");
1511 public void MakeByRefType ()
1513 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1514 Type arr = tb.MakeArrayType ();
1515 Type res = arr.MakeByRefType ();
1517 Assert.IsNotNull (res, "#1");
1518 Assert.IsTrue (res.IsByRef, "#2");
1522 public void MakePointerType ()
1524 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1525 Type arr = tb.MakeArrayType ();
1526 Type res = arr.MakePointerType ();
1528 Assert.IsNotNull (res, "#1");
1529 Assert.IsTrue (res.IsPointer, "#2");
1533 public void StructLayoutAttribute ()
1535 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1536 Type arr = tb.MakeArrayType ();
1538 object x = arr.StructLayoutAttribute;
1540 } catch (NotSupportedException) {}
1544 public void GetArrayRank ()
1546 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1548 Assert.AreEqual (1, tb.MakeArrayType ().GetArrayRank (), "#1");
1549 Assert.AreEqual (2, tb.MakeArrayType (2).GetArrayRank (), "#2");
1553 public void GenericTypeMembers ()
1555 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1556 Type arr = tb.MakeArrayType ();
1559 arr.GetGenericArguments ();
1561 } catch (NotSupportedException) {}
1564 arr.GetGenericParameterConstraints ();
1566 } catch (InvalidOperationException) {}
1569 arr.GetGenericTypeDefinition ();
1571 } catch (NotSupportedException) {}
1573 Assert.IsFalse (arr.ContainsGenericParameters, "#4");
1575 var x = arr.GenericParameterAttributes;
1577 } catch (NotSupportedException) {}
1580 var x = arr.GenericParameterPosition;
1582 } catch (InvalidOperationException) {}
1584 Assert.IsFalse (arr.ContainsGenericParameters, "#7");
1586 Assert.IsFalse (arr.IsGenericParameter, "#8");
1587 Assert.IsFalse (arr.IsGenericType, "#9");
1588 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
1592 public void ArrayAsGenericArgumentOfNonSreType ()
1594 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1596 Type arr = tb.MakeArrayType ();
1597 Type inst = typeof (Foo<>).MakeGenericType (arr);
1599 MethodBuilder mb = tb.DefineMethod ("Main", MethodAttributes.Public | MethodAttributes.Static, typeof (object), Type.EmptyTypes);
1601 ILGenerator ilgen = mb.GetILGenerator ();
1602 ilgen.Emit (OpCodes.Ldtoken, inst);
1603 ilgen.Emit (OpCodes.Call, typeof (Type).GetMethod ("GetTypeFromHandle"));
1604 ilgen.Emit (OpCodes.Ret);
1606 Type res = tb.CreateType ();
1607 Type expected = typeof (Foo<>).MakeGenericType (res.MakeArrayType ());
1609 Assert.AreEqual (expected, res.GetMethod ("Main").Invoke (null, null), "#1");
1610 Assert.IsNotNull (Activator.CreateInstance (expected), "#2");
1615 public void GenericTypeMembersOfGenericTypeParam ()
1617 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1618 var gparam = tb.DefineGenericParameters ("F")[0];
1619 Type arr = gparam.MakeArrayType ();
1622 arr.GetGenericArguments ();
1624 } catch (NotSupportedException) {}
1627 arr.GetGenericParameterConstraints ();
1629 } catch (InvalidOperationException) {}
1632 arr.GetGenericTypeDefinition ();
1634 } catch (NotSupportedException) {}
1636 Assert.IsTrue (arr.ContainsGenericParameters, "#4");
1638 var x = arr.GenericParameterAttributes;
1640 } catch (NotSupportedException) {}
1643 var x = arr.GenericParameterPosition;
1645 } catch (InvalidOperationException) {}
1648 Assert.IsFalse (arr.IsGenericParameter, "#8");
1649 Assert.IsFalse (arr.IsGenericType, "#9");
1650 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
1652 Assert.AreEqual (TypeAttributes.Public, arr.Attributes, "#11");
1654 Assert.IsTrue (arr.HasElementType, "#12");
1655 Assert.IsTrue (arr.IsArray, "#13");
1657 Assert.AreEqual (assembly, arr.Assembly, "#14");
1658 Assert.AreEqual (null, arr.AssemblyQualifiedName, "#15");
1659 Assert.AreEqual (typeof (Array), arr.BaseType, "#16");
1660 Assert.AreEqual (null, arr.FullName, "#17");
1661 Assert.AreEqual (module, arr.Module, "#18");
1662 Assert.AreEqual (null, arr.Namespace, "#19");
1663 Assert.AreEqual (arr, arr.UnderlyingSystemType, "#20");
1664 Assert.AreEqual ("F[]", arr.Name, "#21");
1666 Assert.AreEqual (gparam, arr.GetElementType (), "#22");
1670 public void GenericTypeMembersOfEnum ()
1672 var eb = module.DefineEnum ("dd.enum", TypeAttributes.Public, typeof (int));
1673 Type arr = eb.MakeArrayType ();
1676 arr.GetGenericArguments ();
1678 } catch (NotSupportedException) {}
1681 arr.GetGenericParameterConstraints ();
1683 } catch (InvalidOperationException) {}
1686 arr.GetGenericTypeDefinition ();
1688 } catch (NotSupportedException) {}
1690 Assert.IsFalse (arr.ContainsGenericParameters, "#4");
1692 var x = arr.GenericParameterAttributes;
1694 } catch (NotSupportedException) {}
1697 var x = arr.GenericParameterPosition;
1699 } catch (InvalidOperationException) {}
1702 Assert.IsFalse (arr.IsGenericParameter, "#8");
1703 Assert.IsFalse (arr.IsGenericType, "#9");
1704 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
1706 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Sealed, arr.Attributes, "#11");
1708 Assert.IsTrue (arr.HasElementType, "#12");
1709 Assert.IsTrue (arr.IsArray, "#13");
1711 Assert.AreEqual (assembly, arr.Assembly, "#14");
1712 Assert.AreEqual ("dd.enum[], MonoTests.System.Reflection.Emit.TypeBuilderTest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", arr.AssemblyQualifiedName, "#15");
1713 Assert.AreEqual (typeof (Array), arr.BaseType, "#16");
1714 Assert.AreEqual ("dd.enum[]", arr.FullName, "#17");
1715 Assert.AreEqual (module, arr.Module, "#18");
1716 Assert.AreEqual ("dd", arr.Namespace, "#19");
1717 Assert.AreEqual (arr, arr.UnderlyingSystemType, "#20");
1718 Assert.AreEqual ("enum[]", arr.Name, "#21");
1720 Assert.AreEqual (eb, arr.GetElementType (), "#22");