Skip to content

Commit fefc70b

Browse files
committed
Add StreamOutput
1 parent 54e1f86 commit fefc70b

File tree

3 files changed

+74
-0
lines changed

3 files changed

+74
-0
lines changed

lib/logger.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ export 'src/ansi_color.dart';
66
export 'src/filters/debug_filter.dart';
77
export 'src/filters/production_filter.dart';
88
export 'src/outputs/console_output.dart';
9+
export 'src/outputs/stream_output.dart';
910
export 'src/outputs/memory_output.dart';
1011
export 'src/printers/pretty_printer.dart';
1112
export 'src/printers/simple_printer.dart';

lib/src/outputs/stream_output.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'dart:async';
2+
3+
import 'package:logger/src/logger.dart';
4+
import 'package:logger/src/log_output.dart';
5+
6+
class StreamOutput extends LogOutput {
7+
StreamController<List<String>> _controller;
8+
bool _shouldForward = false;
9+
10+
StreamOutput() {
11+
_controller = StreamController<List<String>>(
12+
onListen: () => _shouldForward = true,
13+
onPause: () => _shouldForward = false,
14+
onResume: () => _shouldForward = true,
15+
onCancel: () => _shouldForward = false,
16+
);
17+
}
18+
19+
Stream<List<String>> get stream => _controller.stream;
20+
21+
@override
22+
void output(OutputEvent event) {
23+
if (!_shouldForward) {
24+
return;
25+
}
26+
27+
_controller.add(event.lines);
28+
}
29+
30+
@override
31+
void destroy() {
32+
_controller.close();
33+
}
34+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import 'package:test/test.dart';
2+
import 'package:logger/logger.dart';
3+
4+
void main() {
5+
test('writes to a Stream', () {
6+
var out = StreamOutput();
7+
8+
out.stream.listen((var e) {
9+
expect(e, ['hi there']);
10+
});
11+
12+
out.output(OutputEvent(Level.debug, ['hi there']));
13+
});
14+
15+
test('respects listen', () {
16+
var out = StreamOutput();
17+
18+
out.output(OutputEvent(Level.debug, ['dropped']));
19+
20+
out.stream.listen((var e) {
21+
expect(e, ['hi there']);
22+
});
23+
24+
out.output(OutputEvent(Level.debug, ['hi there']));
25+
});
26+
27+
test('respects pause', () {
28+
var out = StreamOutput();
29+
30+
var sub = out.stream.listen((var e) {
31+
expect(e, ['hi there']);
32+
});
33+
34+
sub.pause();
35+
out.output(OutputEvent(Level.debug, ['dropped']));
36+
sub.resume();
37+
out.output(OutputEvent(Level.debug, ['hi there']));
38+
});
39+
}

0 commit comments

Comments
 (0)