Be more explicit about JSON error handling. R=rnystrom@google.com Review URL: https://codereview.chromium.org//1658833002 .
diff --git a/pkgs/stream_channel/CHANGELOG.md b/pkgs/stream_channel/CHANGELOG.md index c85bbe3..d101ea0 100644 --- a/pkgs/stream_channel/CHANGELOG.md +++ b/pkgs/stream_channel/CHANGELOG.md
@@ -1,3 +1,7 @@ +## 1.0.2 + +* Be more explicit about `JsonDocumentTransformer`'s error-handling behavior. + ## 1.0.1 * Fix `MultiChannel`'s constructor to take a `StreamChannel`. This is
diff --git a/pkgs/stream_channel/lib/src/json_document_transformer.dart b/pkgs/stream_channel/lib/src/json_document_transformer.dart index 8d8dcce..19b2e08 100644 --- a/pkgs/stream_channel/lib/src/json_document_transformer.dart +++ b/pkgs/stream_channel/lib/src/json_document_transformer.dart
@@ -17,6 +17,10 @@ /// /// This decodes JSON that's emitted by the transformed channel's stream, and /// encodes objects so that JSON is passed to the transformed channel's sink. +/// +/// If the transformed channel emits invalid JSON, this emits a +/// [FormatException]. If an unencodable object is added to the sink, it +/// synchronously throws a [JsonUnsupportedObjectError]. class JsonDocumentTransformer implements StreamChannelTransformer<String, Object> { /// The underlying codec that implements the encoding and decoding logic.
diff --git a/pkgs/stream_channel/pubspec.yaml b/pkgs/stream_channel/pubspec.yaml index 09df4a7..54e9198 100644 --- a/pkgs/stream_channel/pubspec.yaml +++ b/pkgs/stream_channel/pubspec.yaml
@@ -1,5 +1,5 @@ name: stream_channel -version: 1.0.1 +version: 1.0.2 description: An abstraction for two-way communication channels. author: Dart Team <misc@dartlang.org> homepage: https://github.com/dart-lang/stream_channel
diff --git a/pkgs/stream_channel/test/json_document_transformer_test.dart b/pkgs/stream_channel/test/json_document_transformer_test.dart index fec3d2a..65a3497 100644 --- a/pkgs/stream_channel/test/json_document_transformer_test.dart +++ b/pkgs/stream_channel/test/json_document_transformer_test.dart
@@ -47,4 +47,16 @@ transformed.sink.add(new Object()); expect(sinkController.stream.first, completion(equals('"encoded"'))); }); + + test("emits a stream error when incoming JSON is malformed", () { + var transformed = channel.transform(jsonDocument); + streamController.add("{invalid"); + expect(transformed.stream.first, throwsFormatException); + }); + + test("synchronously throws if an unencodable object is added", () { + var transformed = channel.transform(jsonDocument); + expect(() => transformed.sink.add(new Object()), + throwsA(new isInstanceOf<JsonUnsupportedObjectError>())); + }); }