BREAKING CHANGE:
Previously, pipes that wanted to be notified when they were destroyed
would implement the PipeOnDestroy interface and name the callback
`onDestroy`. This change removes the PipeOnDestroy interface and
instead uses Angular's lifecycle interface `OnDestroy`, with the
`ngOnDestroy` method.
Before:
```
import {Pipe, PipeOnDestroy} from 'angular2/angular2';
@Pipe({pure: false})
export class MyPipe implements PipeOnDestroy {
  onDestroy() {}
}
```
After:
import {Pipe, OnDestroy} from 'angular2/angular2';
@Pipe({pure: false})
export class MyPipe implements PipeOnDestroy {
  ngOnDestroy() {}
}
		
	
			
		
			
				
	
	
		
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| import {
 | |
|   ddescribe,
 | |
|   xdescribe,
 | |
|   describe,
 | |
|   it,
 | |
|   iit,
 | |
|   xit,
 | |
|   expect,
 | |
|   beforeEach,
 | |
|   afterEach
 | |
| } from 'angular2/testing_internal';
 | |
| 
 | |
| import {Injector, Inject, provide, Pipe, PipeTransform, OnDestroy} from 'angular2/core';
 | |
| import {ProtoPipes, Pipes} from 'angular2/src/core/pipes/pipes';
 | |
| import {PipeProvider} from 'angular2/src/core/pipes/pipe_provider';
 | |
| 
 | |
| class PipeA implements PipeTransform, OnDestroy {
 | |
|   transform(a, b) {}
 | |
|   ngOnDestroy() {}
 | |
| }
 | |
| 
 | |
| class PipeB implements PipeTransform, OnDestroy {
 | |
|   dep;
 | |
|   constructor(@Inject("dep") dep: any) { this.dep = dep; }
 | |
|   transform(a, b) {}
 | |
|   ngOnDestroy() {}
 | |
| }
 | |
| 
 | |
| export function main() {
 | |
|   describe("Pipes", () => {
 | |
|     var injector;
 | |
| 
 | |
|     beforeEach(() => {
 | |
|       injector = Injector.resolveAndCreate([provide('dep', {useValue: 'dependency'})]);
 | |
|     });
 | |
| 
 | |
|     it('should instantiate a pipe', () => {
 | |
|       var proto =
 | |
|           ProtoPipes.fromProviders([PipeProvider.createFromType(PipeA, new Pipe({name: 'a'}))]);
 | |
|       var pipes = new Pipes(proto, injector);
 | |
| 
 | |
|       expect(pipes.get("a").pipe).toBeAnInstanceOf(PipeA);
 | |
|     });
 | |
| 
 | |
|     it('should throw when no pipe found', () => {
 | |
|       var proto = ProtoPipes.fromProviders([]);
 | |
|       var pipes = new Pipes(proto, injector);
 | |
|       expect(() => pipes.get("invalid")).toThrowErrorWith("Cannot find pipe 'invalid'");
 | |
|     });
 | |
| 
 | |
|     it('should inject dependencies from the provided injector', () => {
 | |
|       var proto =
 | |
|           ProtoPipes.fromProviders([PipeProvider.createFromType(PipeB, new Pipe({name: 'b'}))]);
 | |
|       var pipes = new Pipes(proto, injector);
 | |
|       expect((<any>pipes.get("b").pipe).dep).toEqual("dependency");
 | |
|     });
 | |
| 
 | |
|     it('should cache pure pipes', () => {
 | |
|       var proto = ProtoPipes.fromProviders(
 | |
|           [PipeProvider.createFromType(PipeA, new Pipe({name: 'a', pure: true}))]);
 | |
|       var pipes = new Pipes(proto, injector);
 | |
| 
 | |
|       expect(pipes.get("a").pure).toEqual(true);
 | |
|       expect(pipes.get("a")).toBe(pipes.get("a"));
 | |
|     });
 | |
| 
 | |
|     it('should NOT cache impure pipes', () => {
 | |
|       var proto = ProtoPipes.fromProviders(
 | |
|           [PipeProvider.createFromType(PipeA, new Pipe({name: 'a', pure: false}))]);
 | |
|       var pipes = new Pipes(proto, injector);
 | |
| 
 | |
|       expect(pipes.get("a").pure).toEqual(false);
 | |
|       expect(pipes.get("a")).not.toBe(pipes.get("a"));
 | |
|     });
 | |
|   });
 | |
| }
 |