Merge pull request #4327 from vkargov/vk-abcremedy
[mono.git] / mcs / tests / test-async-17.cs
index 3848b77d1ace8aa4b2c49938c18a843a7299243e..9f9720bc2bc17e5715fc3be970ce3af4fb4e141e 100644 (file)
@@ -1,5 +1,3 @@
-// Compiler options: -langversion:future
-
 using System;
 using System.Threading.Tasks;
 using System.Threading;
@@ -10,30 +8,69 @@ class Tester
 {
        async Task<int> TestException_1 ()
        {
-               await Task.Factory.StartNew (() => { throw new ApplicationException (); });
+               await Task.Factory.StartNew (() => { throw new ApplicationException (); }).ConfigureAwait (false);
                return 1;
        }
 
        async Task TestException_2 ()
        {
-               await Task.Factory.StartNew (() => { throw new ApplicationException (); });
+               await Task.Factory.StartNew (() => { throw new ApplicationException (); }).ConfigureAwait (false);
        }
 
        async Task TestException_3 ()
        {
-               Func<Task> a = async () => await Task.Factory.StartNew (() => { throw new ApplicationException (); });
-               await a ();
+               Func<Task> a = async () => await Task.Factory.StartNew (() => { throw new ApplicationException (); }).ConfigureAwait (false);
+               await a ().ConfigureAwait (false);
        }
        
        async Task<int> TestException_4 ()
        {
                try {
-                       await Task.Factory.StartNew (() => 5);
+                       await Task.Factory.StartNew (() => 5).ConfigureAwait (false);
                } finally {
                        throw new ApplicationException ();
                }
        }
        
+       async Task<int> TestException_5 ()
+       {
+               int state = 0;
+               try {
+                       await Task.Factory.StartNew (() => { throw new ArgumentException (); }).ConfigureAwait (false);
+                       state = 1;
+               } catch (ArgumentException) {
+                       state = 2;
+               } finally {
+                       if (state == 2)
+                               throw new ApplicationException ();      
+               }
+               
+               return 1;
+       }
+       
+       async Task<int> TestException_6 ()
+       {
+               try {
+                       await Task.Factory.StartNew (() => { throw new ArgumentException (); }).ConfigureAwait (false);
+               } catch (ArgumentException) {
+                       throw new ApplicationException ();      
+               }
+               
+               return 1;
+       }
+
+       async Task<int> TestException_7 ()
+       {
+               try {
+                       await Task.Factory.StartNew (() => { throw new ArgumentException (); }).ConfigureAwait (false);
+               } catch (ArgumentException e) {
+                       if (e.StackTrace.Contains (".MoveNext"))
+                               throw new ApplicationException ();      
+               }
+               
+               return 1;
+       }
+       
        static bool RunTest (MethodInfo test)
        {
                Console.Write ("Running test {0, -25}", test.Name);