Skip to content

Commit

Permalink
add pipe2-pipe9 with tests
Browse files Browse the repository at this point in the history
  • Loading branch information
lukepighetti authored and renggli committed Jul 20, 2019
1 parent 218c536 commit 60767a3
Show file tree
Hide file tree
Showing 2 changed files with 246 additions and 0 deletions.
109 changes: 109 additions & 0 deletions lib/src/core/observable.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,115 @@ abstract class Observable<T> {
_OperatorObservable(this, operator);

Subscription subscribe(Observer<T> observer);

/// Pipe two [Operator], identical to multiple [Observable.lift] calls.
Observable<T2> pipe2<T1, T2>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
) =>
lift(operator1).lift(operator2);

/// Pipe three [Operator], identical to multiple [Observable.lift] calls.
Observable<T3> pipe3<T1, T2, T3>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
) =>
lift(operator1).lift(operator2).lift(operator3);

/// Pipe four [Operator], identical to multiple [Observable.lift] calls.
Observable<T4> pipe4<T1, T2, T3, T4>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
Operator<T3, T4> operator4,
) =>
lift(operator1).lift(operator2).lift(operator3).lift(operator4);

/// Pipe five [Operator], identical to multiple [Observable.lift] calls.
Observable<T5> pipe5<T1, T2, T3, T4, T5>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
Operator<T3, T4> operator4,
Operator<T4, T5> operator5) =>
lift(operator1)
.lift(operator2)
.lift(operator3)
.lift(operator4)
.lift(operator5);

/// Pipe six [Operator], identical to multiple [Observable.lift] calls.
Observable<T6> pipe6<T1, T2, T3, T4, T5, T6>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
Operator<T3, T4> operator4,
Operator<T4, T5> operator5,
Operator<T5, T6> operator6) =>
lift(operator1)
.lift(operator2)
.lift(operator3)
.lift(operator4)
.lift(operator5)
.lift(operator6);

/// Pipe seven [Operator], identical to multiple [Observable.lift] calls.
Observable<T7> pipe7<T1, T2, T3, T4, T5, T6, T7>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
Operator<T3, T4> operator4,
Operator<T4, T5> operator5,
Operator<T5, T6> operator6,
Operator<T6, T7> operator7) =>
lift(operator1)
.lift(operator2)
.lift(operator3)
.lift(operator4)
.lift(operator5)
.lift(operator6)
.lift(operator7);

/// Pipe eight [Operator], identical to multiple [Observable.lift] calls.
Observable<T8> pipe8<T1, T2, T3, T4, T5, T6, T7, T8>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
Operator<T3, T4> operator4,
Operator<T4, T5> operator5,
Operator<T5, T6> operator6,
Operator<T6, T7> operator7,
Operator<T7, T8> operator8) =>
lift(operator1)
.lift(operator2)
.lift(operator3)
.lift(operator4)
.lift(operator5)
.lift(operator6)
.lift(operator7)
.lift(operator8);

/// Pipe nine [Operator], identical to multiple [Observable.lift] calls.
Observable<T9> pipe9<T1, T2, T3, T4, T5, T6, T7, T8, T9>(
Operator<T, T1> operator1,
Operator<T1, T2> operator2,
Operator<T2, T3> operator3,
Operator<T3, T4> operator4,
Operator<T4, T5> operator5,
Operator<T5, T6> operator6,
Operator<T6, T7> operator7,
Operator<T7, T8> operator8,
Operator<T8, T9> operator9) =>
lift(operator1)
.lift(operator2)
.lift(operator3)
.lift(operator4)
.lift(operator5)
.lift(operator6)
.lift(operator7)
.lift(operator8)
.lift(operator9);
}

class _OperatorObservable<T, R> extends Observable<R> {
Expand Down
137 changes: 137 additions & 0 deletions test/pipe_test.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
library rx.test.pipe_test;

import 'package:rx/operators.dart';
import 'package:rx/testing.dart';
import 'package:test/test.dart' hide isEmpty;

const Map<String, bool> boolMap = {'t': true, 'f': false};

void main() {
final scheduler = TestScheduler();
setUp(scheduler.setUp);
tearDown(scheduler.tearDown);

group('pipe', () {
test('pipe 2', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual = input.pipe2<String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '2', 'b': '2', 'c': '2'}));
});
test('pipe 3', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual = input.pipe3<String, String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '3', 'b': '3', 'c': '3'}));
});
test('pipe 4', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual = input.pipe4<String, String, String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
map<String, String>((v) => '4'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '4', 'b': '4', 'c': '4'}));
});
test('pipe 5', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual = input.pipe5<String, String, String, String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
map<String, String>((v) => '4'),
map<String, String>((v) => '5'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '5', 'b': '5', 'c': '5'}));
});
test('pipe 6', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual =
input.pipe6<String, String, String, String, String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
map<String, String>((v) => '4'),
map<String, String>((v) => '5'),
map<String, String>((v) => '6'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '6', 'b': '6', 'c': '6'}));
});
test('pipe 7', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual =
input.pipe7<String, String, String, String, String, String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
map<String, String>((v) => '4'),
map<String, String>((v) => '5'),
map<String, String>((v) => '6'),
map<String, String>((v) => '7'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '7', 'b': '7', 'c': '7'}));
});
test('pipe 8', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual = input.pipe8<String, String, String, String, String, String,
String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
map<String, String>((v) => '4'),
map<String, String>((v) => '5'),
map<String, String>((v) => '6'),
map<String, String>((v) => '7'),
map<String, String>((v) => '8'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '8', 'b': '8', 'c': '8'}));
});

test('pipe 9', () {
final input = scheduler.cold<String>('--a--b--c--|');
final actual = input.pipe9<String, String, String, String, String, String,
String, String, String>(
map<String, String>((v) => '1'),
map<String, String>((v) => '2'),
map<String, String>((v) => '3'),
map<String, String>((v) => '4'),
map<String, String>((v) => '5'),
map<String, String>((v) => '6'),
map<String, String>((v) => '7'),
map<String, String>((v) => '8'),
map<String, String>((v) => '9'),
);
expect(
actual,
scheduler.isObservable('--a--b--c--|',
values: {'a': '9', 'b': '9', 'c': '9'}));
});
});
}

0 comments on commit 60767a3

Please sign in to comment.