[xbuild] Add support for Before/AfterTargets.
[mono.git] / mcs / tests / dtest-007.cs
index b374fc03befb42eaa046b3e225af680faad74db8..ec92b623dbf4639437df32248944c3eb0d267e40 100644 (file)
@@ -55,6 +55,11 @@ class Class
        {
                return value;
        }
+       
+       public int Method (int a, byte b)
+       {
+               return a * b;
+       }
 
        public void MethodInOut (ref int refValue, out string outValue)
        {
@@ -70,6 +75,20 @@ class Class
        {
                return i [0] * i.Length;
        }
+       
+       public static void ArglistMethod (__arglist)
+       {
+       }
+}
+
+class EventClass
+{
+       internal event Func<int> OutEvent;
+       
+       public int CallEvent ()
+       {
+               return OutEvent ();
+       }
 }
 
 class Tester
@@ -91,6 +110,10 @@ class Tester
                        // passed
                }
        }
+       
+       event Func<int> e;
+       int field;
+
 
 #pragma warning disable 169
 
@@ -122,12 +145,19 @@ class Tester
                Action<bool> f2 = Class.GenericVoid;
                d = f2;
                d (true);
+               
+               Func<string, int> f3 = (s) => 3;
+               d = f3;
+               d ("go");
        }
 
        void InvokeMember ()
        {
                dynamic d = new Class ();
                Assert ("vv", d.Method ("vv"), "#1");
+               
+               byte b = 2;
+               Assert (6, d.Method (b: b++, a: b), "#1a");
 
                var arg1 = 1;
                var arg2 = "a";
@@ -135,6 +165,15 @@ class Tester
 
                d = 2;
                Assert (2, Class.StaticMethod (d), "#2");
+               Class.StaticMethod (d); 
+       }
+       
+       void InvokeMember_Error ()
+       {
+               AssertError (() => {
+                               dynamic d_arg = "a";
+                               Class.ArglistMethod (d_arg);
+                       }, "#1");
        }
 
        void InvokeConstructor ()
@@ -148,6 +187,24 @@ class Tester
                var r2 = new D2 (d);
        }
 
+       void IsEvent ()
+       {
+               dynamic d = this;
+               d.e += new Func<int> (() => 3);
+               Assert (3, d.e (), "#1");
+               
+               d.field += 5;
+               Assert (5, d.field, "#2");
+               
+               int r = d.field += 7;
+               Assert (12, r, "#2a");
+               Assert (12, d.field, "#2b");
+               
+               d = new EventClass ();
+               d.OutEvent += new Func<int> (() => 100);
+               Assert (100, d.CallEvent (), "#3");
+       }
+
        void MemberGetTest ()
        {
                dynamic d = new Class ();
@@ -158,8 +215,6 @@ class Tester
 
                d = new int[4];
                Assert (4, d.Length, "#3");
-
-               // d.Event += delegate () { }; CS0019
        }
 
        void MemberGetError_Null ()
@@ -183,9 +238,8 @@ class Tester
                d.Prop++;
                Assert (2, d.Prop, "#1d");
                
-               //FIXME: 
-               //d.Prop += 5;
-               //Assert (7, d.Prop, "#1e");
+               d.Prop += 5;
+               Assert (7, d.Prop, "#1e");
 
                d.StringStatic = "no";
                Assert ("no", d.StringStatic, "#2");