| // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:async'; |
| |
| import 'package:stream_transform/stream_transform.dart'; |
| import 'package:test/test.dart'; |
| |
| void main() { |
| test('calls function for values', () async { |
| var valuesSeen = <int>[]; |
| var stream = Stream.fromIterable([1, 2, 3]); |
| await stream.tap(valuesSeen.add).last; |
| expect(valuesSeen, [1, 2, 3]); |
| }); |
| |
| test('forwards values', () async { |
| var stream = Stream.fromIterable([1, 2, 3]); |
| var values = await stream.tap((_) {}).toList(); |
| expect(values, [1, 2, 3]); |
| }); |
| |
| test('calls function for errors', () async { |
| dynamic error; |
| var source = StreamController<int>(); |
| source.stream.tap((_) {}, onError: (e, st) { |
| error = e; |
| }).listen((_) {}, onError: (_) {}); |
| source.addError('error'); |
| await Future(() {}); |
| expect(error, 'error'); |
| }); |
| |
| test('forwards errors', () async { |
| dynamic error; |
| var source = StreamController<int>(); |
| source.stream.tap((_) {}, onError: (e, st) {}).listen((_) {}, |
| onError: (Object e) { |
| error = e; |
| }); |
| source.addError('error'); |
| await Future(() {}); |
| expect(error, 'error'); |
| }); |
| |
| test('calls function on done', () async { |
| var doneCalled = false; |
| var source = StreamController<int>(); |
| source.stream.tap((_) {}, onDone: () { |
| doneCalled = true; |
| }).listen((_) {}); |
| await source.close(); |
| expect(doneCalled, true); |
| }); |
| |
| test('forwards only once with multiple listeners on a broadcast stream', |
| () async { |
| var dataCallCount = 0; |
| var source = StreamController<int>.broadcast(); |
| source.stream.tap((_) { |
| dataCallCount++; |
| }) |
| ..listen((_) {}) |
| ..listen((_) {}); |
| source.add(1); |
| await Future(() {}); |
| expect(dataCallCount, 1); |
| }); |
| |
| test( |
| 'forwards errors only once with multiple listeners on a broadcast stream', |
| () async { |
| var errorCallCount = 0; |
| var source = StreamController<int>.broadcast(); |
| source.stream.tap((_) {}, onError: (_, __) { |
| errorCallCount++; |
| }) |
| ..listen((_) {}, onError: (_, __) {}) |
| ..listen((_) {}, onError: (_, __) {}); |
| source.addError('error'); |
| await Future(() {}); |
| expect(errorCallCount, 1); |
| }); |
| |
| test('calls onDone only once with multiple listeners on a broadcast stream', |
| () async { |
| var doneCallCount = 0; |
| var source = StreamController<int>.broadcast(); |
| source.stream.tap((_) {}, onDone: () { |
| doneCallCount++; |
| }) |
| ..listen((_) {}) |
| ..listen((_) {}); |
| await source.close(); |
| expect(doneCallCount, 1); |
| }); |
| |
| test('forwards values to multiple listeners', () async { |
| var source = StreamController<int>.broadcast(); |
| var emittedValues1 = <int>[]; |
| var emittedValues2 = <int>[]; |
| source.stream.tap((_) {}) |
| ..listen(emittedValues1.add) |
| ..listen(emittedValues2.add); |
| source.add(1); |
| await Future(() {}); |
| expect(emittedValues1, [1]); |
| expect(emittedValues2, [1]); |
| }); |
| |
| test('allows null callback', () async { |
| var stream = Stream.fromIterable([1, 2, 3]); |
| await stream.tap(null).last; |
| }); |
| } |