| Index: runtime/observatory/tests/service/debugger_location_second_test.dart
|
| diff --git a/runtime/observatory/tests/service/debugger_location_second_test.dart b/runtime/observatory/tests/service/debugger_location_second_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b2463ab0c05b9a739844bd366bc7649e013aca2c
|
| --- /dev/null
|
| +++ b/runtime/observatory/tests/service/debugger_location_second_test.dart
|
| @@ -0,0 +1,209 @@
|
| +// Copyright (c) 2016, 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
|
| +
|
| +import 'package:observatory/service_io.dart';
|
| +import 'package:observatory/debugger.dart';
|
| +import 'package:unittest/unittest.dart';
|
| +import 'service_test_common.dart';
|
| +import 'test_helper.dart';
|
| +import 'dart:async';
|
| +import 'dart:developer';
|
| +
|
| +const int LINE_A = 22;
|
| +const int LINE_B = 110;
|
| +const int LINE_C = 12;
|
| +
|
| +void testFunction() {
|
| + int i = 0;
|
| + while (i == 0) {
|
| + debugger();
|
| + print('loop'); // Line A.
|
| + print('loop');
|
| + }
|
| +}
|
| +
|
| +class TestDebugger extends Debugger {
|
| + TestDebugger(this.isolate, this.stack);
|
| +
|
| + VM get vm => isolate.vm;
|
| + Isolate isolate;
|
| + ServiceMap stack;
|
| + int currentFrame = 0;
|
| +}
|
| +
|
| +void debugger_location_dummy_function() {
|
| +}
|
| +
|
| +class DebuggerLocationTestFoo {
|
| + DebuggerLocationTestFoo(this.field);
|
| + DebuggerLocationTestFoo.named();
|
| +
|
| + void method() {}
|
| + void madness() {}
|
| +
|
| + int field;
|
| +}
|
| +
|
| +class DebuggerLocationTestBar {
|
| +}
|
| +
|
| +Future<Debugger> initDebugger(Isolate isolate) {
|
| + return isolate.getStack().then((stack) {
|
| + return new TestDebugger(isolate, stack);
|
| + });
|
| +}
|
| +
|
| +var tests = [
|
| +
|
| +hasStoppedAtBreakpoint,
|
| +
|
| +// Load the isolate's libraries
|
| +(Isolate isolate) async {
|
| + for (var lib in isolate.libraries) {
|
| + await lib.load();
|
| + }
|
| +},
|
| +
|
| +// Parse method
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var loc =
|
| + await DebuggerLocation.parse(debugger, 'DebuggerLocationTestFoo.method');
|
| + expect(loc.valid, isTrue);
|
| + expect(loc.toString(), equals('DebuggerLocationTestFoo.method'));
|
| +},
|
| +
|
| +// Parse method
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var loc =
|
| + await DebuggerLocation.parse(debugger, 'DebuggerLocationTestFoo.field=');
|
| + expect(loc.valid, isTrue);
|
| + expect(loc.toString(), equals('DebuggerLocationTestFoo.field='));
|
| +},
|
| +
|
| +// Parse bad method
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var loc =
|
| + await DebuggerLocation.parse(debugger, 'DebuggerLocationTestFoo.missing');
|
| + expect(loc.valid, isFalse);
|
| + expect(loc.toString(), equals(
|
| + 'invalid source location '
|
| + '(Function \'DebuggerLocationTestFoo.missing\' not found)'));
|
| +},
|
| +
|
| +// Complete function + script
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions = await DebuggerLocation.complete(debugger, 'debugger_loc');
|
| + expect(completions.toString(), equals(
|
| + '[debugger_location_dummy_function,'
|
| + ' debugger_location.dart:,'
|
| + ' debugger_location_second_test.dart:]'));
|
| +},
|
| +
|
| +// Complete class
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(debugger, 'DebuggerLocationTe');
|
| + expect(completions.toString(), equals(
|
| + '[DebuggerLocationTestBar,'
|
| + ' DebuggerLocationTestFoo]'));
|
| +},
|
| +
|
| +// No completions: unqualified name
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(debugger, 'debugger_locXYZZY');
|
| + expect(completions.toString(), equals('[]'));
|
| +},
|
| +
|
| +// Complete method
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(debugger, 'DebuggerLocationTestFoo.m');
|
| + expect(completions.toString(), equals(
|
| + '[DebuggerLocationTestFoo.madness,'
|
| + ' DebuggerLocationTestFoo.method]'));
|
| +},
|
| +
|
| +// No completions: qualified name
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(debugger, 'DebuggerLocationTestFoo.q');
|
| + expect(completions.toString(), equals('[]'));
|
| +},
|
| +
|
| +// Complete script
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(debugger, 'debugger_location_second_te');
|
| + expect(completions.toString(), equals(
|
| + '[debugger_location_second_test.dart:]'));
|
| +},
|
| +
|
| +// Complete script:line
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(debugger,
|
| + 'debugger_location_second_test.dart:11');
|
| + expect(completions.toString(), equals(
|
| + '[debugger_location_second_test.dart:${LINE_B + 0} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 0}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 1} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 1}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 2} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 2}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 3} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 3}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 4} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 4}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 5} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 5}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 6} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 6}:,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 9} ,'
|
| + ' debugger_location_second_test.dart:${LINE_B + 9}:]'));
|
| +},
|
| +
|
| +// Complete script:line:col
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions =
|
| + await DebuggerLocation.complete(
|
| + debugger,
|
| + 'debugger_location_second_test.dart:$LINE_C:2');
|
| + expect(completions.toString(), equals(
|
| + '[debugger_location_second_test.dart:$LINE_C:2 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:20 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:21 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:22 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:23 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:24 ]'));
|
| +},
|
| +
|
| +// Complete without the script name.
|
| +(Isolate isolate) async {
|
| + var debugger = await initDebugger(isolate);
|
| + var completions = await DebuggerLocation.complete(debugger, '$LINE_C:2');
|
| + expect(completions.toString(), equals(
|
| + '[debugger_location_second_test.dart:$LINE_C:2 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:20 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:21 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:22 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:23 ,'
|
| + ' debugger_location_second_test.dart:$LINE_C:24 ]'));
|
| +},
|
| +
|
| +];
|
| +
|
| +main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);
|
|
|