2009-11-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
[mono.git] / mono / tests / dtest.cs
index 4eadfee09ae6a5a089c9e5cd3ce3caa4baaad1e6..1aa9638dd19baac48d15c6cd5adeb5a8c94ae7e7 100644 (file)
@@ -1210,11 +1210,14 @@ public class DebuggerTests
        }
 
        [Test]
-       public void Modules () {
+       public void AssemblyInfo () {
                Event e = run_until ("single_stepping");
 
                StackFrame frame = e.Thread.GetFrames () [0];
 
+               var aname = frame.Method.DeclaringType.Assembly.GetName ();
+               Assert.AreEqual ("dtest-app, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", aname.ToString ());
+
                ModuleMirror m = frame.Method.DeclaringType.Module;
 
                Assert.AreEqual ("dtest-app.exe", m.Name);
@@ -1746,6 +1749,9 @@ public class DebuggerTests
                        if (!finished)
                                Monitor.Wait (wait);
                }
+
+               // Check InvokeOptions.DisableBreakpoints flag
+               o.InvokeMethod (e.Thread, m, null, InvokeOptions.DisableBreakpoints);
        }
 
        [Test]
@@ -2023,4 +2029,36 @@ public class DebuggerTests
 
                AssertValue (true, entry_point.DeclaringType.GetValue (f));
        }
+
+       [Test]
+       public void StackTraceInNative () {
+               // Check that stack traces can be produced for threads in native code
+               vm.Dispose ();
+
+               Start (new string [] { "dtest-app.exe", "frames-in-native" });
+
+               var e = run_until ("frames_in_native");
+
+               // FIXME: This is racy
+               vm.Resume ();
+
+               Thread.Sleep (100);
+
+               vm.Suspend ();
+
+               StackFrame[] frames = e.Thread.GetFrames ();
+
+               int frame_index = -1;
+               for (int i = 0; i < frames.Length; ++i) {
+                       if (frames [i].Method.Name == "Sleep") {
+                               frame_index = i;
+                               break;
+                       }
+               }
+
+               Assert.IsTrue (frame_index != -1);
+               Assert.AreEqual ("Sleep", frames [frame_index].Method.Name);
+               Assert.AreEqual ("frames_in_native", frames [frame_index + 1].Method.Name);
+               Assert.AreEqual ("Main", frames [frame_index + 2].Method.Name);
+       }
 }
\ No newline at end of file