[runtime] Synthesize IList and IReadOnlyList for the element type of enum errays...
[mono.git] / mono / tests / exception18.cs
index 8f1e492c0e97bf83d09db8c33f9a95c5ae83bf8e..6c9b349ce30e76d986faee4fd36e0e982fb56e70 100644 (file)
@@ -1,4 +1,6 @@
 using System;
+using System.Linq;
+using System.Runtime.CompilerServices;
 
 class C
 {
@@ -17,6 +19,10 @@ class C
        {
                        string fullTrace = ex.StackTrace;
                        string[] frames = fullTrace.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
+
+                       // Ignore metadata
+                       frames = frames.Where (l => !l.StartsWith ("[")).ToArray ();
+
                        return frames.Length;
        }
 
@@ -44,5 +50,58 @@ class C
                                throw new Exception (String.Format("Exception carried {0} frames along with it when it should have reported four.", frames));
                }
 
+               try {
+                       new C ().M1a ();
+               } catch (Exception ex) {
+                       int frames = FrameCount (ex);
+                       if (frames != 4)
+                               throw new Exception (String.Format("Exception carried {0} frames along with it when it should have reported four.", frames));
+               }
+
+               try {
+                       new C ().M1b ();
+               } catch (Exception ex) {
+                       int frames = FrameCount (ex);
+                       if (frames != 3)
+                               throw new Exception (String.Format("Exception carried {0} frames along with it when it should have reported three.", frames));
+               }
+       }
+
+       [MethodImpl(MethodImplOptions.NoInlining)]
+       private void M1a ()
+       {
+               M2a ();
+       }
+
+       [MethodImpl(MethodImplOptions.NoInlining)]
+       private void M1b ()
+       {
+               M2b ();
+       }
+
+       [MethodImpl(MethodImplOptions.NoInlining)]
+       private void M2a ()
+       {
+               try {
+                       M3 ();
+               } catch {
+                       throw;
+               }
+       }
+
+       [MethodImpl(MethodImplOptions.NoInlining)]
+       private void M2b ()
+       {
+               try {
+                       M3 ();
+               } catch (Exception ex) {
+                       throw ex;
+               }
+       }
+
+       [MethodImpl(MethodImplOptions.NoInlining)]
+       private void M3 ()
+       {
+               throw new NotImplementedException ();
        }
 }