// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. // This test forks a second vm process that runs this dart script as // a debug target. // Run this test with option --wire to see the json messages sent // between the processes. // Run this test with option --verbose to see the stdout and stderr output // of the debug target process. import "debug_lib.dart"; bar(x) { print(x); } main(List arguments) { if (RunScript(testScript, arguments)) return; print("Hello from debuggee"); var f = bar; f("closure call"); bar(12); var a = new A(); for (var i = 0; i < 2; ++i) { a.foo(i); } } class A { A() { foo = (x) => print(x); } var foo; } // Expected debugger events and commands. var testScript = [ MatchFrame(0, "main"), // Top frame in trace is function "main". SetBreakpoint(22), // Set breakpoint a line 22, at the closure call. Resume(), MatchFrame(0, "main"), // Should be at closure call. StepInto(), MatchFrames(["bar", "main"]), // Should be in closure function now. StepOut(), MatchFrame(0, "main"), // Back in main, before static call to bar(). SetBreakpoint(15), // Breakpoint in bar(); Resume(), MatchFrames(["bar", "main"]), SetBreakpoint(26), // Breakpoint in main() at a.field(i). SetBreakpoint(33), // Breakpoint in closure. Resume(), MatchFrame(0, "main"), // Should be in main(). MatchLocals({"i": "0"}), StepInto(), StepInto(), MatchFrames(["A.", "main"]), // In closure function. Resume(), MatchFrame(0, "main"), // Back in main(). MatchLocals({"i": "1"}), Resume(), MatchFrames(["A.", "main"]), // In closure function. Resume() ];