Code coverage report for src/testing/ColdObservable.ts

Statements: 100% (26 / 26)      Branches: 100% (0 / 0)      Functions: 100% (6 / 6)      Lines: 100% (23 / 23)      Ignored: none     

All files » src/testing/ » ColdObservable.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 421 1       1 1   1 1287         1287   1287 1233 1233 1233 1096   1233 1233   1287     1 1233 1233 2901 2901 2431           1 1  
import {Observable} from '../Observable';
import {Subscription} from '../Subscription';
import {Scheduler} from '../Scheduler';
import {TestMessage} from './TestMessage';
import {SubscriptionLog} from './SubscriptionLog';
import {SubscriptionLoggable} from './SubscriptionLoggable';
import {applyMixins} from '../util/applyMixins';
 
export class ColdObservable<T> extends Observable<T> implements SubscriptionLoggable {
  public subscriptions: SubscriptionLog[] = [];
  scheduler: Scheduler;
  logSubscribedFrame: () => number;
  logUnsubscribedFrame: (index: number) => void;
 
  constructor(public messages: TestMessage[],
              scheduler: Scheduler) {
    super(function (subscriber) {
      const observable: ColdObservable<T> = this;
      const index = observable.logSubscribedFrame();
      subscriber.add(new Subscription(() => {
        observable.logUnsubscribedFrame(index);
      }));
      observable.scheduleMessages(subscriber);
      return subscriber;
    });
    this.scheduler = scheduler;
  }
 
  scheduleMessages(subscriber) {
    const messagesLength = this.messages.length;
    for (let i = 0; i < messagesLength; i++) {
      let message = this.messages[i];
      subscriber.add(
        this.scheduler.schedule(({message, subscriber}) => { message.notification.observe(subscriber); },
          message.frame,
          {message, subscriber})
      );
    }
  }
}
applyMixins(ColdObservable, [SubscriptionLoggable]);