Added/Updated .gitignore files
[mono.git] / mono / tests / custom-attr.cs
index 7e8d50dd41d7a743a52d2b898e48f0469755f2a0..217a2ebaffe7117db1b2b6a9c8aceeaef82202db 100644 (file)
@@ -32,6 +32,23 @@ namespace Test {
 
                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)]
@@ -61,6 +78,34 @@ namespace Test {
                                        }
                                }
                        }
+
+                       //
+                       // 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;
+
+                       if (!typeof (Y).IsDefined (typeof (ZInterface), true))
+                               return 6;
+
+                       // Test that synthetic methods have no attributes
+                       if (typeof(int[,]).GetConstructor (new Type [] { typeof (int), typeof (int) }).GetCustomAttributes (true).Length != 0)
+                               return 7;
+
                        return 0;
                }
        }