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'}]});
|
||
|
});
|
||
|
});
|