Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
68 changes: 34 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,90 @@ void main() {

group('breakpoint', () {
VM vm;
Isolate isolate;
late Isolate isolate;
ScriptList scripts;
ScriptRef mainScript;
Stream<Event> stream;
late ScriptRef mainScript;
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!);
scripts = await service.getScripts(isolate.id!);

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'));
});

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

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be nice to define non-nullable isolateId and mainScriptUri as it seems like we are using them everywhere.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

done


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(isolate.id!, bp.id!);
});

test('set breakpoint again', () async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolate.id!, mainScript);
final bp = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolate.id!, mainScript.uri!, 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(isolate.id!, bp.id!);
});

test('set existing breakpoint succeeds', () async {
final line = await context.findBreakpointLine(
'printLocal', isolate.id, mainScript);
'printLocal', isolate.id!, mainScript);
final bp1 = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolate.id!, mainScript.uri!, line);
final bp2 = await service.addBreakpointWithScriptUri(
isolate.id, mainScript.uri, line);
isolate.id!, mainScript.uri!, 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(isolate.id!);
expect(currentIsolate.breakpoints, containsAll([bp1]));

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

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

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

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

var currentIsolate = await service.getIsolate(isolate.id);
var currentIsolate = await service.getIsolate(isolate.id!);
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(isolate.id!, breakpoints[0].id!);

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

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

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

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

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

currentIsolate = await service.getIsolate(isolate.id);
currentIsolate = await service.getIsolate(isolate.id!);
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