@@ -172,15 +172,43 @@ describe('Collector', () => {
172172 expect ( metadata ) . toBeFalsy ( ) ;
173173 } ) ;
174174
175+ let casesFile ;
176+ let casesMetadata ;
177+
178+ beforeEach ( ( ) => {
179+ casesFile = program . getSourceFile ( '/app/cases-data.ts' ) ;
180+ casesMetadata = collector . getMetadata ( casesFile , typeChecker ) ;
181+ } ) ;
182+
175183 it ( 'should provide null for an any ctor pameter type' , ( ) => {
176- const sourceFile = program . getSourceFile ( '/app/cases-data.ts' ) ;
177- const metadata = collector . getMetadata ( sourceFile , typeChecker ) ;
178- expect ( metadata ) . toBeTruthy ( ) ;
179- const casesAny = < ClassMetadata > metadata . metadata [ 'CaseAny' ] ;
184+ const casesAny = < ClassMetadata > casesMetadata . metadata [ 'CaseAny' ] ;
180185 expect ( casesAny ) . toBeTruthy ( ) ;
181186 const ctorData = casesAny . members [ '__ctor__' ] ;
182187 expect ( ctorData ) . toEqual ( [ { __symbolic : 'constructor' , parameters : [ null ] } ] ) ;
183188 } ) ;
189+
190+ it ( 'should record annotations on set and get declartions' , ( ) => {
191+ const propertyData = {
192+ name : [
193+ {
194+ __symbolic : 'property' ,
195+ decorators : [
196+ {
197+ __symbolic : 'call' ,
198+ expression : { __symbolic : 'reference' , module : 'angular2/core' , name : 'Input' } ,
199+ arguments : [ 'firstName' ]
200+ }
201+ ]
202+ }
203+ ]
204+ } ;
205+ const caseGetProp = < ClassMetadata > casesMetadata . metadata [ 'GetProp' ] ;
206+ expect ( caseGetProp . members ) . toEqual ( propertyData ) ;
207+ const caseSetProp = < ClassMetadata > casesMetadata . metadata [ 'SetProp' ] ;
208+ expect ( caseSetProp . members ) . toEqual ( propertyData ) ;
209+ const caseFullProp = < ClassMetadata > casesMetadata . metadata [ 'FullProp' ] ;
210+ expect ( caseFullProp . members ) . toEqual ( propertyData ) ;
211+ } ) ;
184212} ) ;
185213
186214// TODO: Do not use \` in a template literal as it confuses clang-format
@@ -285,12 +313,39 @@ const FILES: Directory = {
285313 }
286314 }` ,
287315 'cases-data.ts' : `
288- import {Injectable} from 'angular2/core';
316+ import {Injectable, Input } from 'angular2/core';
289317
290318 @Injectable()
291319 export class CaseAny {
292320 constructor(param: any) {}
293321 }
322+
323+ @Injectable()
324+ export class GetProp {
325+ private _name: string;
326+ @Input('firstName') get name(): string {
327+ return this._name;
328+ }
329+ }
330+
331+ @Injectable()
332+ export class SetProp {
333+ private _name: string;
334+ @Input('firstName') set name(value: string) {
335+ this._name = value;
336+ }
337+ }
338+
339+ @Injectable()
340+ export class FullProp {
341+ private _name: string;
342+ @Input('firstName') get name(): string {
343+ return this._name;
344+ }
345+ set name(value: string) {
346+ this._name = value;
347+ }
348+ }
294349 ` ,
295350 'cases-no-data.ts' : `
296351 import {HeroService} from './hero.service';
0 commit comments