Skip to content

Commit 85b04ee

Browse files
Pi Songkunthamgrouma
authored andcommitted
Implemented some debugging methods. (#503)
* Implemented some debugging methods.
1 parent 1837b9a commit 85b04ee

File tree

3 files changed

+54
-24
lines changed

3 files changed

+54
-24
lines changed

dwds/lib/src/servers/extension_debugger.dart

Lines changed: 36 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,52 +66,70 @@ class ExtensionDebugger implements WipDebugger {
6666
}
6767

6868
@override
69-
Future disable() => throw UnimplementedError();
69+
Future disable() => sendCommand('Debugger.disable');
7070

7171
@override
72-
Future enable() => throw UnimplementedError();
72+
Future enable() => sendCommand('Debugger.enable');
7373

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

7880
@override
79-
Future<String> getScriptSource(String scriptId) => throw UnimplementedError();
81+
Future pause() => sendCommand('Debugger.pause');
8082

8183
@override
82-
Stream<WipDomain> get onClosed => throw UnimplementedError();
84+
Future resume() => sendCommand('Debugger.resume');
8385

8486
@override
85-
Stream<GlobalObjectClearedEvent> get onGlobalObjectCleared =>
86-
throw UnimplementedError();
87+
Future setPauseOnExceptions(PauseState state) =>
88+
sendCommand('Debugger.setPauseOnExceptions',
89+
params: {'state': _pauseStateToString(state)});
8790

8891
@override
89-
Stream<DebuggerPausedEvent> get onPaused => throw UnimplementedError();
92+
Future stepInto() => sendCommand('Debugger.stepInto');
9093

9194
@override
92-
Stream<DebuggerResumedEvent> get onResumed => throw UnimplementedError();
95+
Future stepOut() => sendCommand('Debugger.stepOut');
9396

9497
@override
95-
Stream<ScriptParsedEvent> get onScriptParsed => throw UnimplementedError();
98+
Future stepOver() => sendCommand('Debugger.stepOver');
9699

97100
@override
98-
Future pause() => throw UnimplementedError();
101+
Stream<T> eventStream<T>(String method, WipEventTransformer<T> transformer) =>
102+
throw UnimplementedError();
99103

100104
@override
101-
Future resume() => throw UnimplementedError();
105+
Stream<WipDomain> get onClosed => throw UnimplementedError();
102106

103107
@override
104-
Map<String, WipScript> get scripts => throw UnimplementedError();
108+
Stream<GlobalObjectClearedEvent> get onGlobalObjectCleared =>
109+
throw UnimplementedError();
105110

106111
@override
107-
Future setPauseOnExceptions(PauseState state) => throw UnimplementedError();
112+
Stream<DebuggerPausedEvent> get onPaused => throw UnimplementedError();
108113

109114
@override
110-
Future stepInto() => throw UnimplementedError();
115+
Stream<DebuggerResumedEvent> get onResumed => throw UnimplementedError();
111116

112117
@override
113-
Future stepOut() => throw UnimplementedError();
118+
Stream<ScriptParsedEvent> get onScriptParsed => throw UnimplementedError();
114119

115120
@override
116-
Future stepOver() => throw UnimplementedError();
121+
Map<String, WipScript> get scripts => throw UnimplementedError();
122+
123+
String _pauseStateToString(PauseState state) {
124+
switch (state) {
125+
case PauseState.all:
126+
return 'all';
127+
case PauseState.none:
128+
return 'none';
129+
case PauseState.uncaught:
130+
return 'uncaught';
131+
default:
132+
throw ArgumentError('unknown state: $state');
133+
}
134+
}
117135
}

dwds/test/extension_debugger_test.dart

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ void main() async {
2222
extensionDebugger = ExtensionDebugger(connection);
2323
});
2424

25-
test('can send a command & receive a response', () async {
25+
test('can receive a response', () async {
2626
var extensionResponse = ExtensionResponse((b) => b
2727
..result = jsonEncode({
2828
'result': {'value': 3.14}
@@ -34,9 +34,19 @@ void main() async {
3434
params: {'expression': '\$pi'}).then((response) {
3535
resultCompleter.complete(response);
3636
}));
37-
connection.controller
37+
connection.controllerIncoming.sink
3838
.add(jsonEncode(serializers.serialize(extensionResponse)));
3939
var response = await resultCompleter.future;
4040
expect(response.result['value'], 3.14);
4141
});
42+
43+
test('can send a request', () async {
44+
var extensionRequest = ExtensionRequest((b) => b
45+
..id = 0
46+
..command = 'Debugger.pause');
47+
unawaited(extensionDebugger.pause());
48+
var request = serializers.deserialize(
49+
jsonDecode(await connection.controllerOutgoing.stream.first));
50+
expect(request, extensionRequest);
51+
});
4252
}

dwds/test/fixtures/fakes.dart

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,11 @@ class FakeSseConnection implements SseConnection {
100100
@override
101101
StreamChannel<S> cast<S>() => null;
102102

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

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

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

120122
@override
121-
StreamSink<String> get sink => controller.sink;
123+
StreamSink<String> get sink => controllerOutgoing.sink;
122124

123125
@override
124-
Stream<String> get stream => controller.stream;
126+
Stream<String> get stream => controllerIncoming.stream;
125127

126128
@override
127129
StreamChannel<S> transform<S>(

0 commit comments

Comments
 (0)