102 lines
2.8 KiB
Dart
102 lines
2.8 KiB
Dart
library angular2.test.transform.common.annotation_matcher_test;
|
|
|
|
import 'package:angular2/src/render/api.dart';
|
|
import 'package:angular2/src/transform/common/ng_meta.dart';
|
|
import 'package:guinness/guinness.dart';
|
|
|
|
main() => allTests();
|
|
|
|
void allTests() {
|
|
var mockData = [
|
|
new DirectiveMetadata(id: 'm1'),
|
|
new DirectiveMetadata(id: 'm2'),
|
|
new DirectiveMetadata(id: 'm3'),
|
|
new DirectiveMetadata(id: 'm4')
|
|
];
|
|
|
|
it('should allow empty data.', () {
|
|
var ngMeta = new NgMeta.empty();
|
|
expect(ngMeta.isEmpty).toBeTrue();
|
|
});
|
|
|
|
describe('serialization', () {
|
|
it('should parse empty data correctly.', () {
|
|
var ngMeta = new NgMeta.fromJson({});
|
|
expect(ngMeta.isEmpty).toBeTrue();
|
|
});
|
|
|
|
it('should be lossless', () {
|
|
var a = new NgMeta.empty();
|
|
a.types['T0'] = mockData[0];
|
|
a.types['T1'] = mockData[1];
|
|
a.types['T2'] = mockData[2];
|
|
a.types['T3'] = mockData[3];
|
|
a.aliases['a1'] = ['T1'];
|
|
a.aliases['a2'] = ['a1'];
|
|
a.aliases['a3'] = ['T3', 'a2'];
|
|
a.aliases['a4'] = ['a3', 'T3'];
|
|
_checkSimilar(a, new NgMeta.fromJson(a.toJson()));
|
|
});
|
|
});
|
|
|
|
describe('flatten', () {
|
|
it('should include recursive aliases.', () {
|
|
var a = new NgMeta.empty();
|
|
a.types['T0'] = mockData[0];
|
|
a.types['T1'] = mockData[1];
|
|
a.types['T2'] = mockData[2];
|
|
a.types['T3'] = mockData[3];
|
|
a.aliases['a1'] = ['T1'];
|
|
a.aliases['a2'] = ['a1'];
|
|
a.aliases['a3'] = ['T3', 'a2'];
|
|
a.aliases['a4'] = ['a3', 'T0'];
|
|
expect(a.flatten('a4')).toEqual([mockData[3], mockData[1], mockData[0]]);
|
|
});
|
|
|
|
it('should detect cycles.', () {
|
|
var a = new NgMeta.empty();
|
|
a.types['T0'] = mockData[0];
|
|
a.aliases['a1'] = ['T0', 'a1'];
|
|
a.aliases['a2'] = ['a1'];
|
|
expect(a.flatten('a1')).toEqual([mockData[0]]);
|
|
});
|
|
});
|
|
|
|
describe('merge', () {
|
|
it('should merge all types on addAll', () {
|
|
var a = new NgMeta.empty();
|
|
var b = new NgMeta.empty();
|
|
a.types['T0'] = mockData[0];
|
|
b.types['T1'] = mockData[1];
|
|
a.addAll(b);
|
|
expect(a.types).toContain('T1');
|
|
expect(a.types['T1']).toEqual(mockData[1]);
|
|
});
|
|
|
|
it('should merge all aliases on addAll', () {
|
|
var a = new NgMeta.empty();
|
|
var b = new NgMeta.empty();
|
|
a.aliases['a'] = ['x'];
|
|
b.aliases['b'] = ['y'];
|
|
a.addAll(b);
|
|
expect(a.aliases).toContain('b');
|
|
expect(a.aliases['b']).toEqual(['y']);
|
|
});
|
|
});
|
|
}
|
|
|
|
_checkSimilar(NgMeta a, NgMeta b) {
|
|
expect(a.types.length).toEqual(b.types.length);
|
|
expect(a.aliases.length).toEqual(b.aliases.length);
|
|
for (var k in a.types.keys) {
|
|
expect(b.types).toContain(k);
|
|
var at = a.types[k];
|
|
var bt = b.types[k];
|
|
expect(at.id).toEqual(bt.id);
|
|
}
|
|
for (var k in a.aliases.keys) {
|
|
expect(b.aliases).toContain(k);
|
|
expect(b.aliases[k]).toEqual(a.aliases[k]);
|
|
}
|
|
}
|