Skip to content

Migrate build_daemon_callstack_test and build_daemon_breakpoint_test to null-safety #1716

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 36 additions & 34 deletions dwds/test/build_daemon_breakpoint_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// 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.

// @dart = 2.9

@TestOn('vm')
import 'dart:async';

Expand Down Expand Up @@ -38,88 +36,92 @@ void main() {

group('breakpoint', () {
VM vm;
Isolate isolate;
late Isolate isolate;
late String isolateId;
ScriptList scripts;
ScriptRef mainScript;
Stream<Event> stream;
late ScriptRef mainScript;
late String mainScriptUri;
late Stream<Event> stream;

setUp(() async {
vm = await service.getVM();
isolate = await service.getIsolate(vm.isolates.first.id);
scripts = await service.getScripts(isolate.id);
isolate = await service.getIsolate(vm.isolates!.first.id!);
isolateId = isolate.id!;
scripts = await service.getScripts(isolateId);

await service.streamListen('Debug');
stream = service.onEvent('Debug');

mainScript = scripts.scripts
.firstWhere((each) => each.uri.contains('main.dart'));
mainScript = scripts.scripts!
.firstWhere((each) => each.uri!.contains('main.dart'));
mainScriptUri = mainScript.uri!;
});

tearDown(() async {
await service.resume(isolate.id);
await service.resume(isolateId);
});

test('set breakpoint', () async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolateId, mainScript);
final bp = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolateId, mainScriptUri, line);

await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseBreakpoint);

expect(bp, isNotNull);

// Remove breakpoint so it doesn't impact other tests.
await service.removeBreakpoint(isolate.id, bp.id);
await service.removeBreakpoint(isolateId, bp.id!);
});

test('set breakpoint again', () async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolateId, mainScript);
final bp = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolateId, mainScriptUri, line);

await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseBreakpoint);

expect(bp, isNotNull);

// Remove breakpoint so it doesn't impact other tests.
await service.removeBreakpoint(isolate.id, bp.id);
await service.removeBreakpoint(isolateId, bp.id!);
});

test('set existing breakpoint succeeds', () async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolateId, mainScript);
final bp1 = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolateId, mainScriptUri, line);
final bp2 = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolateId, mainScriptUri, line);

expect(bp1, equals(bp2));
expect(bp1, isNotNull);

await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseBreakpoint);

var currentIsolate = await service.getIsolate(isolate.id);
var currentIsolate = await service.getIsolate(isolateId);
expect(currentIsolate.breakpoints, containsAll([bp1]));

// Remove breakpoints so they don't impact other tests.
await service.removeBreakpoint(isolate.id, bp1.id);
await service.removeBreakpoint(isolateId, bp1.id!);

currentIsolate = await service.getIsolate(isolate.id);
currentIsolate = await service.getIsolate(isolateId);
expect(currentIsolate.breakpoints, isEmpty);
});

test('set breakpoints at the same line simultaneously succeeds',
() async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolateId, mainScript);
final futures = [
service.addBreakpointWithScriptUri(isolate.id, mainScript.uri, line),
service.addBreakpointWithScriptUri(isolate.id, mainScript.uri, line),
service.addBreakpointWithScriptUri(isolateId, mainScriptUri, line),
service.addBreakpointWithScriptUri(isolateId, mainScriptUri, line),
];

final breakpoints = await Future.wait(futures);
Expand All @@ -129,34 +131,34 @@ void main() {
await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseBreakpoint);

var currentIsolate = await service.getIsolate(isolate.id);
var currentIsolate = await service.getIsolate(isolateId);
expect(currentIsolate.breakpoints, containsAll([breakpoints[0]]));

// Remove breakpoints so they don't impact other tests.
await service.removeBreakpoint(isolate.id, breakpoints[0].id);
await service.removeBreakpoint(isolateId, breakpoints[0].id!);

currentIsolate = await service.getIsolate(isolate.id);
currentIsolate = await service.getIsolate(isolateId);
expect(currentIsolate.breakpoints, isEmpty);
});

test('remove non-existing breakpoint fails', () async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolateId, mainScript);
final bp = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolateId, mainScriptUri, line);

await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseBreakpoint);

var currentIsolate = await service.getIsolate(isolate.id);
var currentIsolate = await service.getIsolate(isolateId);
expect(currentIsolate.breakpoints, containsAll([bp]));

// Remove breakpoints so they don't impact other tests.
await service.removeBreakpoint(isolate.id, bp.id);
await service.removeBreakpoint(isolateId, bp.id!);
await expectLater(
service.removeBreakpoint(isolate.id, bp.id), throwsRPCError);
service.removeBreakpoint(isolateId, bp.id!), throwsRPCError);

currentIsolate = await service.getIsolate(isolate.id);
currentIsolate = await service.getIsolate(isolateId);
expect(currentIsolate.breakpoints, isEmpty);
});
});
Expand Down
50 changes: 24 additions & 26 deletions dwds/test/build_daemon_callstack_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
// 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.

// @dart = 2.9

@TestOn('vm')
import 'dart:async';

Expand Down Expand Up @@ -67,47 +65,47 @@ void main() {
});

group('callStack |', () {
ChromeProxyService service;
late ChromeProxyService service;
VM vm;
Isolate isolate;
late Isolate isolate;
ScriptList scripts;
ScriptRef mainScript;
ScriptRef testLibraryScript;
Stream<Event> stream;
late ScriptRef mainScript;
late ScriptRef testLibraryScript;
late Stream<Event> stream;

setUp(() async {
setCurrentLogWriter(debug: debug);
service = setup.service;
vm = await service.getVM();
isolate = await service.getIsolate(vm.isolates.first.id);
scripts = await service.getScripts(isolate.id);
isolate = await service.getIsolate(vm.isolates!.first.id!);
scripts = await service.getScripts(isolate.id!);

await service.streamListen('Debug');
stream = service.onEvent('Debug');

final testPackage =
soundNullSafety ? '_test_package_sound' : '_test_package';

mainScript = scripts.scripts
.firstWhere((each) => each.uri.contains('main.dart'));
testLibraryScript = scripts.scripts.firstWhere((each) =>
each.uri.contains('package:$testPackage/test_library.dart'));
mainScript = scripts.scripts!
.firstWhere((each) => each.uri!.contains('main.dart'));
testLibraryScript = scripts.scripts!.firstWhere((each) =>
each.uri!.contains('package:$testPackage/test_library.dart'));
});

tearDown(() async {
await service.resume(isolate.id);
await service.resume(isolate.id!);
});

Future<void> onBreakPoint(BreakpointTestData breakpoint,
Future<void> Function() body) async {
Breakpoint bp;
Breakpoint? bp;
try {
final bpId = breakpoint.bpId;
final script = breakpoint.script;
final line =
await context.findBreakpointLine(bpId, isolate.id, script);
await context.findBreakpointLine(bpId, isolate.id!, script);
bp = await setup.service
.addBreakpointWithScriptUri(isolate.id, script.uri, line);
.addBreakpointWithScriptUri(isolate.id!, script.uri!, line);

expect(bp, isNotNull);
expect(bp.location, _matchBpLocation(script, line, 0));
Expand All @@ -119,7 +117,7 @@ void main() {
} finally {
// Remove breakpoint so it doesn't impact other tests or retries.
if (bp != null) {
await setup.service.removeBreakpoint(isolate.id, bp.id);
await setup.service.removeBreakpoint(isolate.id!, bp.id!);
}
}
}
Expand All @@ -128,13 +126,13 @@ void main() {
{int frameIndex = 1}) async {
// Find lines the breakpoints are located on.
final lines = await Future.wait(breakpoints.map((frame) => context
.findBreakpointLine(frame.bpId, isolate.id, frame.script)));
.findBreakpointLine(frame.bpId, isolate.id!, frame.script)));

// Get current stack.
final stack = await service.getStack(isolate.id);
final stack = await service.getStack(isolate.id!);

// Verify the stack is correct.
expect(stack.frames.length, greaterThanOrEqualTo(lines.length));
expect(stack.frames!.length, greaterThanOrEqualTo(lines.length));
final expected = [
for (var i = 0; i < lines.length; i++)
_matchFrame(
Expand All @@ -144,7 +142,7 @@ void main() {

// Verify that expression evaluation is not failing.
final instance =
await service.evaluateInFrame(isolate.id, frameIndex, 'true');
await service.evaluateInFrame(isolate.id!, frameIndex, 'true');
expect(instance, isA<InstanceRef>());
}

Expand Down Expand Up @@ -237,7 +235,7 @@ void main() {
),
];
await onBreakPoint(breakpoints[0], () async {
await service.resume(isolate.id, step: 'Out');
await service.resume(isolate.id!, step: 'Out');
await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseInterrupted);
return testCallStack([breakpoints[1], breakpoints[2]]);
Expand All @@ -264,7 +262,7 @@ void main() {
),
];
await onBreakPoint(breakpoints[1], () async {
await service.resume(isolate.id, step: 'Into');
await service.resume(isolate.id!, step: 'Into');
await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseInterrupted);
return testCallStack(breakpoints);
Expand Down Expand Up @@ -296,7 +294,7 @@ void main() {
final bp = BreakpointTestData(
'printMultiLine', 'printObjectMultiLine', mainScript);
await onBreakPoint(bp, () async {
await service.resume(isolate.id, step: 'Into');
await service.resume(isolate.id!, step: 'Into');
await stream.firstWhere(
(Event event) => event.kind == EventKind.kPauseInterrupted);
return testCallStack(breakpoints);
Expand All @@ -309,7 +307,7 @@ void main() {
}

Matcher _matchFrame(ScriptRef script, String function, int line) => isA<Frame>()
.having((frame) => frame.code.name, 'function', function)
.having((frame) => frame.code!.name, 'function', function)
.having((frame) => frame.location, 'location',
_matchFrameLocation(script, line));

Expand Down