From 763435e430bca9070609889fcfc1c845fa832d72 Mon Sep 17 00:00:00 2001 From: Pi Songkuntham Date: Thu, 18 Jul 2019 15:59:37 -0700 Subject: [PATCH 1/2] Implemented some debugging methods. --- dwds/lib/src/servers/extension_debugger.dart | 54 +++++++++++++------- dwds/test/extension_debugger_test.dart | 14 ++++- dwds/test/fixtures/fakes.dart | 9 ++-- 3 files changed, 52 insertions(+), 25 deletions(-) diff --git a/dwds/lib/src/servers/extension_debugger.dart b/dwds/lib/src/servers/extension_debugger.dart index 5961b3363..19c4000f9 100644 --- a/dwds/lib/src/servers/extension_debugger.dart +++ b/dwds/lib/src/servers/extension_debugger.dart @@ -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 eventStream(String method, WipEventTransformer transformer) => - throw UnimplementedError(); + Future getScriptSource(String scriptId) async => + (await sendCommand('Debugger.getScriptSource', + params: {'scriptId': scriptId})) + .result['scriptSource'] as String; @override - Future getScriptSource(String scriptId) => throw UnimplementedError(); + Future pause() => sendCommand('Debugger.pause'); @override - Stream get onClosed => throw UnimplementedError(); + Future resume() => sendCommand('Debugger.resume'); @override - Stream get onGlobalObjectCleared => - throw UnimplementedError(); + Future setPauseOnExceptions(PauseState state) => + sendCommand('Debugger.setPauseOnExceptions', + params: {'state': _pauseStateToString(state)}); @override - Stream get onPaused => throw UnimplementedError(); + Future stepInto() => sendCommand('Debugger.stepInto'); @override - Stream get onResumed => throw UnimplementedError(); + Future stepOut() => sendCommand('Debugger.stepOut'); @override - Stream get onScriptParsed => throw UnimplementedError(); + Future stepOver() => sendCommand('Debugger.stepOver'); @override - Future pause() => throw UnimplementedError(); + Stream eventStream(String method, WipEventTransformer transformer) => + throw UnimplementedError(); @override - Future resume() => throw UnimplementedError(); + Stream get onClosed => throw UnimplementedError(); @override - Map get scripts => throw UnimplementedError(); + Stream get onGlobalObjectCleared => + throw UnimplementedError(); @override - Future setPauseOnExceptions(PauseState state) => throw UnimplementedError(); + Stream get onPaused => throw UnimplementedError(); @override - Future stepInto() => throw UnimplementedError(); + Stream get onResumed => throw UnimplementedError(); @override - Future stepOut() => throw UnimplementedError(); + Stream get onScriptParsed => throw UnimplementedError(); @override - Future stepOver() => throw UnimplementedError(); + Map 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'); + } + } } diff --git a/dwds/test/extension_debugger_test.dart b/dwds/test/extension_debugger_test.dart index 73d954647..12233c2a0 100644 --- a/dwds/test/extension_debugger_test.dart +++ b/dwds/test/extension_debugger_test.dart @@ -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} @@ -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); + }); } diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 2c86f4610..67023605a 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -100,9 +100,8 @@ class FakeSseConnection implements SseConnection { @override StreamChannel cast() => null; - final _controller = StreamController(); - - StreamController get controller => _controller; + final controllerIncoming = StreamController(); + final controllerOutgoing = StreamController(); @override StreamChannel changeSink( @@ -118,10 +117,10 @@ class FakeSseConnection implements SseConnection { void pipe(StreamChannel other) {} @override - StreamSink get sink => controller.sink; + StreamSink get sink => controllerOutgoing.sink; @override - Stream get stream => controller.stream; + Stream get stream => controllerIncoming.stream; @override StreamChannel transform( From 6eacc508c65c712101848bc4c46c7ad44728100e Mon Sep 17 00:00:00 2001 From: Pi Songkuntham Date: Thu, 18 Jul 2019 16:39:43 -0700 Subject: [PATCH 2/2] Documented. --- dwds/test/fixtures/fakes.dart | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dwds/test/fixtures/fakes.dart b/dwds/test/fixtures/fakes.dart index 67023605a..ba2353529 100644 --- a/dwds/test/fixtures/fakes.dart +++ b/dwds/test/fixtures/fakes.dart @@ -100,7 +100,10 @@ class FakeSseConnection implements SseConnection { @override StreamChannel cast() => null; + /// A [StreamController] for incoming messages on SSE connection. final controllerIncoming = StreamController(); + + /// A [StreamController] for outgoing messages on SSE connection. final controllerOutgoing = StreamController(); @override