[msvc] Update csproj files
[mono.git] / mcs / tests / test-102.cs
index 51c9647e0f25b5ce31b019cf590912a8355d5e13..1c82586d3530ec41798fb2201b931603eb123335 100644 (file)
@@ -9,7 +9,7 @@ namespace N1 {
        [AttributeUsage (AttributeTargets.All)]
        public class MineAttribute : Attribute {
 
-               string name;
+               public string name;
                
                public MineAttribute (string s)
                {
@@ -17,17 +17,67 @@ namespace N1 {
                }
        }
 
-       interface A {
-               [Mine ("hello")]
-               void Hello ();
+        [AttributeUsage (AttributeTargets.ReturnValue)]
+       public class ReturnAttribute : Attribute {
+
+               public string name;
+               
+               public ReturnAttribute (string s)
+               {
+                       name = s;
+               }
+       }
+
+       public interface TestInterface {
+               void Hello ([Mine ("param")] int i);
        }       
+
        public class Foo {      
                
                int i;
                
-               [return : Mine ("Foo")] 
+               [Mine ("Foo")]
+               [return: Return ("Bar")]        
                public static int Main ()
                {
+                       Type t = typeof (Foo);
+                       foreach (MemberInfo m in t.GetMembers ()){
+                               if (m.Name == "Main"){
+                                       MethodInfo mb = (MethodInfo) m;
+
+                                       ICustomAttributeProvider p = mb.ReturnTypeCustomAttributes;
+                                       object [] ret_attrs = p.GetCustomAttributes (false);
+
+                                       if (ret_attrs.Length != 1){
+                                               Console.WriteLine ("Got more than one return attribute");
+                                               return 1;
+                                       }
+                                       if (!(ret_attrs [0] is ReturnAttribute)){
+                                               Console.WriteLine ("Dit not get a MineAttribute");
+                                               return 2;
+                                       }
+
+                                       ReturnAttribute ma = (ReturnAttribute) ret_attrs [0];
+                                       if (ma.name != "Bar"){
+                                               Console.WriteLine ("The return attribute is not Bar");
+                                               return 2;
+                                       }
+                               }
+                       }
+
+                        Type ifType = typeof (TestInterface);
+                        
+                        MethodInfo method = ifType.GetMethod ("Hello", 
+                                                              BindingFlags.Public | BindingFlags.Instance);
+                        
+                        ParameterInfo[] parameters = method.GetParameters();
+                        ParameterInfo param = parameters [0];
+                        
+                        object[] testAttrs = param.GetCustomAttributes (true);
+                        
+                        if (testAttrs.Length != 1)
+                                return 1;
+                        
                        return 0;
                }
        }