X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Ftests%2Fcustom-attr.cs;h=40dbae17ddb9c93060eeef27c4b87577892b720a;hb=f73e83935184e83818e67e111cce69aa0d4ff537;hp=4fa114186a935cd011e73e70ef60994841d578b3;hpb=af53eeba055bbe184dd05ec4a8934e7a38c70c0c;p=mono.git diff --git a/mono/tests/custom-attr.cs b/mono/tests/custom-attr.cs index 4fa114186a9..40dbae17ddb 100644 --- a/mono/tests/custom-attr.cs +++ b/mono/tests/custom-attr.cs @@ -17,8 +17,42 @@ namespace Test { ival = blah; } } + + public class My3Attribute : Attribute { + char[] array_val; + + public char[] Prop { + get { + return array_val; + } + set { + array_val = value; + } + } + + public char[] Prop2; + } + + class XAttribute : Attribute { + public XAttribute () + { + throw new Exception ("X"); + } + } + + interface ZInterface { + } + + class ZAttribute : Attribute, ZInterface { + } + + [X, Z, Serializable] + class Y { + } + [My("testclass")] [My2("testclass", 22)] + [My3(Prop = new char [] { 'A', 'B', 'C', 'D' }, Prop2 = new char [] { 'A', 'D' })] public class Test { static public int Main() { System.Reflection.MemberInfo info = typeof (Test); @@ -26,11 +60,45 @@ namespace Test { for (int i = 0; i < attributes.Length; i ++) { System.Console.WriteLine(attributes[i]); } - if (attributes.Length != 2) + if (attributes.Length != 3) return 1; - MyAttribute attr = (MyAttribute) attributes [0]; - if (attr.val != "testclass") - return 2; + for (int i = 0; i < attributes.Length; ++i) { + if (attributes [i] is MyAttribute) { + if (((MyAttribute)attributes [i]).val != "testclass") + return 2; + } + if (attributes [i] is My3Attribute) { + if (new String (((My3Attribute)attributes [i]).Prop) != "ABCD") { + Console.WriteLine (new String (((My3Attribute)attributes [i]).Prop)); + return 3; + } + if (new String (((My3Attribute)attributes [i]).Prop2) != "AD") { + Console.WriteLine (new String (((My3Attribute)attributes [i]).Prop2)); + return 4; + } + } + } + + // + // Test that requesting a specific custom attributes does not + // create all the others + // + + typeof (Y).IsDefined (typeof (ZAttribute), true); + typeof (Y).IsDefined (typeof (XAttribute), true); + + typeof (Y).GetCustomAttributes (typeof (ZAttribute), true); + + try { + typeof (Y).GetCustomAttributes (true); + return 4; + } + catch { + } + + if (typeof (Y).GetCustomAttributes (typeof (ZInterface), true).Length != 1) + return 5; + return 0; } }