mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 23:49:47 +00:00
76a74ba678
See https://github.com/dart-lang/sdk/issues/45037 TEST=pkg/vm_service/test/* Change-Id: I20bfc03ae40bc41ee4d965a71f090ecf974e4e59 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/185522 Commit-Queue: Ben Konyi <bkonyi@google.com> Reviewed-by: Siva Annamalai <asiva@google.com>
84 lines
2.8 KiB
Dart
84 lines
2.8 KiB
Dart
// Copyright (c) 2019, 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:test/test.dart';
|
|
import 'package:test_package/has_part.dart' as test_pkg;
|
|
import 'package:vm_service/vm_service.dart';
|
|
|
|
import 'common/service_test_common.dart';
|
|
import 'common/test_helper.dart';
|
|
|
|
const String file = 'package:test_package/has_part.dart';
|
|
// print() within fooz()
|
|
const int LINE_A = 15;
|
|
// print() within barz()
|
|
const int LINE_B = 11;
|
|
|
|
testMain() {
|
|
test_pkg.fooz();
|
|
}
|
|
|
|
var tests = <IsolateTest>[
|
|
hasPausedAtStart,
|
|
(VmService service, IsolateRef isolateRef) async {
|
|
// Mark 'package:observatory_test_package/has_part.dart' as not debuggable.
|
|
final isolateId = isolateRef.id!;
|
|
final isolate = await service.getIsolate(isolateId);
|
|
|
|
LibraryRef has_part_ref = isolate.libraries!.firstWhere(
|
|
(LibraryRef library) => library.uri == file,
|
|
);
|
|
|
|
Library has_part =
|
|
await service.getObject(isolateId, has_part_ref.id!) as Library;
|
|
expect(has_part.debuggable, true);
|
|
// SetBreakpoint before setting library to non-debuggable.
|
|
// Breakpoints are allowed to be set (before marking library as
|
|
// non-debuggable) but are not hit when running (after marking library
|
|
// as non-debuggable).
|
|
ScriptRef script = has_part.scripts!.firstWhere(
|
|
(ScriptRef script) => script.uri == file,
|
|
);
|
|
Breakpoint bpt = await service.addBreakpoint(isolateId, script.id!, LINE_A);
|
|
print("Breakpoint is $bpt");
|
|
expect(bpt, isNotNull);
|
|
|
|
// Set breakpoint and check later that this breakpoint won't be added if
|
|
// the library is non-debuggable.
|
|
bpt = await service.addBreakpoint(isolateId, script.id!, LINE_B);
|
|
print("Breakpoint is $bpt");
|
|
expect(bpt, isNotNull);
|
|
|
|
// Remove breakpoint.
|
|
final res = await service.removeBreakpoint(isolateId, bpt.id!);
|
|
expect(res.type, 'Success');
|
|
|
|
await service.setLibraryDebuggable(isolateId, has_part.id!, false);
|
|
has_part = await service.getObject(isolateId, has_part.id!) as Library;
|
|
expect(has_part.debuggable, false);
|
|
print('$has_part is debuggable: ${has_part.debuggable}');
|
|
|
|
// Breakpoints are not allowed to set on non-debuggable libraries.
|
|
try {
|
|
await service.addBreakpoint(isolateId, script.id!, LINE_B);
|
|
} on RPCError catch (e) {
|
|
// Cannot add breakpoint error code
|
|
expect(e.code, 102);
|
|
expect(e.details, contains("Cannot add breakpoint at line '11'"));
|
|
print("Set Breakpoint to non-debuggable library is not allowed");
|
|
}
|
|
},
|
|
resumeIsolate,
|
|
hasStoppedAtExit,
|
|
];
|
|
|
|
main(args) => runIsolateTests(
|
|
args,
|
|
tests,
|
|
'breakpoint_non_debuggable_library_test.dart',
|
|
testeeConcurrent: testMain,
|
|
pause_on_start: true,
|
|
pause_on_exit: true,
|
|
);
|