67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			67 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Use of this source code is governed by an MIT-style license that can be
							 | 
						||
| 
								 | 
							
								 * found in the LICENSE file at https://angular.io/license
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import {setClassMetadata} from '../../src/render3/metadata';
							 | 
						||
| 
								 | 
							
								import {Type} from '../../src/type';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface Decorator {
							 | 
						||
| 
								 | 
							
								  type: any;
							 | 
						||
| 
								 | 
							
								  args?: any[];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface HasMetadata extends Type<any> {
							 | 
						||
| 
								 | 
							
								  decorators?: Decorator[];
							 | 
						||
| 
								 | 
							
								  ctorParameters: {type: any, decorators?: Decorator[]}[];
							 | 
						||
| 
								 | 
							
								  propDecorators: {[field: string]: Decorator[]};
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								interface CtorParameter {
							 | 
						||
| 
								 | 
							
								  type: any;
							 | 
						||
| 
								 | 
							
								  decorators?: Decorator[];
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								function metadataOf(value: Type<any>): HasMetadata {
							 | 
						||
| 
								 | 
							
								  return value as HasMetadata;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('render3 setClassMetadata()', () => {
							 | 
						||
| 
								 | 
							
								  it('should set decorator metadata on a type', () => {
							 | 
						||
| 
								 | 
							
								    const Foo = metadataOf(class Foo{});
							 | 
						||
| 
								 | 
							
								    setClassMetadata(Foo, [{type: 'test', args: ['arg']}], null, null);
							 | 
						||
| 
								 | 
							
								    expect(Foo.decorators).toEqual([{type: 'test', args: ['arg']}]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should merge decorator metadata on a type', () => {
							 | 
						||
| 
								 | 
							
								    const Foo = metadataOf(class Foo{});
							 | 
						||
| 
								 | 
							
								    Foo.decorators = [{type: 'first'}];
							 | 
						||
| 
								 | 
							
								    setClassMetadata(Foo, [{type: 'test', args: ['arg']}], null, null);
							 | 
						||
| 
								 | 
							
								    expect(Foo.decorators).toEqual([{type: 'first'}, {type: 'test', args: ['arg']}]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should set ctor parameter metadata on a type', () => {
							 | 
						||
| 
								 | 
							
								    const Foo = metadataOf(class Foo{});
							 | 
						||
| 
								 | 
							
								    Foo.ctorParameters = [{type: 'initial'}];
							 | 
						||
| 
								 | 
							
								    setClassMetadata(Foo, null, [{type: 'test'}], null);
							 | 
						||
| 
								 | 
							
								    expect(Foo.ctorParameters).toEqual([{type: 'test'}]);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should set parameter decorator metadata on a type', () => {
							 | 
						||
| 
								 | 
							
								    const Foo = metadataOf(class Foo{});
							 | 
						||
| 
								 | 
							
								    setClassMetadata(Foo, null, null, {field: [{type: 'test', args: ['arg']}]});
							 | 
						||
| 
								 | 
							
								    expect(Foo.propDecorators).toEqual({field: [{type: 'test', args: ['arg']}]});
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  it('should merge parameter decorator metadata on a type', () => {
							 | 
						||
| 
								 | 
							
								    const Foo = metadataOf(class Foo{});
							 | 
						||
| 
								 | 
							
								    Foo.propDecorators = {initial: [{type: 'first'}]};
							 | 
						||
| 
								 | 
							
								    setClassMetadata(Foo, null, null, {field: [{type: 'test', args: ['arg']}]});
							 | 
						||
| 
								 | 
							
								    expect(Foo.propDecorators)
							 | 
						||
| 
								 | 
							
								        .toEqual({field: [{type: 'test', args: ['arg']}], initial: [{type: 'first'}]});
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |