// Copyright (c) 2018, 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 'dart:async'; import 'dart:developer'; import 'package:observatory/service_io.dart'; import 'service_test_common.dart'; import 'test_helper.dart'; void testFunction() { debugger(); } Future validateLocation(Location? location, Object object) async { if (location == null) return; if (location.tokenPos! < 0) return; if (location.script.uri == 'dart:_internal-patch/class_id_fasta.dart') { // Injected fields from this script cannot be reloaded. return; } // Ensure the script is loaded. final Script script = await location.script.load() as Script; // Use the more low-level functions. final line = script.tokenToLine(location.tokenPos); if (line == null) { throw 'missing location for $object in script ${script.uri}'; } script.getLine(line); script.tokenToCol(location.tokenPos); // Use the helper functions. await location.getLine(); await location.getColumn(); } Future validateFieldLocation(Field field) async { field = await field.load() as Field; await validateLocation(field.location, field); } Future validateFunctionLocation(ServiceFunction fun) async { fun = await fun.load() as ServiceFunction; await validateLocation(fun.location, fun); } Future validateClassLocation(Class klass) async { klass = await klass.load() as Class; await validateLocation(klass.location, klass); for (Field field in klass.fields) { await validateFieldLocation(field); } for (ServiceFunction fun in klass.functions) { await validateFunctionLocation(fun); } } var tests = [ hasStoppedAtBreakpoint, (Isolate isolate) async { // Force everything to be compiled. final params = { 'reports': ['Coverage'], 'forceCompile': true }; await isolate.invokeRpcNoUpgrade('getSourceReport', params); // Loop over all libraries, classes, functions and fields to ensure . for (Library lib in isolate.libraries) { lib = await lib.load() as Library; for (Field field in lib.variables) { await validateFieldLocation(field); } for (ServiceFunction fun in lib.functions) { await validateFunctionLocation(fun); } for (Class klass in lib.classes) { await validateClassLocation(klass); } } }, ]; main(args) => runIsolateTests(args, tests, testeeConcurrent: testFunction);