blob: 5c7c1b6c628e6f8e77a84f98e61386f6e2c84d9b [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.
// VMOptions=--error_on_bad_type --error_on_bad_override --steal-breakpoints
import 'package:observatory/service_io.dart';
import 'package:unittest/unittest.dart';
import 'test_helper.dart';
import 'dart:async';
int counter = 0;
void periodicTask(_) {
counter++; // Line 14. We set our breakpoint here.
if (counter % 1000 == 0) {
print('counter = $counter');
}
}
void startTimer() {
new Timer.periodic(const Duration(milliseconds:10), periodicTask);
}
var tests = [
// Add a breakpoint and wait for it to be reached.
(Isolate isolate) async {
await isolate.rootLibrary.load();
// Set up a listener to wait for breakpoint events.
Completer completer = new Completer();
var stream = await isolate.vm.getEventStream(VM.kDebugStream);
var subscription;
subscription = stream.listen((ServiceEvent event) {
if (event.kind == ServiceEvent.kPauseBreakpoint) {
print('Isolate paused at breakpoint');
subscription.cancel();
completer.complete();
}
});
// Add the breakpoint.
var script = isolate.rootLibrary.scripts[0];
var result = await isolate.addBreakpoint(script, 14);
expect(result is Breakpoint, isTrue);
await completer.future; // Wait for breakpoint event to fire.
},
// We are at the breakpoint on line 14.
(Isolate isolate) async {
ServiceMap stack = await isolate.getStack();
expect(stack.type, equals('Stack'));
expect(stack['frames'].length, greaterThanOrEqualTo(1));
Script script = stack['frames'][0].location.script;
await script.load();
expect(script.name,endsWith('steal_breakpoint_test.dart'));
expect(script.tokenToLine(stack['frames'][0].location.tokenPos), equals(14));
},
// Resume
(Isolate isolate) async {
Completer completer = new Completer();
var stream = await isolate.vm.getEventStream(VM.kDebugStream);
var subscription;
subscription = stream.listen((ServiceEvent event) {
if (event.kind == ServiceEvent.kResume) {
print('Isolate resumed');
subscription.cancel();
completer.complete();
}
});
isolate.resume();
await completer.future;
},
];
main(args) => runIsolateTests(args, tests, testeeBefore: startTimer);