Skip to content

Commit

Permalink
fix(build): MetadataCollector correctly collects property metadata
Browse files Browse the repository at this point in the history
Fixes #7772

Closes #7773
  • Loading branch information
chuckjaz committed Mar 25, 2016
1 parent 85f3dc2 commit 111afcd
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 5 deletions.
2 changes: 2 additions & 0 deletions tools/metadata/src/collector.ts
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,8 @@ export class MetadataCollector {
}
break;
case ts.SyntaxKind.PropertyDeclaration:
case ts.SyntaxKind.GetAccessor:
case ts.SyntaxKind.SetAccessor:
const property = <ts.PropertyDeclaration>member;
const propertyDecorators = getDecorators(property.decorators);
if (propertyDecorators) {
Expand Down
65 changes: 60 additions & 5 deletions tools/metadata/test/collector.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,43 @@ describe('Collector', () => {
expect(metadata).toBeFalsy();
});

let casesFile;
let casesMetadata;

beforeEach(() => {
casesFile = program.getSourceFile('/app/cases-data.ts');
casesMetadata = collector.getMetadata(casesFile, typeChecker);
});

it('should provide null for an any ctor pameter type', () => {
const sourceFile = program.getSourceFile('/app/cases-data.ts');
const metadata = collector.getMetadata(sourceFile, typeChecker);
expect(metadata).toBeTruthy();
const casesAny = <ClassMetadata>metadata.metadata['CaseAny'];
const casesAny = <ClassMetadata>casesMetadata.metadata['CaseAny'];
expect(casesAny).toBeTruthy();
const ctorData = casesAny.members['__ctor__'];
expect(ctorData).toEqual([{__symbolic: 'constructor', parameters: [null]}]);
});

it('should record annotations on set and get declartions', () => {
const propertyData = {
name: [
{
__symbolic: 'property',
decorators: [
{
__symbolic: 'call',
expression: {__symbolic: 'reference', module: 'angular2/core', name: 'Input'},
arguments: ['firstName']
}
]
}
]
};
const caseGetProp = <ClassMetadata>casesMetadata.metadata['GetProp'];
expect(caseGetProp.members).toEqual(propertyData);
const caseSetProp = <ClassMetadata>casesMetadata.metadata['SetProp'];
expect(caseSetProp.members).toEqual(propertyData);
const caseFullProp = <ClassMetadata>casesMetadata.metadata['FullProp'];
expect(caseFullProp.members).toEqual(propertyData);
});
});

// TODO: Do not use \` in a template literal as it confuses clang-format
Expand Down Expand Up @@ -285,12 +313,39 @@ const FILES: Directory = {
}
}`,
'cases-data.ts': `
import {Injectable} from 'angular2/core';
import {Injectable, Input} from 'angular2/core';
@Injectable()
export class CaseAny {
constructor(param: any) {}
}
@Injectable()
export class GetProp {
private _name: string;
@Input('firstName') get name(): string {
return this._name;
}
}
@Injectable()
export class SetProp {
private _name: string;
@Input('firstName') set name(value: string) {
this._name = value;
}
}
@Injectable()
export class FullProp {
private _name: string;
@Input('firstName') get name(): string {
return this._name;
}
set name(value: string) {
this._name = value;
}
}
`,
'cases-no-data.ts': `
import {HeroService} from './hero.service';
Expand Down

0 comments on commit 111afcd

Please sign in to comment.