blob: 2375be6d9d80e2043f93dc1e8668be8cfd83c034 [file] [log] [blame]
// Copyright (c) 2015, 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.
import 'package:observatory/service_io.dart';
import 'package:test/test.dart';
import 'test_helper.dart';
import 'service_test_common.dart';
import 'dart:async';
const int LINE_A = 16;
const int LINE_B = 17;
testMain() {
var foo; // line A
foo = 42; // line B
print(foo);
}
var tests = <IsolateTest>[
hasPausedAtStart,
// Add breakpoints at line 11 and line 12.
(Isolate isolate) async {
var rootLib = isolate.rootLibrary;
await rootLib.load();
var script = rootLib.scripts[0];
var bpt1 = await isolate.addBreakpoint(script, LINE_A);
var bpt2 = await isolate.addBreakpoint(script, LINE_B);
expect(await bpt1.location!.getLine(), equals(LINE_A));
expect(await bpt2.location!.getLine(), equals(LINE_B));
var stream = await isolate.vm.getEventStream(VM.kDebugStream);
Completer completer = new Completer();
var subscription;
var breakCount = 0;
subscription = stream.listen((ServiceEvent event) async {
if (event.kind == ServiceEvent.kPauseBreakpoint) {
breakCount++;
print('break count is $breakCount');
if (breakCount == 1) {
// We are stopped at breakpoint 1.
expect(event.breakpoint!.number, equals(bpt1.number));
// Remove both breakpoints
var result = await isolate.removeBreakpoint(bpt1);
expect(result.type, equals("Success"));
result = await isolate.removeBreakpoint(bpt2);
expect(result.type, equals("Success"));
isolate.stepOver();
} else {
// No breakpoint.
expect(event.breakpoint, isNull);
// We expect the next step to take us to line B.
var stack = await isolate.getStack();
expect(await stack['frames'][0].location.getLine(), equals(LINE_B));
subscription.cancel();
completer.complete(null);
}
}
});
isolate.resume();
await completer.future;
},
];
main(args) => runIsolateTests(args, tests,
testeeConcurrent: testMain, pause_on_start: true);