blob: 8c2c265e371a85bc6e75d52f011c224f1090d368 [file] [log] [blame]
// Copyright 2020 Google. All rights reserved. Use of this source code is
// governed by a BSD-style license that can be found in the LICENSE file.
@TestOn('vm')
library wip.debugger_test;
import 'dart:async';
import 'package:test/test.dart';
import 'package:webkit_inspection_protocol/webkit_inspection_protocol.dart';
import 'test_setup.dart';
void main() {
group('WipDebugger', () {
WipDebugger debugger;
List<StreamSubscription> subs = [];
setUp(() async {
debugger = (await wipConnection).debugger;
});
tearDown(() async {
await debugger.disable();
debugger = null;
await closeConnection();
subs.forEach((s) => s.cancel());
subs.clear();
});
test('gets script events', () async {
final controller = StreamController<ScriptParsedEvent>();
subs.add(debugger.onScriptParsed.listen(controller.add));
await debugger.enable();
await navigateToPage('debugger_test.html');
expect(controller.stream.first, isNotNull);
});
test('getScriptSource', () async {
final controller = StreamController<ScriptParsedEvent>();
subs.add(debugger.onScriptParsed.listen(controller.add));
await debugger.enable();
await navigateToPage('debugger_test.html');
final event = await controller.stream
.firstWhere((event) => event.script.url.endsWith('.html'));
expect(event.script.scriptId, isNotEmpty);
final source = await debugger.getScriptSource(event.script.scriptId);
expect(source, isNotEmpty);
});
test('getPossibleBreakpoints', () async {
final controller = StreamController<ScriptParsedEvent>();
subs.add(debugger.onScriptParsed.listen(controller.add));
await debugger.enable();
await navigateToPage('debugger_test.html');
final event = await controller.stream
.firstWhere((event) => event.script.url.endsWith('.html'));
expect(event.script.scriptId, isNotEmpty);
final script = event.script;
final result = await debugger
.getPossibleBreakpoints(WipLocation.fromValues(script.scriptId, 0));
expect(result, isNotEmpty);
expect(result.any((bp) => bp.lineNumber == 10), true);
});
test('setBreakpoint / removeBreakpoint', () async {
final controller = StreamController<ScriptParsedEvent>();
subs.add(debugger.onScriptParsed.listen(controller.add));
await debugger.enable();
await navigateToPage('debugger_test.html');
final event = await controller.stream
.firstWhere((event) => event.script.url.endsWith('.html'));
expect(event.script.scriptId, isNotEmpty);
final script = event.script;
final bpResult = await debugger
.setBreakpoint(WipLocation.fromValues(script.scriptId, 10));
expect(bpResult.breakpointId, isNotEmpty);
final result = await debugger.removeBreakpoint(bpResult.breakpointId);
expect(result.result, isEmpty);
});
});
}