Code coverage report for src/testing/HotObservable.ts

Statements: 100% (28 / 28)      Branches: 100% (0 / 0)      Functions: 100% (7 / 7)      Lines: 100% (25 / 25)      Ignored: none     

All files » src/testing/ » HotObservable.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 42 43 44 45 46 47 48 491   1       1 1   1 1618         1618   1618 1618     1 1629 1629 1629 1443   1629     1 1618 1618   1618 7030 7030   7030 7030           1 1    
import {Subject} from '../Subject';
import {Subscriber} from '../Subscriber';
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 HotObservable<T> extends Subject<T> implements SubscriptionLoggable {
  public subscriptions: SubscriptionLog[] = [];
  scheduler: Scheduler;
  logSubscribedFrame: () => number;
  logUnsubscribedFrame: (index: number) => void;
 
  constructor(public messages: TestMessage[],
              scheduler: Scheduler) {
    super();
    this.scheduler = scheduler;
  }
 
  protected _subscribe(subscriber: Subscriber<any>): Subscription | Function | void {
    const subject: HotObservable<T> = this;
    const index = subject.logSubscribedFrame();
    subscriber.add(new Subscription(() => {
      subject.logUnsubscribedFrame(index);
    }));
    return super._subscribe(subscriber);
  }
 
  setup() {
    const subject = this;
    const messagesLength = subject.messages.length;
    /* tslint:disable:no-var-keyword */
    for (var i = 0; i < messagesLength; i++) {
      (() => {
        var message = subject.messages[i];
   /* tslint:enable */
        subject.scheduler.schedule(
          () => { message.notification.observe(subject); },
          message.frame
        );
      })();
    }
  }
}
applyMixins(HotObservable, [SubscriptionLoggable]);