Adds tests for public Dart and TS frameworks to make sure that components with templateUrl can be created by the TestComponentBuilder. Closes #6359 Closes #6601
		
			
				
	
	
		
			118 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.1 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';
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
@Component(selector: 'external-template-cmp')
 | 
						|
@View(templateUrl: 'test_template.html')
 | 
						|
class ExternalTemplateComponent {
 | 
						|
  ExternalTemplateComponent() {
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
class MyToken {}
 | 
						|
 | 
						|
const TEMPLATE =
 | 
						|
    '<div><copy-me template=\'ngFor #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;'));
 | 
						|
  });
 | 
						|
 | 
						|
  ngTest('should allow a component using a templateUrl', (TestComponentBuilder tcb) async {
 | 
						|
    var rootTC = await tcb
 | 
						|
        .createAsync(ExternalTemplateComponent);
 | 
						|
 | 
						|
    rootTC.detectChanges();
 | 
						|
 | 
						|
    expect(rootTC.debugElement.nativeElement.text, equals('from external template\n'));
 | 
						|
  });
 | 
						|
 | 
						|
  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');
 | 
						|
}
 |