64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
/// This file contains tests that make sense only in Dart world, such as
 | 
						|
/// verifying that things are valid constants.
 | 
						|
library angular2.test.di.binding_dart_spec;
 | 
						|
 | 
						|
import 'dart:mirrors';
 | 
						|
import 'package:angular2/test_lib.dart';
 | 
						|
import 'package:angular2/di.dart';
 | 
						|
 | 
						|
main() {
 | 
						|
  describe('Binding', () {
 | 
						|
    it('can create constant from token', () {
 | 
						|
      expect(const Binding(Foo).token).toBe(Foo);
 | 
						|
    });
 | 
						|
 | 
						|
    it('can create constant from class', () {
 | 
						|
      expect(const Binding(Foo, toClass: Bar).toClass).toBe(Bar);
 | 
						|
    });
 | 
						|
 | 
						|
    it('can create constant from value', () {
 | 
						|
      expect(const Binding(Foo, toValue: 5).toValue).toBe(5);
 | 
						|
    });
 | 
						|
 | 
						|
    it('can create constant from alias', () {
 | 
						|
      expect(const Binding(Foo, toAlias: Bar).toAlias).toBe(Bar);
 | 
						|
    });
 | 
						|
 | 
						|
    it('can create constant from factory', () {
 | 
						|
      expect(const Binding(Foo, toFactory: fn).toFactory).toBe(fn);
 | 
						|
    });
 | 
						|
 | 
						|
    it('can create constant from async factory', () {
 | 
						|
      expect(const Binding(Foo, toAsyncFactory: fn).toAsyncFactory).toBe(fn);
 | 
						|
    });
 | 
						|
 | 
						|
    it('can be used in annotation', () {
 | 
						|
      ClassMirror mirror = reflectType(Annotated);
 | 
						|
      var bindings = mirror.metadata[0].reflectee.bindings;
 | 
						|
      expect(bindings.length).toBe(6);
 | 
						|
      bindings.forEach((b) {
 | 
						|
        expect(b).toBeA(Binding);
 | 
						|
      });
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 | 
						|
 | 
						|
class Foo {}
 | 
						|
class Bar extends Foo {}
 | 
						|
fn() => null;
 | 
						|
 | 
						|
class Annotation {
 | 
						|
  final List bindings;
 | 
						|
  const Annotation(this.bindings);
 | 
						|
}
 | 
						|
 | 
						|
@Annotation(const [
 | 
						|
  const Binding(Foo),
 | 
						|
  const Binding(Foo, toClass: Bar),
 | 
						|
  const Binding(Foo, toValue: 5),
 | 
						|
  const Binding(Foo, toAlias: Bar),
 | 
						|
  const Binding(Foo, toFactory: fn),
 | 
						|
  const Binding(Foo, toAsyncFactory: fn),
 | 
						|
])
 | 
						|
class Annotated {}
 |