152 lines
4 KiB
JavaScript
152 lines
4 KiB
JavaScript
test(() => {
|
|
const source = new Observable(subscriber => {
|
|
subscriber.next(1);
|
|
subscriber.next(2);
|
|
subscriber.next(3);
|
|
subscriber.next(4);
|
|
subscriber.complete();
|
|
});
|
|
|
|
const results = [];
|
|
|
|
source.drop(2).subscribe({
|
|
next: v => results.push(v),
|
|
error: e => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
});
|
|
|
|
assert_array_equals(results, [3, 4, "complete"]);
|
|
}, "drop(): Observable should skip the first n values from the source " +
|
|
"observable, then pass through the rest of the values and completion");
|
|
|
|
test(() => {
|
|
const error = new Error('source error');
|
|
const source = new Observable(subscriber => {
|
|
subscriber.next(1);
|
|
subscriber.next(2);
|
|
subscriber.next(3);
|
|
subscriber.next(4);
|
|
subscriber.error(error);
|
|
});
|
|
|
|
const results = [];
|
|
|
|
source.drop(2).subscribe({
|
|
next: v => results.push(v),
|
|
error: e => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
});
|
|
|
|
assert_array_equals(results, [3, 4, error]);
|
|
}, "drop(): Observable passes through errors from source Observable");
|
|
|
|
test(() => {
|
|
const error = new Error('source error');
|
|
const source = new Observable(subscriber => {
|
|
subscriber.error(error);
|
|
subscriber.next(1);
|
|
});
|
|
|
|
const results = [];
|
|
|
|
source.drop(2).subscribe({
|
|
next: v => results.push(v),
|
|
error: e => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
});
|
|
|
|
assert_array_equals(results, [error]);
|
|
}, "drop(): Observable passes through errors from source observable even " +
|
|
"before drop count is met");
|
|
|
|
test(() => {
|
|
const source = new Observable(subscriber => {
|
|
subscriber.next(1);
|
|
subscriber.complete();
|
|
});
|
|
|
|
const results = [];
|
|
|
|
source.drop(2).subscribe({
|
|
next: v => results.push(v),
|
|
error: e => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
});
|
|
|
|
assert_array_equals(results, ["complete"]);
|
|
}, "drop(): Observable passes through completions from source observable even " +
|
|
"before drop count is met");
|
|
|
|
test(() => {
|
|
let sourceTeardownCalled = false;
|
|
const source = new Observable(subscriber => {
|
|
subscriber.addTeardown(() => sourceTeardownCalled = true);
|
|
subscriber.next(1);
|
|
subscriber.next(2);
|
|
subscriber.next(3);
|
|
subscriber.next(4);
|
|
subscriber.next(5);
|
|
subscriber.complete();
|
|
});
|
|
|
|
const results = [];
|
|
|
|
const controller = new AbortController();
|
|
|
|
source.drop(2).subscribe({
|
|
next: v => {
|
|
results.push(v);
|
|
if (v === 3) {
|
|
controller.abort();
|
|
}
|
|
},
|
|
error: (e) => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
}, {signal: controller.signal});
|
|
|
|
assert_true(sourceTeardownCalled,
|
|
"Aborting outer observable unsubscribes the source observable");
|
|
assert_array_equals(results, [3]);
|
|
}, "drop(): Unsubscribing from the Observable returned by drop() also " +
|
|
"unsubscribes from the source Observable");
|
|
|
|
test(() => {
|
|
const source = new Observable(subscriber => {
|
|
subscriber.next(1);
|
|
subscriber.next(2);
|
|
subscriber.next(3);
|
|
subscriber.complete();
|
|
});
|
|
|
|
const results = [];
|
|
|
|
source.drop(0).subscribe({
|
|
next: v => results.push(v),
|
|
error: e => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
});
|
|
|
|
assert_array_equals(results, [1, 2, 3, "complete"],
|
|
"Source Observable is mirrored");
|
|
}, "drop(): A drop amount of 0 simply mirrors the source Observable");
|
|
|
|
test(() => {
|
|
const source = new Observable(subscriber => {
|
|
subscriber.next(1);
|
|
subscriber.next(2);
|
|
subscriber.next(3);
|
|
subscriber.complete();
|
|
});
|
|
|
|
const results = [];
|
|
|
|
// Passing `-1` here is subject to the Web IDL integer conversion semantics,
|
|
// which converts the drop amount to the maximum of `18446744073709551615`.
|
|
source.drop(-1).subscribe({
|
|
next: v => results.push(v),
|
|
error: e => results.push(e),
|
|
complete: () => results.push("complete"),
|
|
});
|
|
|
|
assert_array_equals(results, ["complete"], "Source Observable is mirrored");
|
|
}, "drop(): Passing negative value wraps to maximum value ");
|