126 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import {
 | 
						|
  ddescribe,
 | 
						|
  describe,
 | 
						|
  it,
 | 
						|
  iit,
 | 
						|
  xit,
 | 
						|
  expect,
 | 
						|
  beforeEach,
 | 
						|
  afterEach,
 | 
						|
  AsyncTestCompleter,
 | 
						|
  inject,
 | 
						|
  proxy,
 | 
						|
  SpyObject
 | 
						|
} from 'angular2/test_lib';
 | 
						|
 | 
						|
import {IMPLEMENTS} from 'angular2/src/facade/lang';
 | 
						|
import {WrappedValue} from 'angular2/src/change_detection/pipes/pipe';
 | 
						|
import {ObservablePipe} from 'angular2/src/change_detection/pipes/observable_pipe';
 | 
						|
import {ChangeDetectorRef} from 'angular2/src/change_detection/change_detector_ref';
 | 
						|
import {EventEmitter, ObservableWrapper, TimerWrapper} from 'angular2/src/facade/async';
 | 
						|
 | 
						|
export function main() {
 | 
						|
  describe("ObservablePipe", () => {
 | 
						|
    var emitter;
 | 
						|
    var pipe;
 | 
						|
    var ref;
 | 
						|
    var message = new Object();
 | 
						|
 | 
						|
    beforeEach(() => {
 | 
						|
      emitter = new EventEmitter();
 | 
						|
      ref = new SpyChangeDetectorRef();
 | 
						|
      pipe = new ObservablePipe(ref);
 | 
						|
    });
 | 
						|
 | 
						|
    describe("supports", () => {
 | 
						|
      it("should support observables", () => { expect(pipe.supports(emitter)).toBe(true); });
 | 
						|
 | 
						|
      it("should not support other objects", () => {
 | 
						|
        expect(pipe.supports("string")).toBe(false);
 | 
						|
        expect(pipe.supports(null)).toBe(false);
 | 
						|
      });
 | 
						|
    });
 | 
						|
 | 
						|
    describe("transform", () => {
 | 
						|
      it("should return null when subscribing to an observable",
 | 
						|
         () => { expect(pipe.transform(emitter)).toBe(null); });
 | 
						|
 | 
						|
      it("should return the latest available value wrapped",
 | 
						|
         inject([AsyncTestCompleter], (async) => {
 | 
						|
           pipe.transform(emitter);
 | 
						|
 | 
						|
           ObservableWrapper.callNext(emitter, message);
 | 
						|
 | 
						|
           TimerWrapper.setTimeout(() => {
 | 
						|
             expect(pipe.transform(emitter)).toEqual(new WrappedValue(message));
 | 
						|
             async.done();
 | 
						|
           }, 0)
 | 
						|
         }));
 | 
						|
 | 
						|
 | 
						|
      it("should return same value when nothing has changed since the last call",
 | 
						|
         inject([AsyncTestCompleter], (async) => {
 | 
						|
           pipe.transform(emitter);
 | 
						|
           ObservableWrapper.callNext(emitter, message);
 | 
						|
 | 
						|
           TimerWrapper.setTimeout(() => {
 | 
						|
             pipe.transform(emitter);
 | 
						|
             expect(pipe.transform(emitter)).toBe(message);
 | 
						|
             async.done();
 | 
						|
           }, 0)
 | 
						|
         }));
 | 
						|
 | 
						|
      it("should dispose of the existing subscription when subscribing to a new observable",
 | 
						|
         inject([AsyncTestCompleter], (async) => {
 | 
						|
           pipe.transform(emitter);
 | 
						|
 | 
						|
           var newEmitter = new EventEmitter();
 | 
						|
           expect(pipe.transform(newEmitter)).toBe(null);
 | 
						|
 | 
						|
           // this should not affect the pipe
 | 
						|
           ObservableWrapper.callNext(emitter, message);
 | 
						|
 | 
						|
           TimerWrapper.setTimeout(() => {
 | 
						|
             expect(pipe.transform(newEmitter)).toBe(null);
 | 
						|
             async.done();
 | 
						|
           }, 0)
 | 
						|
         }));
 | 
						|
 | 
						|
      it("should request a change detection check upon receiving a new value",
 | 
						|
         inject([AsyncTestCompleter], (async) => {
 | 
						|
           pipe.transform(emitter);
 | 
						|
           ObservableWrapper.callNext(emitter, message);
 | 
						|
 | 
						|
           TimerWrapper.setTimeout(() => {
 | 
						|
             expect(ref.spy('requestCheck')).toHaveBeenCalled();
 | 
						|
             async.done();
 | 
						|
           }, 0)
 | 
						|
         }));
 | 
						|
    });
 | 
						|
 | 
						|
    describe("onDestroy", () => {
 | 
						|
      it("should do nothing when no subscription",
 | 
						|
         () => { expect(() => pipe.onDestroy()).not.toThrow(); });
 | 
						|
 | 
						|
      it("should dispose of the existing subscription", inject([AsyncTestCompleter], (async) => {
 | 
						|
           pipe.transform(emitter);
 | 
						|
           pipe.onDestroy();
 | 
						|
 | 
						|
           ObservableWrapper.callNext(emitter, message);
 | 
						|
 | 
						|
           TimerWrapper.setTimeout(() => {
 | 
						|
             expect(pipe.transform(emitter)).toBe(null);
 | 
						|
             async.done();
 | 
						|
           }, 0)
 | 
						|
         }));
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
@proxy
 | 
						|
@IMPLEMENTS(ChangeDetectorRef)
 | 
						|
class SpyChangeDetectorRef extends SpyObject {
 | 
						|
  constructor() { super(ChangeDetectorRef); }
 | 
						|
  noSuchMethod(m) { return super.noSuchMethod(m) }
 | 
						|
}
 |