| 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 "); |