Skip to content

Implemented some debugging methods. #503

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
Jul 22, 2019
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
54 changes: 36 additions & 18 deletions dwds/lib/src/servers/extension_debugger.dart
Original file line number Diff line number Diff line change
Expand Up @@ -66,52 +66,70 @@ class ExtensionDebugger implements WipDebugger {
}

@override
Future disable() => throw UnimplementedError();
Future disable() => sendCommand('Debugger.disable');

@override
Future enable() => throw UnimplementedError();
Future enable() => sendCommand('Debugger.enable');

@override
Stream<T> eventStream<T>(String method, WipEventTransformer<T> transformer) =>
throw UnimplementedError();
Future<String> getScriptSource(String scriptId) async =>
(await sendCommand('Debugger.getScriptSource',
params: {'scriptId': scriptId}))
.result['scriptSource'] as String;

@override
Future<String> getScriptSource(String scriptId) => throw UnimplementedError();
Future pause() => sendCommand('Debugger.pause');

@override
Stream<WipDomain> get onClosed => throw UnimplementedError();
Future resume() => sendCommand('Debugger.resume');

@override
Stream<GlobalObjectClearedEvent> get onGlobalObjectCleared =>
throw UnimplementedError();
Future setPauseOnExceptions(PauseState state) =>
sendCommand('Debugger.setPauseOnExceptions',
params: {'state': _pauseStateToString(state)});

@override
Stream<DebuggerPausedEvent> get onPaused => throw UnimplementedError();
Future stepInto() => sendCommand('Debugger.stepInto');

@override
Stream<DebuggerResumedEvent> get onResumed => throw UnimplementedError();
Future stepOut() => sendCommand('Debugger.stepOut');

@override
Stream<ScriptParsedEvent> get onScriptParsed => throw UnimplementedError();
Future stepOver() => sendCommand('Debugger.stepOver');

@override
Future pause() => throw UnimplementedError();
Stream<T> eventStream<T>(String method, WipEventTransformer<T> transformer) =>
throw UnimplementedError();

@override
Future resume() => throw UnimplementedError();
Stream<WipDomain> get onClosed => throw UnimplementedError();

@override
Map<String, WipScript> get scripts => throw UnimplementedError();
Stream<GlobalObjectClearedEvent> get onGlobalObjectCleared =>
throw UnimplementedError();

@override
Future setPauseOnExceptions(PauseState state) => throw UnimplementedError();
Stream<DebuggerPausedEvent> get onPaused => throw UnimplementedError();

@override
Future stepInto() => throw UnimplementedError();
Stream<DebuggerResumedEvent> get onResumed => throw UnimplementedError();

@override
Future stepOut() => throw UnimplementedError();
Stream<ScriptParsedEvent> get onScriptParsed => throw UnimplementedError();

@override
Future stepOver() => throw UnimplementedError();
Map<String, WipScript> get scripts => throw UnimplementedError();

String _pauseStateToString(PauseState state) {
switch (state) {
case PauseState.all:
return 'all';
case PauseState.none:
return 'none';
case PauseState.uncaught:
return 'uncaught';
default:
throw ArgumentError('unknown state: $state');
}
}
}
14 changes: 12 additions & 2 deletions dwds/test/extension_debugger_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ void main() async {
extensionDebugger = ExtensionDebugger(connection);
});

test('can send a command & receive a response', () async {
test('can receive a response', () async {
var extensionResponse = ExtensionResponse((b) => b
..result = jsonEncode({
'result': {'value': 3.14}
Expand All @@ -34,9 +34,19 @@ void main() async {
params: {'expression': '\$pi'}).then((response) {
resultCompleter.complete(response);
}));
connection.controller
connection.controllerIncoming.sink
.add(jsonEncode(serializers.serialize(extensionResponse)));
var response = await resultCompleter.future;
expect(response.result['value'], 3.14);
});

test('can send a request', () async {
var extensionRequest = ExtensionRequest((b) => b
..id = 0
..command = 'Debugger.pause');
unawaited(extensionDebugger.pause());
var request = serializers.deserialize(
jsonDecode(await connection.controllerOutgoing.stream.first));
expect(request, extensionRequest);
});
}
10 changes: 6 additions & 4 deletions dwds/test/fixtures/fakes.dart
Original file line number Diff line number Diff line change
Expand Up @@ -100,9 +100,11 @@ class FakeSseConnection implements SseConnection {
@override
StreamChannel<S> cast<S>() => null;

final _controller = StreamController<String>();
/// A [StreamController] for incoming messages on SSE connection.
final controllerIncoming = StreamController<String>();

StreamController<String> get controller => _controller;
/// A [StreamController] for outgoing messages on SSE connection.
final controllerOutgoing = StreamController<String>();

@override
StreamChannel<String> changeSink(
Expand All @@ -118,10 +120,10 @@ class FakeSseConnection implements SseConnection {
void pipe(StreamChannel<String> other) {}

@override
StreamSink<String> get sink => controller.sink;
StreamSink<String> get sink => controllerOutgoing.sink;

@override
Stream<String> get stream => controller.stream;
Stream<String> get stream => controllerIncoming.stream;

@override
StreamChannel<S> transform<S>(
Expand Down