1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- import assert from 'assert';
- import { testMethodProperty } from './properties.js';
- describe('from', () => {
- const iterable = {
- *[Symbol.iterator]() {
- yield 1;
- yield 2;
- yield 3;
- },
- };
- it('is a method on Observable', () => {
- testMethodProperty(Observable, 'from', {
- configurable: true,
- writable: true,
- length: 1,
- });
- });
- it('throws if the argument is null', () => {
- assert.throws(() => Observable.from(null));
- });
- it('throws if the argument is undefined', () => {
- assert.throws(() => Observable.from(undefined));
- });
- it('throws if the argument is not observable or iterable', () => {
- assert.throws(() => Observable.from({}));
- });
- describe('observables', () => {
- it('returns the input if the constructor matches "this"', () => {
- let ctor = function() {};
- let observable = new Observable(() => {});
- observable.constructor = ctor;
- assert.equal(Observable.from.call(ctor, observable), observable);
- });
- it('wraps the input if it is not an instance of Observable', () => {
- let obj = {
- 'constructor': Observable,
- [Symbol.observable]() { return this },
- };
- assert.ok(Observable.from(obj) !== obj);
- });
- it('throws if @@observable property is not a method', () => {
- assert.throws(() => Observable.from({
- [Symbol.observable]: 1
- }));
- });
- it('returns an observable wrapping @@observable result', () => {
- let inner = {
- subscribe(x) {
- observer = x;
- return () => { cleanupCalled = true };
- },
- };
- let observer;
- let cleanupCalled = true;
- let observable = Observable.from({
- [Symbol.observable]() { return inner },
- });
- observable.subscribe();
- assert.equal(typeof observer.next, 'function');
- observer.complete();
- assert.equal(cleanupCalled, true);
- });
- });
- describe('iterables', () => {
- it('throws if @@iterator is not a method', () => {
- assert.throws(() => Observable.from({ [Symbol.iterator]: 1 }));
- });
- it('returns an observable wrapping iterables', async () => {
- let calls = [];
- let subscription = Observable.from(iterable).subscribe({
- next(v) { calls.push(['next', v]) },
- complete() { calls.push(['complete']) },
- });
- assert.deepEqual(calls, []);
- await null;
- assert.deepEqual(calls, [
- ['next', 1],
- ['next', 2],
- ['next', 3],
- ['complete'],
- ]);
- });
- });
- });
|