| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  | import {ddescribe, describe, it, iit, xit, expect, beforeEach, afterEach, | 
					
						
							|  |  |  |   AsyncTestCompleter, inject, proxy, SpyObject} from 'angular2/test_lib'; | 
					
						
							|  |  |  | import {IMPLEMENTS} from 'angular2/src/facade/lang'; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  | import {WrappedValue} from 'angular2/src/change_detection/pipes/pipe'; | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  | import {AsyncPipe} from 'angular2/src/change_detection/pipes/async_pipe'; | 
					
						
							|  |  |  | import {ChangeDetectorRef} from 'angular2/src/change_detection/change_detector_ref'; | 
					
						
							|  |  |  | import {EventEmitter, Observable, ObservableWrapper, PromiseWrapper} from 'angular2/src/facade/async'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   describe("AsyncPipe", () => { | 
					
						
							|  |  |  |     var emitter; | 
					
						
							|  |  |  |     var pipe; | 
					
						
							|  |  |  |     var ref; | 
					
						
							|  |  |  |     var message = new Object(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     beforeEach(() => { | 
					
						
							|  |  |  |       emitter = new EventEmitter(); | 
					
						
							|  |  |  |       ref = new SpyChangeDetectorRef(); | 
					
						
							|  |  |  |       pipe = new AsyncPipe(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); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  |       it("should return the latest available value wrapped", inject([AsyncTestCompleter], (async) => { | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  |         pipe.transform(emitter); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ObservableWrapper.callNext(emitter, message); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         PromiseWrapper.setTimeout(() => { | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  |           expect(pipe.transform(emitter)).toEqual(new WrappedValue(message)); | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  |           async.done(); | 
					
						
							|  |  |  |         }, 0) | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  |       it("should return same value when nothing has changed since the last call", | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  |           inject([AsyncTestCompleter], (async) => { | 
					
						
							|  |  |  |         pipe.transform(emitter); | 
					
						
							|  |  |  |         ObservableWrapper.callNext(emitter, message); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         PromiseWrapper.setTimeout(() => { | 
					
						
							|  |  |  |           pipe.transform(emitter); | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  |           expect(pipe.transform(emitter)).toBe(message); | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  |           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); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  |         // this should not affect the pipe
 | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  |         ObservableWrapper.callNext(emitter, message); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         PromiseWrapper.setTimeout(() => { | 
					
						
							| 
									
										
										
										
											2015-04-23 17:19:29 -07:00
										 |  |  |           expect(pipe.transform(newEmitter)).toBe(null); | 
					
						
							| 
									
										
										
										
											2015-04-19 12:45:08 -07:00
										 |  |  |           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); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         PromiseWrapper.setTimeout(() => { | 
					
						
							|  |  |  |           expect(ref.spy('requestCheck')).toHaveBeenCalled(); | 
					
						
							|  |  |  |           async.done(); | 
					
						
							|  |  |  |         }, 0) | 
					
						
							|  |  |  |       })); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe("onDestroy", () => { | 
					
						
							|  |  |  |       it("should do nothing when no subscription", () => { | 
					
						
							|  |  |  |         pipe.onDestroy(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it("should dispose of the existing subscription", inject([AsyncTestCompleter], (async) => { | 
					
						
							|  |  |  |         pipe.transform(emitter); | 
					
						
							|  |  |  |         pipe.onDestroy(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ObservableWrapper.callNext(emitter, message); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         PromiseWrapper.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)} | 
					
						
							|  |  |  | } |