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