@@ -5,73 +5,91 @@ import 'dart:mirrors';
5
5
6
6
@Component (selector: 'component' ) class _Component {}
7
7
@Decorator (selector: '[ignore-children]' ,
8
- children: Directive .IGNORE_CHILDREN )
9
- class _IgnoreChildren {}
8
+ children: Directive .IGNORE_CHILDREN )
9
+ class _IgnoreChildren {}
10
10
@Decorator (selector: '[structural]' ,
11
- children: Directive .TRANSCLUDE_CHILDREN )
12
- class _Structural {}
11
+ children: Directive .TRANSCLUDE_CHILDREN )
12
+ class _Structural {}
13
13
@Decorator (selector: '[directive]' ) class _DirectiveAttr {}
14
14
15
+ @Decorator (selector: '[templates]' ,
16
+ children: Directive .TRANSCLUDE_CHILDREN )
17
+ class _Template1 {}
18
+ @Decorator (selector: '[templates]' ,
19
+ children: Directive .TRANSCLUDE_CHILDREN )
20
+ class _Template2 {}
21
+
15
22
16
23
directiveFor (i) {
17
24
ClassMirror cm = reflectType (i);
18
25
19
26
}
20
- main () => describe ('ElementBinderBuilder' , () {
21
- var b;
22
- var directives;
23
- var node = null ;
24
-
25
- beforeEachModule ((Module module) {
26
- module
27
- ..bind (_DirectiveAttr )
28
- ..bind (_Component )
29
- ..bind (_IgnoreChildren )
30
- ..bind (_Structural );
31
- });
27
+ void main () {
28
+ describe ('ElementBinderBuilder' , () {
29
+ ElementBinderBuilder builder;
30
+ ElementBinder binder;
31
+ var directives;
32
+ var node = new DivElement ();
33
+
34
+ beforeEachModule ((Module module) {
35
+ module..bind (_DirectiveAttr )
36
+ ..bind (_Component )
37
+ ..bind (_IgnoreChildren )
38
+ ..bind (_Structural )
39
+ ..bind (_Template1 )
40
+ ..bind (_Template2 );
32
41
33
- beforeEach ((DirectiveMap d, ElementBinderFactory f) {
34
- directives = d;
35
- b = f.builder (null , null );
36
- });
42
+ });
37
43
38
- addDirective (selector) {
39
- directives.forEach ((Directive annotation, Type type) {
40
- if (annotation.selector == selector)
41
- b.addDirective (new DirectiveRef (node, type, annotation, new Key (type), null ));
44
+ beforeEach ((DirectiveMap d, ElementBinderFactory f) {
45
+ directives = d;
46
+ builder = f.builder (null , null );
42
47
});
43
- b = b.binder;
44
- }
45
48
46
- it ('should add a decorator' , () {
47
- expect (b.decorators.length).toEqual (0 );
49
+ addDirective (selector) {
50
+ directives.forEach ((Directive annotation, Type type) {
51
+ if (annotation.selector == selector)
52
+ builder.addDirective (new DirectiveRef (node, type, annotation, new Key (type), null ));
53
+ });
54
+ binder = builder.binder;
55
+ }
48
56
49
- addDirective ('[directive]' );
57
+ it ('should add a decorator' , () {
58
+ expect (builder.decorators.length).toEqual (0 );
50
59
51
- expect (b.decorators.length).toEqual (1 );
52
- expect (b.componentData).toBeNull ();
53
- expect (b.childMode).toEqual (Directive .COMPILE_CHILDREN );
60
+ addDirective ('[directive]' );
54
61
55
- });
62
+ expect (binder.decorators.length).toEqual (1 );
63
+ expect (binder.componentData).toBeNull ();
64
+ expect (binder.childMode).toEqual (Directive .COMPILE_CHILDREN );
65
+
66
+ });
56
67
57
- it ('should add a component' , async (() {
58
- addDirective ('component' );
68
+ it ('should add a component' , async (() {
69
+ addDirective ('component' );
59
70
60
- expect (b .decorators.length).toEqual (0 );
61
- expect (b .componentData).toBeNotNull ();
62
- }));
71
+ expect (binder .decorators.length).toEqual (0 );
72
+ expect (binder .componentData).toBeNotNull ();
73
+ }));
63
74
64
- it ('should add a template' , () {
65
- addDirective ('[structural]' );
75
+ it ('should add a template' , () {
76
+ addDirective ('[structural]' );
66
77
67
- expect (b .template).toBeNotNull ();
68
- });
78
+ expect (binder .template).toBeNotNull ();
79
+ });
69
80
70
- it ('should add a directive that ignores children' , () {
71
- addDirective ('[ignore-children]' );
81
+ it ('could have at most one template' , () {
82
+ expect (() => addDirective (('[templates]' )))
83
+ .toThrowWith (message: "There could be at most one transcluding directive on a node. The "
84
+ "node '<div></div>' has both '[templates]' and '[templates]'." );
85
+ });
86
+
87
+ it ('should add a directive that ignores children' , () {
88
+ addDirective ('[ignore-children]' );
72
89
73
- expect (b.decorators.length).toEqual (1 );
74
- expect (b.componentData).toBeNull ();
75
- expect (b.childMode).toEqual (Directive .IGNORE_CHILDREN );
90
+ expect (binder.decorators.length).toEqual (1 );
91
+ expect (binder.componentData).toBeNull ();
92
+ expect (binder.childMode).toEqual (Directive .IGNORE_CHILDREN );
93
+ });
76
94
});
77
- });
95
+ }
0 commit comments