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;
22 using System.Collections.Generic;
25 namespace MonoTests.System.Reflection.Emit
29 public class PointerTypeTest
31 AssemblyBuilder assembly;
34 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
38 return "internal__type"+ typeCount++;
42 protected void SetUp ()
44 AssemblyName assemblyName = new AssemblyName ();
45 assemblyName.Name = ASSEMBLY_NAME;
48 Thread.GetDomain ().DefineDynamicAssembly (
49 assemblyName, AssemblyBuilderAccess.RunAndSave, Path.GetTempPath ());
51 module = assembly.DefineDynamicModule ("module1");
56 public void PropertiesValue ()
58 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
59 Type ptr = tb.MakePointerType ();
61 Assert.AreEqual (assembly, ptr.Assembly, "#1");
62 Assert.AreEqual ("ns.type*, " + assembly.FullName, ptr.AssemblyQualifiedName, "#2");
63 Assert.AreEqual ("ns.type*", ptr.FullName, "#4");
64 Assert.AreEqual (module, ptr.Module, "#5");
65 Assert.AreEqual ("ns", ptr.Namespace, "#6");
66 Assert.AreEqual (ptr, ptr.UnderlyingSystemType, "#7");
67 Assert.AreEqual ("type*", ptr.Name, "#8");
72 } catch (NotSupportedException) {}
75 object x = ptr.TypeHandle;
77 } catch (NotSupportedException) {}
81 public void Methods ()
83 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
84 Type ptr = tb.MakePointerType ();
87 ptr.GetInterface ("foo", true);
89 } catch (NotSupportedException) {
96 } catch (NotSupportedException) {
100 Assert.AreEqual (tb, ptr.GetElementType ());
103 ptr.GetEvent ("foo", BindingFlags.Public);
105 } catch (NotSupportedException) {
110 ptr.GetEvents (BindingFlags.Public);
112 } catch (NotSupportedException) {
117 ptr.GetField ("foo", BindingFlags.Public);
119 } catch (NotSupportedException) {
124 ptr.GetFields (BindingFlags.Public);
126 } catch (NotSupportedException) {
131 ptr.GetMembers (BindingFlags.Public);
133 } catch (NotSupportedException) {
138 ptr.GetMethod ("Sort");
140 } catch (NotSupportedException) {
145 ptr.GetMethods (BindingFlags.Public);
147 } catch (NotSupportedException) {
152 ptr.GetNestedType ("bla", BindingFlags.Public);
154 } catch (NotSupportedException) {
159 ptr.GetNestedTypes (BindingFlags.Public);
161 } catch (NotSupportedException) {
166 ptr.GetProperties (BindingFlags.Public);
168 } catch (NotSupportedException) {
173 ptr.GetProperty ("Length");
175 } catch (NotSupportedException) {
180 ptr.GetConstructor (new Type[] { typeof (int) });
182 } catch (NotSupportedException) {
186 TypeAttributes attr = TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Class | TypeAttributes.Public;
187 Assert.AreEqual (attr, ptr.Attributes, "#15");
189 Assert.IsTrue (ptr.HasElementType, "#16");
190 Assert.IsFalse (ptr.IsArray, "#17");
191 Assert.IsFalse (ptr.IsByRef, "#18");
192 Assert.IsFalse (ptr.IsCOMObject, "#19");
193 Assert.IsTrue (ptr.IsPointer, "#20");
194 Assert.IsFalse (ptr.IsPrimitive, "#21");
197 ptr.GetConstructors (BindingFlags.Public);
199 } catch (NotSupportedException) {
204 ptr.InvokeMember ("GetLength", BindingFlags.Public, null, null, null);
206 } catch (NotSupportedException) {
213 } catch (NotSupportedException) {
219 public void GenericTypeMembers ()
221 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
222 Type arr = tb.MakeArrayType ();
225 arr.GetGenericArguments ();
227 } catch (NotSupportedException) {}
230 arr.GetGenericParameterConstraints ();
232 } catch (InvalidOperationException) {}
235 arr.GetGenericTypeDefinition ();
237 } catch (NotSupportedException) {}
239 Assert.IsFalse (arr.ContainsGenericParameters, "#4");
241 var x = arr.GenericParameterAttributes;
243 } catch (NotSupportedException) {}
246 var x = arr.GenericParameterPosition;
248 } catch (InvalidOperationException) {}
250 Assert.IsFalse (arr.ContainsGenericParameters, "#7");
252 Assert.IsFalse (arr.IsGenericParameter, "#8");
253 Assert.IsFalse (arr.IsGenericType, "#9");
254 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
258 public void AttributeValues ()
260 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
261 Assert.AreEqual (TypeAttributes.NotPublic, tb.Attributes, "#1");
263 tb = module.DefineType (MakeName (), TypeAttributes.Public);
264 Assert.AreEqual (TypeAttributes.Public, tb.Attributes, "#2");
266 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
267 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed, tb.Attributes, "#3");
269 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
270 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Abstract, tb.Attributes, "$4");
274 public void AsParamType ()
277 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
278 Type ptr = tb.MakePointerType ();
280 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [1] { ptr });
281 ILGenerator ilgen = mb.GetILGenerator ();
282 ilgen.Emit (OpCodes.Ret);
284 Type res = tb.CreateType ();
286 object o = Activator.CreateInstance (res);
287 //FIXME this crashes the runtime
288 //res.GetMethod ("Test").Invoke (o, new object[1] { null });
292 public void AsLocalVariable ()
295 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
296 Type ptr = tb.MakePointerType ();
298 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [0]);
299 ILGenerator ilgen = mb.GetILGenerator ();
300 ilgen.DeclareLocal (ptr);
301 ilgen.Emit (OpCodes.Ret);
303 Type res = tb.CreateType ();
305 object o = Activator.CreateInstance (res);
306 res.GetMethod ("Test").Invoke (o, null);
310 public void TestEquals ()
312 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
313 Type ptr = tb.MakePointerType ();
314 Type ptr2 = tb.MakePointerType ();
315 Assert.IsTrue (ptr.Equals (ptr), "#2");
319 [Category ("NotWorking")] //two stage type creation makes this fail
320 public void TestEquals2 ()
322 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
323 Type ptr = tb.MakePointerType ();
324 Type ptr2 = tb.MakePointerType ();
325 Assert.IsFalse (ptr.Equals (ptr2), "#1");
329 public void IsSubclassOf ()
331 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
332 Type ptr = tb.MakePointerType ();
333 Assert.IsFalse (ptr.IsSubclassOf (tb), "#1");
334 Assert.IsFalse (ptr.IsSubclassOf (typeof (object[])), "#2");
338 public void IsAssignableFrom ()
340 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
341 Type ptr = tb.MakePointerType ();
342 Assert.IsFalse (ptr.IsAssignableFrom (tb), "#1");
343 Assert.IsFalse (ptr.IsAssignableFrom (typeof (object[])), "#2");
347 [Category ("NotWorking")] //two stage type creation makes this fail
348 public void IsAssignableFrom2 ()
350 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
351 Type ptr = tb.MakePointerType ();
352 Assert.IsFalse (typeof (object[]).IsAssignableFrom (ptr), "#1");
353 Assert.IsFalse (typeof (object).IsAssignableFrom (ptr), "#2");
358 public void GetInterfaceMap ()
360 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
361 Type ptr = tb.MakePointerType ();
363 ptr.GetInterfaceMap (typeof (IEnumerable));
365 } catch (NotSupportedException) {
371 public void IsInstanceOfType ()
373 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
374 Type ptr = tb.MakePointerType ();
375 Assert.IsFalse (ptr.IsInstanceOfType (tb), "#1");
376 Assert.IsFalse (ptr.IsInstanceOfType (null), "#2");
377 Assert.IsFalse (ptr.IsInstanceOfType (new object [1]), "#3");
379 Type t = tb.CreateType ();
380 object obj = Activator.CreateInstance (t);
381 Assert.IsFalse (ptr.IsInstanceOfType (obj), "#4");
385 public void IsGenericTypeDefinition ()
387 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
388 Type ptr = tb.MakePointerType ();
389 Assert.IsFalse (ptr.IsGenericTypeDefinition, "#1");
393 public void IsGenericType ()
395 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
396 Type ptr = tb.MakePointerType ();
397 Assert.IsFalse (ptr.IsGenericType, "#1");
401 public void MakeGenericType ()
403 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
404 Type ptr = tb.MakePointerType ();
406 ptr.MakeGenericType (new Type[] { typeof (string) });
408 } catch (NotSupportedException) {}
412 public void GenericParameterPosition ()
414 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
415 Type ptr = tb.MakePointerType ();
417 int pos = ptr.GenericParameterPosition;
419 } catch (InvalidOperationException) {}
423 public void GenericParameterAttributes ()
425 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
426 Type ptr = tb.MakePointerType ();
428 object attr = ptr.GenericParameterAttributes;
430 } catch (NotSupportedException) {}
434 public void GetGenericParameterConstraints ()
436 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
437 Type ptr = tb.MakePointerType ();
439 ptr.GetGenericParameterConstraints ();
441 } catch (InvalidOperationException) {}
445 public void MakeArrayType ()
447 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
448 Type ptr = tb.MakePointerType ();
449 Type res = ptr.MakeArrayType ();
450 Assert.IsNotNull (res, "#1");
451 Assert.IsTrue (res.IsArray, "#2");
453 res = ptr.MakeArrayType (2);
454 Assert.IsNotNull (res, "#3");
455 Assert.IsTrue (res.IsArray, "#4");
459 public void MakeByRefType ()
461 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
462 Type ptr = tb.MakePointerType ();
463 Type res = ptr.MakeByRefType ();
465 Assert.IsNotNull (res, "#1");
466 Assert.IsTrue (res.IsByRef, "#2");
470 public void MakePointerType ()
472 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
473 Type ptr = tb.MakePointerType ();
474 Type res = ptr.MakePointerType ();
476 Assert.IsNotNull (res, "#1");
477 Assert.IsTrue (res.IsPointer, "#2");
481 public void StructLayoutAttribute ()
483 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
484 Type ptr = tb.MakePointerType ();
486 object x = ptr.StructLayoutAttribute;
488 } catch (NotSupportedException) {}
492 public void ByRefOfGenericTypeParameter ()
494 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
495 var gparam = tb.DefineGenericParameters ("F")[0];
496 Type ptr = gparam.MakePointerType ();
499 ptr.GetGenericArguments ();
501 } catch (NotSupportedException) {}
504 ptr.GetGenericParameterConstraints ();
506 } catch (InvalidOperationException) {}
509 ptr.GetGenericTypeDefinition ();
511 } catch (NotSupportedException) {}
513 Assert.IsTrue (ptr.ContainsGenericParameters, "#4");
515 var x = ptr.GenericParameterAttributes;
517 } catch (NotSupportedException) {}
520 var x = ptr.GenericParameterPosition;
522 } catch (InvalidOperationException) {}
525 Assert.IsFalse (ptr.IsGenericParameter, "#8");
526 Assert.IsFalse (ptr.IsGenericType, "#9");
527 Assert.IsFalse (ptr.IsGenericTypeDefinition, "#10");
530 Assert.AreEqual (TypeAttributes.Public, ptr.Attributes, "#11");
533 var x = ptr.Attributes; //This is because GenericTypeParameterBuilder doesn't support Attributes
535 } catch (NotSupportedException) {}
538 Assert.IsTrue (ptr.HasElementType, "#12");
539 Assert.IsTrue (ptr.IsPointer, "#13");
541 Assert.AreEqual (assembly, ptr.Assembly, "#14");
542 Assert.AreEqual (null, ptr.AssemblyQualifiedName, "#15");
543 //XXX LAMEIMPL this passes on MS even thou it's pretty much very wrong.
544 Assert.AreEqual (typeof (Array), ptr.BaseType, "#16");
545 Assert.AreEqual (null, ptr.FullName, "#17");
546 Assert.AreEqual (module, ptr.Module, "#18");
547 Assert.AreEqual (null, ptr.Namespace, "#19");
548 Assert.AreEqual (ptr, ptr.UnderlyingSystemType, "#20");
549 Assert.AreEqual ("F*", ptr.Name, "#21");
551 Assert.AreEqual (gparam, ptr.GetElementType (), "#22");
557 public class ByrefTypeTest
559 AssemblyBuilder assembly;
560 ModuleBuilder module;
562 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
566 return "internal__type"+ typeCount++;
570 protected void SetUp ()
572 SetUp (AssemblyBuilderAccess.RunAndSave);
575 protected void SetUp (AssemblyBuilderAccess mode)
577 AssemblyName assemblyName = new AssemblyName ();
578 assemblyName.Name = ASSEMBLY_NAME;
581 Thread.GetDomain ().DefineDynamicAssembly (
582 assemblyName, mode, Path.GetTempPath ());
584 module = assembly.DefineDynamicModule ("module1");
589 public void PropertiesValue ()
591 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
592 Type byref = tb.MakeByRefType ();
594 Assert.AreEqual (assembly, byref.Assembly, "#1");
595 Assert.AreEqual ("ns.type&, " + assembly.FullName, byref.AssemblyQualifiedName, "#2");
596 Assert.AreEqual ("ns.type&", byref.FullName, "#4");
597 Assert.AreEqual (module, byref.Module, "#5");
598 Assert.AreEqual ("ns", byref.Namespace, "#6");
599 Assert.AreEqual (byref, byref.UnderlyingSystemType, "#7");
600 Assert.AreEqual ("type&", byref.Name, "#8");
603 object x = byref.GUID;
605 } catch (NotSupportedException) {}
608 object x = byref.TypeHandle;
610 } catch (NotSupportedException) {}
614 public void Methods ()
616 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
617 Type byref = tb.MakeByRefType ();
620 byref.GetInterface ("foo", true);
622 } catch (NotSupportedException) {
627 byref.GetInterfaces ();
629 } catch (NotSupportedException) {
633 Assert.AreEqual (tb, byref.GetElementType ());
636 byref.GetEvent ("foo", BindingFlags.Public);
638 } catch (NotSupportedException) {
643 byref.GetEvents (BindingFlags.Public);
645 } catch (NotSupportedException) {
650 byref.GetField ("foo", BindingFlags.Public);
652 } catch (NotSupportedException) {
657 byref.GetFields (BindingFlags.Public);
659 } catch (NotSupportedException) {
664 byref.GetMembers (BindingFlags.Public);
666 } catch (NotSupportedException) {
671 byref.GetMethod ("Sort");
673 } catch (NotSupportedException) {
678 byref.GetMethods (BindingFlags.Public);
680 } catch (NotSupportedException) {
685 byref.GetNestedType ("bla", BindingFlags.Public);
687 } catch (NotSupportedException) {
692 byref.GetNestedTypes (BindingFlags.Public);
694 } catch (NotSupportedException) {
699 byref.GetProperties (BindingFlags.Public);
701 } catch (NotSupportedException) {
706 byref.GetProperty ("Length");
708 } catch (NotSupportedException) {
713 byref.GetConstructor (new Type[] { typeof (int) });
715 } catch (NotSupportedException) {
719 TypeAttributes attr = TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Class | TypeAttributes.Public;
720 Assert.AreEqual (attr, byref.Attributes, "#15");
722 Assert.IsTrue (byref.HasElementType, "#16");
723 Assert.IsFalse (byref.IsArray, "#17");
724 Assert.IsTrue (byref.IsByRef, "#18");
725 Assert.IsFalse (byref.IsCOMObject, "#19");
726 Assert.IsFalse (byref.IsPointer, "#20");
727 Assert.IsFalse (byref.IsPrimitive, "#21");
730 byref.GetConstructors (BindingFlags.Public);
732 } catch (NotSupportedException) {
737 byref.InvokeMember ("GetLength", BindingFlags.Public, null, null, null);
739 } catch (NotSupportedException) {
744 byref.GetArrayRank ();
746 } catch (NotSupportedException) {
752 public void AttributeValues ()
754 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
755 Assert.AreEqual (TypeAttributes.NotPublic, tb.Attributes, "#1");
757 tb = module.DefineType (MakeName (), TypeAttributes.Public);
758 Assert.AreEqual (TypeAttributes.Public, tb.Attributes, "#2");
760 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
761 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed, tb.Attributes, "#3");
763 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
764 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Abstract, tb.Attributes, "$4");
768 public void AsParamType ()
771 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
772 Type byref = tb.MakeByRefType ();
774 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [1] { byref });
775 ILGenerator ilgen = mb.GetILGenerator ();
776 ilgen.Emit (OpCodes.Ret);
778 Type res = tb.CreateType ();
780 object o = Activator.CreateInstance (res);
781 res.GetMethod ("Test").Invoke (o, new object[1] { null });
785 public void AsLocalVariable ()
788 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
789 Type byref = tb.MakeByRefType ();
791 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [0]);
792 ILGenerator ilgen = mb.GetILGenerator ();
793 ilgen.DeclareLocal (byref);
794 ilgen.Emit (OpCodes.Ret);
796 Type res = tb.CreateType ();
798 object o = Activator.CreateInstance (res);
799 res.GetMethod ("Test").Invoke (o, null);
803 public void TestEquals ()
805 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
806 Type byref = tb.MakeByRefType ();
807 Type byref2 = tb.MakeByRefType ();
808 Assert.IsTrue (byref.Equals (byref), "#1");
812 [Category ("NotWorking")] //two stage type creation makes this fail
813 public void TestEquals2 ()
815 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
816 Type byref = tb.MakeByRefType ();
817 Type byref2 = tb.MakeByRefType ();
818 Assert.IsFalse (byref.Equals (byref2), "#1");
822 public void IsSubclassOf ()
824 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
825 Type byref = tb.MakeByRefType ();
826 Assert.IsFalse (byref.IsSubclassOf (tb), "#1");
827 Assert.IsFalse (byref.IsSubclassOf (typeof (object[])), "#2");
831 public void IsAssignableFrom ()
833 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
834 Type byref = tb.MakeByRefType ();
835 Assert.IsFalse (byref.IsAssignableFrom (tb), "#1");
836 Assert.IsFalse (byref.IsAssignableFrom (typeof (object[])), "#2");
840 [Category ("NotWorking")] //two stage type creation makes this fail
841 public void IsAssignableFrom2 ()
843 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
844 Type byref = tb.MakeByRefType ();
845 Assert.IsFalse (typeof (object[]).IsAssignableFrom (byref), "#1");
846 Assert.IsFalse (typeof (object).IsAssignableFrom (byref), "#2");
850 public void GetInterfaceMap ()
852 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
853 Type byref = tb.MakeByRefType ();
855 byref.GetInterfaceMap (typeof (IEnumerable));
857 } catch (NotSupportedException) {
863 public void IsInstanceOfType ()
865 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
866 Type byref = tb.MakeByRefType ();
867 Assert.IsFalse (byref.IsInstanceOfType (tb), "#1");
868 Assert.IsFalse (byref.IsInstanceOfType (null), "#2");
869 Assert.IsFalse (byref.IsInstanceOfType (new object [1]), "#3");
871 Type t = tb.CreateType ();
872 object obj = Activator.CreateInstance (t);
873 Assert.IsFalse (byref.IsInstanceOfType (obj), "#4");
877 public void IsGenericTypeDefinition ()
879 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
880 Type byref = tb.MakeByRefType ();
881 Assert.IsFalse (byref.IsGenericTypeDefinition, "#1");
885 public void IsGenericType ()
887 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
888 Type byref = tb.MakeByRefType ();
889 Assert.IsFalse (byref.IsGenericType, "#1");
893 public void MakeGenericType ()
895 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
896 Type byref = tb.MakeByRefType ();
898 byref.MakeGenericType (new Type[] { typeof (string) });
900 } catch (NotSupportedException) {}
904 public void GenericParameterPosition ()
906 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
907 Type byref = tb.MakeByRefType ();
909 int pos = byref.GenericParameterPosition;
911 } catch (InvalidOperationException) {}
915 public void GenericParameterAttributes ()
917 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
918 Type byref = tb.MakeByRefType ();
920 object attr = byref.GenericParameterAttributes;
922 } catch (NotSupportedException) {}
926 public void GetGenericParameterConstraints ()
928 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
929 Type byref = tb.MakeByRefType ();
931 byref.GetGenericParameterConstraints ();
933 } catch (InvalidOperationException) {}
937 public void MakeArrayType ()
939 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
940 Type byref = tb.MakeByRefType ();
942 byref.MakeArrayType ();
944 } catch (ArgumentException) {};
946 byref.MakeArrayType (2);
948 } catch (ArgumentException) {};
952 public void MakeByRefType ()
954 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
955 Type byref = tb.MakeByRefType ();
957 byref.MakeByRefType ();
959 } catch (ArgumentException) {}
963 public void MakePointerType ()
965 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
966 Type byref = tb.MakeByRefType ();
968 byref.MakePointerType ();
970 } catch (ArgumentException) {}
974 public void StructLayoutAttribute ()
976 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
977 Type byref = tb.MakeByRefType ();
979 object x = byref.StructLayoutAttribute;
981 } catch (NotSupportedException) {}
985 [Category ("NotDotNet")]
986 public void ByRefOfAttriburesUnderCompilerContext ()
988 SetUp (AssemblyBuilderAccess.RunAndSave | (AssemblyBuilderAccess)0x800);
990 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
991 var gparam = tb.DefineGenericParameters ("F")[0];
992 Type byref = gparam.MakeByRefType ();
994 tb = module.DefineType (MakeName (), TypeAttributes.Public);
995 Assert.AreEqual (TypeAttributes.Public , byref.Attributes, "#1");
1000 public void ByRefOfGenericTypeParameter ()
1002 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1003 var gparam = tb.DefineGenericParameters ("F")[0];
1004 Type byref = gparam.MakeByRefType ();
1007 byref.GetGenericArguments ();
1009 } catch (NotSupportedException) {}
1012 byref.GetGenericParameterConstraints ();
1014 } catch (InvalidOperationException) {}
1017 byref.GetGenericTypeDefinition ();
1019 } catch (NotSupportedException) {}
1021 Assert.IsTrue (byref.ContainsGenericParameters, "#4");
1023 var x = byref.GenericParameterAttributes;
1025 } catch (NotSupportedException) {}
1028 var x = byref.GenericParameterPosition;
1030 } catch (InvalidOperationException) {}
1033 Assert.IsFalse (byref.IsGenericParameter, "#8");
1034 Assert.IsFalse (byref.IsGenericType, "#9");
1035 Assert.IsFalse (byref.IsGenericTypeDefinition, "#10");
1039 Assert.AreEqual (TypeAttributes.Public, byref.Attributes, "#11");
1042 var x = byref.Attributes; //This is because GenericTypeParameterBuilder doesn't support Attributes
1043 Assert.Fail ("#11");
1044 } catch (NotSupportedException) {}
1047 Assert.IsTrue (byref.HasElementType, "#12");
1048 Assert.IsTrue (byref.IsByRef, "#13");
1050 Assert.AreEqual (assembly, byref.Assembly, "#14");
1051 Assert.AreEqual (null, byref.AssemblyQualifiedName, "#15");
1052 //XXX LAMEIMPL this passes on MS even thou it's pretty much very wrong.
1053 Assert.AreEqual (typeof (Array), byref.BaseType, "#16");
1054 Assert.AreEqual (null, byref.FullName, "#17");
1055 Assert.AreEqual (module, byref.Module, "#18");
1056 Assert.AreEqual (null, byref.Namespace, "#19");
1057 Assert.AreEqual (byref, byref.UnderlyingSystemType, "#20");
1058 Assert.AreEqual ("F&", byref.Name, "#21");
1060 Assert.AreEqual (gparam, byref.GetElementType (), "#22");
1065 public class ArrayTypeTest
1067 AssemblyBuilder assembly;
1068 ModuleBuilder module;
1070 static string ASSEMBLY_NAME = "MonoTests.System.Reflection.Emit.TypeBuilderTest";
1074 return "internal__type"+ typeCount++;
1079 protected void SetUp ()
1081 SetUp (AssemblyBuilderAccess.RunAndSave);
1084 protected void SetUp (AssemblyBuilderAccess mode)
1086 AssemblyName assemblyName = new AssemblyName ();
1087 assemblyName.Name = ASSEMBLY_NAME;
1090 Thread.GetDomain ().DefineDynamicAssembly (
1091 assemblyName, mode, Path.GetTempPath ());
1093 module = assembly.DefineDynamicModule ("module1");
1098 public void OneDimMultiDimentionArray ()
1100 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
1102 Type arr1 = tb.MakeArrayType ();
1103 Type arr2 = tb.MakeArrayType (1);
1104 Type arr3 = arr1.MakeArrayType (1);
1106 Assert.AreEqual ("type[]", arr1.Name, "#1");
1107 Assert.AreEqual ("type[*]", arr2.Name, "#2");
1108 Assert.AreEqual ("type[][*]", arr3.Name, "#3");
1110 var gparam = tb.DefineGenericParameters ("F")[0];
1111 Type arr4 = gparam.MakeArrayType ();
1112 Type arr5 = gparam.MakeArrayType (1);
1114 Assert.AreEqual ("F[]", arr4.Name, "#4");
1115 Assert.AreEqual ("F[*]", arr5.Name, "#5");
1117 var eb = module.DefineEnum ("enum", TypeAttributes.Public, tb);
1118 Type arr6 = eb.MakeArrayType ();
1119 Type arr7 = eb.MakeArrayType (1);
1121 Assert.AreEqual ("enum[]", arr6.Name, "#6");
1122 Assert.AreEqual ("enum[*]", arr7.Name, "#7");
1126 public void PropertiesValue ()
1128 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
1129 Type arr = tb.MakeArrayType ();
1131 Assert.AreEqual (assembly, arr.Assembly, "#1");
1132 Assert.AreEqual ("ns.type[], " + assembly.FullName, arr.AssemblyQualifiedName, "#2");
1133 Assert.AreEqual (typeof (Array), arr.BaseType, "#3");
1134 Assert.AreEqual ("ns.type[]", arr.FullName, "#4");
1135 Assert.AreEqual (module, arr.Module, "#5");
1136 Assert.AreEqual ("ns", arr.Namespace, "#6");
1137 Assert.AreEqual (arr, arr.UnderlyingSystemType, "#7");
1138 Assert.AreEqual ("type[]", arr.Name, "#8");
1141 object x = arr.GUID;
1143 } catch (NotSupportedException) {}
1146 object x = arr.TypeHandle;
1147 Assert.Fail ("#10");
1148 } catch (NotSupportedException) {}
1152 public void Methods ()
1154 TypeBuilder tb = module.DefineType ("ns.type", TypeAttributes.Public);
1155 Type arr = tb.MakeArrayType ();
1158 arr.GetInterface ("foo", true);
1160 } catch (NotSupportedException) {
1165 arr.GetInterfaces ();
1167 } catch (NotSupportedException) {
1171 Assert.AreEqual (tb, arr.GetElementType ());
1174 arr.GetEvent ("foo", BindingFlags.Public);
1176 } catch (NotSupportedException) {
1181 arr.GetEvents (BindingFlags.Public);
1183 } catch (NotSupportedException) {
1188 arr.GetField ("foo", BindingFlags.Public);
1190 } catch (NotSupportedException) {
1195 arr.GetFields (BindingFlags.Public);
1197 } catch (NotSupportedException) {
1202 arr.GetMembers (BindingFlags.Public);
1204 } catch (NotSupportedException) {
1209 arr.GetMethod ("Sort");
1211 } catch (NotSupportedException) {
1216 arr.GetMethods (BindingFlags.Public);
1218 } catch (NotSupportedException) {
1223 arr.GetNestedType ("bla", BindingFlags.Public);
1224 Assert.Fail ("#10");
1225 } catch (NotSupportedException) {
1230 arr.GetNestedTypes (BindingFlags.Public);
1231 Assert.Fail ("#11");
1232 } catch (NotSupportedException) {
1237 arr.GetProperties (BindingFlags.Public);
1238 Assert.Fail ("#12");
1239 } catch (NotSupportedException) {
1244 arr.GetProperty ("Length");
1245 Assert.Fail ("#13");
1246 } catch (NotSupportedException) {
1251 arr.GetConstructor (new Type[] { typeof (int) });
1252 Assert.Fail ("#14");
1253 } catch (NotSupportedException) {
1257 TypeAttributes attr = TypeAttributes.AutoLayout | TypeAttributes.AnsiClass | TypeAttributes.Class | TypeAttributes.Public;
1258 Assert.AreEqual (attr, arr.Attributes, "#15");
1260 Assert.IsTrue (arr.HasElementType, "#16");
1261 Assert.IsTrue (arr.IsArray, "#17");
1262 Assert.IsFalse (arr.IsByRef, "#18");
1263 Assert.IsFalse (arr.IsCOMObject, "#19");
1264 Assert.IsFalse (arr.IsPointer, "#20");
1265 Assert.IsFalse (arr.IsPrimitive, "#21");
1268 arr.GetConstructors (BindingFlags.Public);
1269 Assert.Fail ("#22");
1270 } catch (NotSupportedException) {
1275 arr.InvokeMember ("GetLength", BindingFlags.Public, null, null, null);
1276 Assert.Fail ("#23");
1277 } catch (NotSupportedException) {
1283 public void AttributeValues ()
1285 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
1286 Assert.AreEqual (TypeAttributes.NotPublic, tb.Attributes, "#1");
1288 tb = module.DefineType (MakeName (), TypeAttributes.Public);
1289 Assert.AreEqual (TypeAttributes.Public, tb.Attributes, "#2");
1291 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
1292 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed, tb.Attributes, "#3");
1294 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
1295 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Abstract, tb.Attributes, "$4");
1299 [Category ("NotDotNet")]
1300 public void AttributeValuesUnderCompilerContext ()
1302 SetUp (AssemblyBuilderAccess.RunAndSave | (AssemblyBuilderAccess)0x800);
1304 TypeAttributes arrayAttr = TypeAttributes.Sealed | TypeAttributes.Serializable;
1306 TypeBuilder tb = module.DefineType (MakeName (), TypeAttributes.NotPublic);
1307 Assert.AreEqual (TypeAttributes.NotPublic | arrayAttr, tb.MakeArrayType ().Attributes, "#1");
1309 tb = module.DefineType (MakeName (), TypeAttributes.Public);
1310 Assert.AreEqual (TypeAttributes.Public | arrayAttr, tb.MakeArrayType ().Attributes, "#2");
1312 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Serializable | TypeAttributes.Sealed);
1313 Assert.AreEqual (TypeAttributes.Public | arrayAttr, tb.MakeArrayType ().Attributes, "#3");
1315 tb = module.DefineType (MakeName (), TypeAttributes.Public | TypeAttributes.Abstract);
1316 Assert.AreEqual (TypeAttributes.Public | arrayAttr, tb.MakeArrayType ().Attributes, "$4");
1320 public void AsReturnType ()
1323 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1324 Type arr = tb.MakeArrayType ();
1326 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, arr, new Type [0]);
1327 ILGenerator ilgen = mb.GetILGenerator ();
1328 ilgen.Emit (OpCodes.Ldnull);
1329 ilgen.Emit (OpCodes.Ret);
1331 Type res = tb.CreateType ();
1333 object o = Activator.CreateInstance (res);
1334 res.GetMethod ("Test").Invoke (o, null);
1338 public void AsParamType ()
1341 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1342 Type arr = tb.MakeArrayType ();
1344 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, typeof (void), new Type [1] { arr });
1345 ILGenerator ilgen = mb.GetILGenerator ();
1346 ilgen.Emit (OpCodes.Ret);
1348 Type res = tb.CreateType ();
1350 object o = Activator.CreateInstance (res);
1351 res.GetMethod ("Test").Invoke (o, new object[1] { null });
1355 public void AsLocalVariable ()
1358 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1359 Type arr = tb.MakeArrayType ();
1361 MethodBuilder mb = tb.DefineMethod ("Test", MethodAttributes.Public, arr, new Type [0]);
1362 ILGenerator ilgen = mb.GetILGenerator ();
1363 ilgen.DeclareLocal (arr);
1364 ilgen.Emit (OpCodes.Ldnull);
1365 ilgen.Emit (OpCodes.Stloc_0);
1366 ilgen.Emit (OpCodes.Ldloc_0);
1367 ilgen.Emit (OpCodes.Ret);
1369 Type res = tb.CreateType ();
1371 object o = Activator.CreateInstance (res);
1372 res.GetMethod ("Test").Invoke (o, null);
1376 public void TestEquals ()
1378 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1379 Type arr = tb.MakeArrayType ();
1380 Type arr2 = tb.MakeArrayType ();
1381 Assert.IsTrue (arr.Equals (arr), "#1");
1385 [Category ("NotWorking")] //two stage type creation makes this fail
1386 public void TestEquals2 ()
1388 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1389 Type arr = tb.MakeArrayType ();
1390 Type arr2 = tb.MakeArrayType ();
1391 Assert.IsFalse (arr.Equals (arr2), "#1");
1395 public void IsSubclassOf ()
1397 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1398 Type arr = tb.MakeArrayType ();
1399 Assert.IsFalse (arr.IsSubclassOf (tb), "#1");
1400 Assert.IsFalse (arr.IsSubclassOf (typeof (object[])), "#2");
1404 public void IsAssignableFrom ()
1406 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1407 Type arr = tb.MakeArrayType ();
1408 Assert.IsFalse (arr.IsAssignableFrom (tb), "#1");
1409 Assert.IsFalse (arr.IsAssignableFrom (typeof (object[])), "#2");
1413 [Category ("NotWorking")] //two stage type creation makes this fail
1414 public void IsAssignableFrom2 ()
1416 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1417 Type arr = tb.MakeArrayType ();
1418 Assert.IsFalse (typeof (object[]).IsAssignableFrom (arr), "#1");
1419 Assert.IsFalse (typeof (object).IsAssignableFrom (arr), "#2");
1423 public void GetInterfaceMap ()
1425 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1426 Type arr = tb.MakeArrayType ();
1428 arr.GetInterfaceMap (typeof (IEnumerable));
1430 } catch (NotSupportedException) {
1436 public void IsInstanceOfType ()
1438 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1439 Type arr = tb.MakeArrayType ();
1440 Assert.IsFalse (arr.IsInstanceOfType (tb), "#1");
1441 Assert.IsFalse (arr.IsInstanceOfType (null), "#2");
1442 Assert.IsFalse (arr.IsInstanceOfType (new object [1]), "#3");
1444 Type t = tb.CreateType ();
1445 object obj = Array.CreateInstance (t, 10);
1446 Assert.IsFalse (arr.IsInstanceOfType (obj), "#4");
1450 public void IsGenericTypeDefinition ()
1452 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1453 Type arr = tb.MakeArrayType ();
1454 Assert.IsFalse (arr.IsGenericTypeDefinition, "#1");
1458 public void IsGenericType ()
1460 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1461 Type arr = tb.MakeArrayType ();
1462 Assert.IsFalse (arr.IsGenericType, "#1");
1466 public void MakeGenericType ()
1468 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1469 Type arr = tb.MakeArrayType ();
1471 arr.MakeGenericType (new Type[] { typeof (string) });
1473 } catch (NotSupportedException) {}
1477 public void GenericParameterPosition ()
1479 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1480 Type arr = tb.MakeArrayType ();
1482 int pos = arr.GenericParameterPosition;
1484 } catch (InvalidOperationException) {}
1488 public void GenericParameterAttributes ()
1490 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1491 Type arr = tb.MakeArrayType ();
1493 object attr = arr.GenericParameterAttributes;
1495 } catch (NotSupportedException) {}
1499 public void GetGenericParameterConstraints ()
1501 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1502 Type arr = tb.MakeArrayType ();
1504 arr.GetGenericParameterConstraints ();
1506 } catch (InvalidOperationException) {}
1510 public void MakeArrayType ()
1512 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1513 Type arr = tb.MakeArrayType ();
1514 Type res = arr.MakeArrayType ();
1515 Assert.IsNotNull (res, "#1");
1516 Assert.IsTrue (res.IsArray, "#2");
1518 res = arr.MakeArrayType (2);
1519 Assert.IsNotNull (res, "#3");
1520 Assert.IsTrue (res.IsArray, "#4");
1524 public void MakeByRefType ()
1526 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1527 Type arr = tb.MakeArrayType ();
1528 Type res = arr.MakeByRefType ();
1530 Assert.IsNotNull (res, "#1");
1531 Assert.IsTrue (res.IsByRef, "#2");
1535 public void MakePointerType ()
1537 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1538 Type arr = tb.MakeArrayType ();
1539 Type res = arr.MakePointerType ();
1541 Assert.IsNotNull (res, "#1");
1542 Assert.IsTrue (res.IsPointer, "#2");
1546 public void StructLayoutAttribute ()
1548 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1549 Type arr = tb.MakeArrayType ();
1551 object x = arr.StructLayoutAttribute;
1553 } catch (NotSupportedException) {}
1557 public void GetArrayRank ()
1559 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1561 Assert.AreEqual (1, tb.MakeArrayType ().GetArrayRank (), "#1");
1562 Assert.AreEqual (2, tb.MakeArrayType (2).GetArrayRank (), "#2");
1566 public void GenericTypeMembers ()
1568 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1569 Type arr = tb.MakeArrayType ();
1572 arr.GetGenericArguments ();
1574 } catch (NotSupportedException) {}
1577 arr.GetGenericParameterConstraints ();
1579 } catch (InvalidOperationException) {}
1582 arr.GetGenericTypeDefinition ();
1584 } catch (NotSupportedException) {}
1586 Assert.IsFalse (arr.ContainsGenericParameters, "#4");
1588 var x = arr.GenericParameterAttributes;
1590 } catch (NotSupportedException) {}
1593 var x = arr.GenericParameterPosition;
1595 } catch (InvalidOperationException) {}
1597 Assert.IsFalse (arr.ContainsGenericParameters, "#7");
1599 Assert.IsFalse (arr.IsGenericParameter, "#8");
1600 Assert.IsFalse (arr.IsGenericType, "#9");
1601 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
1605 public void ArrayAsGenericArgumentOfNonSreType ()
1607 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1609 Type arr = tb.MakeArrayType ();
1610 Type inst = typeof (Foo<>).MakeGenericType (arr);
1612 MethodBuilder mb = tb.DefineMethod ("Main", MethodAttributes.Public | MethodAttributes.Static, typeof (object), Type.EmptyTypes);
1614 ILGenerator ilgen = mb.GetILGenerator ();
1615 ilgen.Emit (OpCodes.Ldtoken, inst);
1616 ilgen.Emit (OpCodes.Call, typeof (Type).GetMethod ("GetTypeFromHandle"));
1617 ilgen.Emit (OpCodes.Ret);
1619 Type res = tb.CreateType ();
1620 Type expected = typeof (Foo<>).MakeGenericType (res.MakeArrayType ());
1622 Assert.AreEqual (expected, res.GetMethod ("Main").Invoke (null, null), "#1");
1623 Assert.IsNotNull (Activator.CreateInstance (expected), "#2");
1628 public void GenericTypeMembersOfGenericTypeParam ()
1630 TypeBuilder tb = module.DefineType ("dd.test", TypeAttributes.Public);
1631 var gparam = tb.DefineGenericParameters ("F")[0];
1632 Type arr = gparam.MakeArrayType ();
1635 arr.GetGenericArguments ();
1637 } catch (NotSupportedException) {}
1640 arr.GetGenericParameterConstraints ();
1642 } catch (InvalidOperationException) {}
1645 arr.GetGenericTypeDefinition ();
1647 } catch (NotSupportedException) {}
1649 Assert.IsTrue (arr.ContainsGenericParameters, "#4");
1651 var x = arr.GenericParameterAttributes;
1653 } catch (NotSupportedException) {}
1656 var x = arr.GenericParameterPosition;
1658 } catch (InvalidOperationException) {}
1661 Assert.IsFalse (arr.IsGenericParameter, "#8");
1662 Assert.IsFalse (arr.IsGenericType, "#9");
1663 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
1666 Assert.AreEqual (TypeAttributes.Public, arr.Attributes, "#11");
1669 var x = arr.Attributes; //This is because GenericTypeParameterBuilder doesn't support Attributes
1670 Assert.Fail ("#11");
1671 } catch (NotSupportedException) {}
1674 Assert.IsTrue (arr.HasElementType, "#12");
1675 Assert.IsTrue (arr.IsArray, "#13");
1677 Assert.AreEqual (assembly, arr.Assembly, "#14");
1678 Assert.AreEqual (null, arr.AssemblyQualifiedName, "#15");
1679 Assert.AreEqual (typeof (Array), arr.BaseType, "#16");
1680 Assert.AreEqual (null, arr.FullName, "#17");
1681 Assert.AreEqual (module, arr.Module, "#18");
1682 Assert.AreEqual (null, arr.Namespace, "#19");
1683 Assert.AreEqual (arr, arr.UnderlyingSystemType, "#20");
1684 Assert.AreEqual ("F[]", arr.Name, "#21");
1686 Assert.AreEqual (gparam, arr.GetElementType (), "#22");
1690 public void GenericTypeMembersOfEnum ()
1692 var eb = module.DefineEnum ("dd.enum", TypeAttributes.Public, typeof (int));
1693 Type arr = eb.MakeArrayType ();
1696 arr.GetGenericArguments ();
1698 } catch (NotSupportedException) {}
1701 arr.GetGenericParameterConstraints ();
1703 } catch (InvalidOperationException) {}
1706 arr.GetGenericTypeDefinition ();
1708 } catch (NotSupportedException) {}
1710 Assert.IsFalse (arr.ContainsGenericParameters, "#4");
1712 var x = arr.GenericParameterAttributes;
1714 } catch (NotSupportedException) {}
1717 var x = arr.GenericParameterPosition;
1719 } catch (InvalidOperationException) {}
1722 Assert.IsFalse (arr.IsGenericParameter, "#8");
1723 Assert.IsFalse (arr.IsGenericType, "#9");
1724 Assert.IsFalse (arr.IsGenericTypeDefinition, "#10");
1726 Assert.AreEqual (TypeAttributes.Public | TypeAttributes.Sealed, arr.Attributes, "#11");
1728 Assert.IsTrue (arr.HasElementType, "#12");
1729 Assert.IsTrue (arr.IsArray, "#13");
1731 Assert.AreEqual (assembly, arr.Assembly, "#14");
1732 Assert.AreEqual ("dd.enum[], MonoTests.System.Reflection.Emit.TypeBuilderTest, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", arr.AssemblyQualifiedName, "#15");
1733 Assert.AreEqual (typeof (Array), arr.BaseType, "#16");
1734 Assert.AreEqual ("dd.enum[]", arr.FullName, "#17");
1735 Assert.AreEqual (module, arr.Module, "#18");
1736 Assert.AreEqual ("dd", arr.Namespace, "#19");
1737 Assert.AreEqual (arr, arr.UnderlyingSystemType, "#20");
1738 Assert.AreEqual ("enum[]", arr.Name, "#21");
1740 Assert.AreEqual (eb, arr.GetElementType (), "#22");