100 lines
3 KiB
Dart
100 lines
3 KiB
Dart
|
import 'dart:async';
|
||
|
|
||
|
import 'package:angel3_reactivex/angel3_reactivex.dart';
|
||
|
import 'package:test/test.dart';
|
||
|
|
||
|
import '../utils.dart';
|
||
|
|
||
|
void main() {
|
||
|
test('Rx.materialize.happyPath', () async {
|
||
|
final stream = Stream.value(1);
|
||
|
final notifications = <StreamNotification<int>>[];
|
||
|
|
||
|
stream.materialize().listen(notifications.add, onDone: expectAsync0(() {
|
||
|
expect(notifications,
|
||
|
[StreamNotification.data(1), StreamNotification<int>.done()]);
|
||
|
}));
|
||
|
});
|
||
|
|
||
|
test('Rx.materialize.reusable', () async {
|
||
|
final transformer = MaterializeStreamTransformer<int>();
|
||
|
final stream = Stream.value(1).asBroadcastStream();
|
||
|
final notificationsA = <StreamNotification<int>>[],
|
||
|
notificationsB = <StreamNotification<int>>[];
|
||
|
|
||
|
stream.transform(transformer).listen(notificationsA.add,
|
||
|
onDone: expectAsync0(() {
|
||
|
expect(notificationsA,
|
||
|
[StreamNotification.data(1), StreamNotification<int>.done()]);
|
||
|
}));
|
||
|
|
||
|
stream.transform(transformer).listen(notificationsB.add,
|
||
|
onDone: expectAsync0(() {
|
||
|
expect(notificationsB,
|
||
|
[StreamNotification.data(1), StreamNotification<int>.done()]);
|
||
|
}));
|
||
|
});
|
||
|
|
||
|
test('materializeTransformer.happyPath', () async {
|
||
|
final stream = Stream.fromIterable(const [1]);
|
||
|
final notifications = <StreamNotification<int>>[];
|
||
|
|
||
|
stream
|
||
|
.transform(MaterializeStreamTransformer<int>())
|
||
|
.listen(notifications.add, onDone: expectAsync0(() {
|
||
|
expect(notifications,
|
||
|
[StreamNotification.data(1), StreamNotification<int>.done()]);
|
||
|
}));
|
||
|
});
|
||
|
|
||
|
test('materializeTransformer.sadPath', () async {
|
||
|
final stream = Stream<int>.error(Exception());
|
||
|
final notifications = <StreamNotification<int>>[];
|
||
|
|
||
|
stream
|
||
|
.transform(MaterializeStreamTransformer<int>())
|
||
|
.listen(notifications.add,
|
||
|
onError: expectAsync2((Exception e, StackTrace s) {
|
||
|
// Check to ensure the stream does not come to this point
|
||
|
expect(true, isFalse);
|
||
|
}, count: 0), onDone: expectAsync0(() {
|
||
|
expect(notifications.length, 2);
|
||
|
expect(notifications[0].isError, isTrue);
|
||
|
expect(notifications[1].isDone, isTrue);
|
||
|
}));
|
||
|
});
|
||
|
|
||
|
test('materializeTransformer.onPause.onResume', () async {
|
||
|
final stream = Stream.fromIterable(const [1]);
|
||
|
final notifications = <StreamNotification<int>>[];
|
||
|
|
||
|
stream
|
||
|
.transform(MaterializeStreamTransformer<int>())
|
||
|
.listen(notifications.add, onDone: expectAsync0(() {
|
||
|
expect(notifications, <StreamNotification<int>>[
|
||
|
StreamNotification.data(1),
|
||
|
StreamNotification<int>.done()
|
||
|
]);
|
||
|
}))
|
||
|
..pause()
|
||
|
..resume();
|
||
|
});
|
||
|
|
||
|
test('Rx.materialize accidental broadcast', () async {
|
||
|
final controller = StreamController<int>();
|
||
|
|
||
|
final stream = controller.stream.materialize();
|
||
|
|
||
|
stream.listen(null);
|
||
|
expect(() => stream.listen(null), throwsStateError);
|
||
|
|
||
|
controller.add(1);
|
||
|
});
|
||
|
|
||
|
test('Rx.materialize.nullable', () {
|
||
|
nullableTest<StreamNotification<String?>>(
|
||
|
(s) => s.materialize(),
|
||
|
);
|
||
|
});
|
||
|
}
|