100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
		
		
			
		
	
	
			100 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
|  | // Because Angular is using dart:html, we need these tests to run on an actual
 | ||
|  | // browser. This means that it should be run with `-p dartium` or `-p chrome`.
 | ||
|  | @TestOn('browser') | ||
|  | import 'package:angular2/angular2.dart' | ||
|  |     show Component, View, NgFor, provide, Inject, Injectable, Optional; | ||
|  | 
 | ||
|  | import 'package:test/test.dart'; | ||
|  | import 'package:angular2_testing/angular2_testing.dart'; | ||
|  | 
 | ||
|  | // This is the component we will be testing.
 | ||
|  | @Component(selector: 'test-cmp') | ||
|  | @View(directives: const [NgFor]) | ||
|  | class TestComponent { | ||
|  |   List<num> items; | ||
|  |   TestComponent() { | ||
|  |     this.items = [1, 2]; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | @Injectable() | ||
|  | class TestService { | ||
|  |   String status = 'not ready'; | ||
|  | 
 | ||
|  |   init() { | ||
|  |     this.status = 'ready'; | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | class MyToken {} | ||
|  | 
 | ||
|  | const TEMPLATE = | ||
|  |     '<div><copy-me template=\'ng-for #item of items\'>{{item.toString()}};</copy-me></div>'; | ||
|  | 
 | ||
|  | void main() { | ||
|  |   initAngularTests(); | ||
|  | 
 | ||
|  |   setUpProviders(() => [provide(MyToken, useValue: 'my string'), TestService]); | ||
|  | 
 | ||
|  |   test('normal function', () { | ||
|  |     var string = 'foo,bar,baz'; | ||
|  |     expect(string.split(','), equals(['foo', 'bar', 'baz'])); | ||
|  |   }); | ||
|  | 
 | ||
|  |   ngTest('can grab injected values', (@Inject(MyToken) token, TestService testService) { | ||
|  |     expect(token, equals('my string')); | ||
|  |     expect(testService.status, equals('not ready')); | ||
|  |   }); | ||
|  | 
 | ||
|  |   group('nested ngSetUp', () { | ||
|  |     ngSetUp((TestService testService) { | ||
|  |       testService.init(); | ||
|  |     }); | ||
|  | 
 | ||
|  |     ngTest('ngSetUp modifies injected services', (TestService testService) { | ||
|  |       expect(testService.status, equals('ready')); | ||
|  |     }); | ||
|  |   }); | ||
|  | 
 | ||
|  |   ngTest('create a component using the TestComponentBuilder', (TestComponentBuilder tcb) async { | ||
|  |     var rootTC = await tcb | ||
|  |         .overrideTemplate(TestComponent, TEMPLATE) | ||
|  |         .createAsync(TestComponent); | ||
|  | 
 | ||
|  |     rootTC.detectChanges(); | ||
|  |     expect(rootTC.debugElement.nativeElement.text, equals('1;2;')); | ||
|  |   }); | ||
|  | 
 | ||
|  |   ngTest('should reflect added elements', (TestComponentBuilder tcb) async { | ||
|  |     var rootTC = await tcb | ||
|  |         .overrideTemplate(TestComponent, TEMPLATE) | ||
|  |         .createAsync(TestComponent); | ||
|  | 
 | ||
|  |     rootTC.detectChanges(); | ||
|  |     (rootTC.debugElement.componentInstance.items as List<num>).add(3); | ||
|  |     rootTC.detectChanges(); | ||
|  | 
 | ||
|  |     expect(rootTC.debugElement.nativeElement.text, equals('1;2;3;')); | ||
|  |   }); | ||
|  | 
 | ||
|  |   group('expected failures', () { | ||
|  |     ngTest('no type in param list', (notTyped) { | ||
|  |       expect(1, equals(2)); | ||
|  |     }); | ||
|  | 
 | ||
|  |     ngSetUp((TestService testService) { | ||
|  |       testService.init(); | ||
|  |     }); | ||
|  | 
 | ||
|  |     // This would fail, since setUpProviders is used after a call to ngSetUp has already
 | ||
|  |     // initialized the injector.
 | ||
|  |     group('nested', () { | ||
|  |       setUpProviders(() => [TestService]); | ||
|  | 
 | ||
|  |       test('foo', () { | ||
|  |         expect(1 + 1, equals(2)); | ||
|  |       }); | ||
|  |     }); | ||
|  |   }, skip: 'expected failures'); | ||
|  | } |