feat(dart/transform): Record property metadata
Update the transformer to generate code registering annotations on class properties, getters, and setters. Closes #1800, #3267, #4003
This commit is contained in:
@ -292,6 +292,61 @@ void allTests() {
|
||||
});
|
||||
});
|
||||
|
||||
describe('property metadata', () {
|
||||
it('should be recorded on fields', () async {
|
||||
var model = await _testCreateModel('prop_metadata_files/fields.dart');
|
||||
|
||||
expect(model.reflectables.first.propertyMetadata).toBeNotNull();
|
||||
expect(model.reflectables.first.propertyMetadata.isNotEmpty).toBeTrue();
|
||||
expect(model.reflectables.first.propertyMetadata.first.name)
|
||||
.toEqual('field');
|
||||
expect(model.reflectables.first.propertyMetadata.first.annotations
|
||||
.firstWhere((a) => a.name == 'FieldDecorator',
|
||||
orElse: () => null)).toBeNotNull();
|
||||
});
|
||||
|
||||
it('should be recorded on getters', () async {
|
||||
var model = await _testCreateModel('prop_metadata_files/getters.dart');
|
||||
|
||||
expect(model.reflectables.first.propertyMetadata).toBeNotNull();
|
||||
expect(model.reflectables.first.propertyMetadata.isNotEmpty).toBeTrue();
|
||||
expect(model.reflectables.first.propertyMetadata.first.name)
|
||||
.toEqual('getVal');
|
||||
expect(model.reflectables.first.propertyMetadata.first.annotations
|
||||
.firstWhere((a) => a.name == 'GetDecorator', orElse: () => null))
|
||||
.toBeNotNull();
|
||||
});
|
||||
|
||||
it('should be recorded on setters', () async {
|
||||
var model = await _testCreateModel('prop_metadata_files/setters.dart');
|
||||
|
||||
expect(model.reflectables.first.propertyMetadata).toBeNotNull();
|
||||
expect(model.reflectables.first.propertyMetadata.isNotEmpty).toBeTrue();
|
||||
expect(model.reflectables.first.propertyMetadata.first.name)
|
||||
.toEqual('setVal');
|
||||
expect(model.reflectables.first.propertyMetadata.first.annotations
|
||||
.firstWhere((a) => a.name == 'SetDecorator', orElse: () => null))
|
||||
.toBeNotNull();
|
||||
});
|
||||
|
||||
it('should be coalesced when getters and setters have the same name',
|
||||
() async {
|
||||
var model = await _testCreateModel(
|
||||
'prop_metadata_files/getters_and_setters.dart');
|
||||
|
||||
expect(model.reflectables.first.propertyMetadata).toBeNotNull();
|
||||
expect(model.reflectables.first.propertyMetadata.length).toBe(1);
|
||||
expect(model.reflectables.first.propertyMetadata.first.name)
|
||||
.toEqual('myVal');
|
||||
expect(model.reflectables.first.propertyMetadata.first.annotations
|
||||
.firstWhere((a) => a.name == 'GetDecorator', orElse: () => null))
|
||||
.toBeNotNull();
|
||||
expect(model.reflectables.first.propertyMetadata.first.annotations
|
||||
.firstWhere((a) => a.name == 'SetDecorator', orElse: () => null))
|
||||
.toBeNotNull();
|
||||
});
|
||||
});
|
||||
|
||||
it('should not throw/hang on invalid urls', () async {
|
||||
var logger = new RecordingLogger();
|
||||
var model =
|
||||
|
@ -0,0 +1,8 @@
|
||||
library fields;
|
||||
|
||||
import 'package:angular2/src/core/metadata.dart';
|
||||
|
||||
@Component(selector: '[fields]')
|
||||
class FieldComponent {
|
||||
@FieldDecorator("field") String field;
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
library fields;
|
||||
|
||||
import 'package:angular2/src/core/metadata.dart';
|
||||
|
||||
@Component(selector: '[getters]')
|
||||
class FieldComponent {
|
||||
@GetDecorator("get") String get getVal => 'a';
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
library fields;
|
||||
|
||||
import 'package:angular2/src/core/metadata.dart';
|
||||
|
||||
@Component(selector: '[getters-and-setters]')
|
||||
class FieldComponent {
|
||||
String _val;
|
||||
@GetDecorator("get") String get myVal => _val;
|
||||
@SetDecorator("set") String set myVal(val) => _val = val;
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
library fields;
|
||||
|
||||
import 'package:angular2/src/core/metadata.dart';
|
||||
|
||||
@Component(selector: '[setters]')
|
||||
class FieldComponent {
|
||||
@SetDecorator("set") String set setVal(val) => null;
|
||||
}
|
Reference in New Issue
Block a user