// Argument checking
AssertThrows<ArgumentException> (delegate {
// Invalid IL offset
- vm.SetBreakpoint (m, 1);
+ vm.SetBreakpoint (m, 2);
});
}
}
[Test]
- [Category("only88")]
+ public void ColumnNumbers () {
+ Event e = run_until ("line_numbers");
+
+ // FIXME: Merge this with LineNumbers () when its fixed
+
+ step_req = vm.CreateStepRequest (e.Thread);
+ step_req.Depth = StepDepth.Into;
+ step_req.Enable ();
+
+ Location l;
+
+ vm.Resume ();
+
+ e = GetNextEvent ();
+ Assert.IsTrue (e is StepEvent);
+
+ l = e.Thread.GetFrames ()[0].Location;
+
+ Assert.AreEqual (3, l.ColumnNumber);
+
+ step_req.Disable ();
+ }
+
+ [Test]
+ // Broken by mcs+runtime changes (#5438)
+ [Category("NotWorking")]
public void LineNumbers () {
Event e = run_until ("line_numbers");
Assert.AreEqual (EventType.TypeLoad, e.EventType);
}
+ List<Value> invoke_results;
+
+ [Test]
+ public void InvokeMultiple () {
+ Event e = run_until ("invoke1");
+
+ StackFrame frame = e.Thread.GetFrames () [0];
+
+ TypeMirror t = frame.Method.DeclaringType;
+ ObjectMirror this_obj = (ObjectMirror)frame.GetThis ();
+
+ TypeMirror t2 = frame.Method.GetParameters ()[0].ParameterType;
+
+ var methods = new MethodMirror [2];
+ methods [0] = t.GetMethod ("invoke_return_ref");
+ methods [1] = t.GetMethod ("invoke_return_primitive");
+
+ invoke_results = new List<Value> ();
+
+ var r = this_obj.BeginInvokeMultiple (e.Thread, methods, null, InvokeOptions.SingleThreaded, invoke_multiple_cb, this_obj);
+ WaitHandle.WaitAll (new WaitHandle[] { r.AsyncWaitHandle });
+ this_obj.EndInvokeMultiple (r);
+ // The callback might still be running
+ while (invoke_results.Count < 2) {
+ Thread.Sleep (100);
+ }
+ AssertValue ("ABC", invoke_results [0]);
+ AssertValue (42, invoke_results [1]);
+ }
+
+ void invoke_multiple_cb (IAsyncResult ar) {
+ ObjectMirror this_obj = (ObjectMirror)ar.AsyncState;
+
+ var res = this_obj.EndInvokeMethod (ar);
+ lock (invoke_results)
+ invoke_results.Add (res);
+ }
+
[Test]
public void GetThreads () {
vm.GetThreads ();
e = run_until ("domains_2");
var frame = e.Thread.GetFrames ()[0];
var o = frame.GetArgument (0) as ObjectMirror;
- Assert.AreEqual ("TransparentProxy", o.Type.Name);
+ Assert.AreEqual ("CrossDomain", o.Type.Name);
// Do a remoting invoke
- var cross_domain_type = (e.Thread.GetFrames ()[0].GetArgument (1) as ObjectMirror).Type;
+ var cross_domain_type = o.Type;
var v = o.InvokeMethod (e.Thread, cross_domain_type.GetMethod ("invoke_3"), null);
AssertValue (42, v);
args = gmd.GetGenericArguments ();
Assert.AreEqual (1, args.Length);
Assert.AreEqual ("T", args [0].Name);
+
+ var attrs = m.GetCustomAttributes (true);
+ Assert.AreEqual (1, attrs.Length);
+ Assert.AreEqual ("StateMachineAttribute", attrs [0].Constructor.DeclaringType.Name);
+ }
+
+ [Test]
+ public void UnhandledException () {
+ vm.Detach ();
+
+ Start (new string [] { "dtest-app.exe", "unhandled-exception" });
+
+ var req = vm.CreateExceptionRequest (null, false, true);
+ req.Enable ();
+
+ var e = run_until ("unhandled_exception");
+ vm.Resume ();
+
+ var e2 = GetNextEvent ();
+ Assert.IsTrue (e2 is ExceptionEvent);
+
+ vm.Exit (0);
+ vm = null;
+ }
+
+#if NET_4_5
+ [Test]
+ public void UnhandledExceptionUserCode () {
+ vm.Detach ();
+
+ // Exceptions caught in non-user code are treated as unhandled
+ Start (new string [] { "dtest-app.exe", "unhandled-exception-user" });
+
+ var req = vm.CreateExceptionRequest (null, false, true);
+ req.AssemblyFilter = new List<AssemblyMirror> () { entry_point.DeclaringType.Assembly };
+ req.Enable ();
+
+ var e = run_until ("unhandled_exception_user");
+ vm.Resume ();
+
+ var e2 = GetNextEvent ();
+ Assert.IsTrue (e2 is ExceptionEvent);
+
+ vm.Exit (0);
+ vm = null;
}
+#endif
}
}
\ No newline at end of file