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) } | ||
|  | } |