1+ import { ddescribe , describe , it , iit , xit , expect , beforeEach , afterEach ,
2+ el , queryView , dispatchEvent } from 'test_lib/test_lib' ;
3+
4+ import { Lexer , Parser , ChangeDetector , dynamicChangeDetection } from 'change_detection/change_detection' ;
5+ import { Compiler , CompilerCache } from 'core/src/compiler/compiler' ;
6+ import { DirectiveMetadataReader } from 'core/src/compiler/directive_metadata_reader' ;
7+ import { Injector } from 'di/di' ;
8+ import { DOM } from 'facade/src/dom' ;
9+
10+ import { Component , TemplateConfig } from 'core/core' ;
11+ import { ControlDecorator , ControlGroupDecorator , Control , ControlGroup } from 'forms/forms' ;
12+
13+ export function main ( ) {
14+ function detectChanges ( view ) {
15+ view . changeDetector . detectChanges ( ) ;
16+ }
17+
18+ function compile ( componentType , template , context , callback ) {
19+ var compiler = new Compiler ( dynamicChangeDetection , null , new DirectiveMetadataReader ( ) ,
20+ new Parser ( new Lexer ( ) ) , new CompilerCache ( ) ) ;
21+
22+ compiler . compile ( componentType , el ( template ) ) . then ( ( pv ) => {
23+ var view = pv . instantiate ( null ) ;
24+ view . hydrate ( new Injector ( [ ] ) , null , context ) ;
25+ detectChanges ( view ) ;
26+ callback ( view ) ;
27+ } ) ;
28+ }
29+
30+ var compiler ;
31+
32+ beforeEach ( ( ) => {
33+ compiler = new Compiler ( dynamicChangeDetection , null , new DirectiveMetadataReader ( ) ,
34+ new Parser ( new Lexer ( ) ) , new CompilerCache ( ) ) ;
35+ } ) ;
36+
37+ describe ( "integration tests" , ( ) => {
38+ it ( "should initialize DOM elements with the given form object" , ( done ) => {
39+ var ctx = new MyComp ( new ControlGroup ( {
40+ "login" : new Control ( "loginValue" )
41+ } ) ) ;
42+
43+ var t = `<div [control-group]="form">
44+ <input [control-name]="'login'">
45+ </div>` ;
46+
47+ compile ( MyComp , t , ctx , ( view ) => {
48+ var input = queryView ( view , "input" )
49+ expect ( input . value ) . toEqual ( "loginValue" ) ;
50+ done ( ) ;
51+ } ) ;
52+ } ) ;
53+
54+ it ( "should update the control group values on DOM change" , ( done ) => {
55+ var form = new ControlGroup ( {
56+ "login" : new Control ( "oldValue" )
57+ } ) ;
58+ var ctx = new MyComp ( form ) ;
59+
60+ var t = `<div [control-group]="form">
61+ <input [control-name]="'login'">
62+ </div>` ;
63+
64+ compile ( MyComp , t , ctx , ( view ) => {
65+ var input = queryView ( view , "input" )
66+
67+ input . value = "updatedValue" ;
68+ dispatchEvent ( input , "change" ) ;
69+
70+ expect ( form . value ) . toEqual ( { "login" : "updatedValue" } ) ;
71+ done ( ) ;
72+ } ) ;
73+ } ) ;
74+
75+ it ( "should update DOM elements when rebinding the control group" , ( done ) => {
76+ var form = new ControlGroup ( {
77+ "login" : new Control ( "oldValue" )
78+ } ) ;
79+ var ctx = new MyComp ( form ) ;
80+
81+ var t = `<div [control-group]="form">
82+ <input [control-name]="'login'">
83+ </div>` ;
84+
85+ compile ( MyComp , t , ctx , ( view ) => {
86+ ctx . form = new ControlGroup ( {
87+ "login" : new Control ( "newValue" )
88+ } ) ;
89+ detectChanges ( view ) ;
90+
91+ var input = queryView ( view , "input" )
92+ expect ( input . value ) . toEqual ( "newValue" ) ;
93+ done ( ) ;
94+ } ) ;
95+ } ) ;
96+
97+ it ( "should update DOM element when rebinding the control name" , ( done ) => {
98+ var ctx = new MyComp ( new ControlGroup ( {
99+ "one" : new Control ( "one" ) ,
100+ "two" : new Control ( "two" )
101+ } ) , "one" ) ;
102+
103+ var t = `<div [control-group]="form">
104+ <input [control-name]="name">
105+ </div>` ;
106+
107+ compile ( MyComp , t , ctx , ( view ) => {
108+ var input = queryView ( view , "input" )
109+ expect ( input . value ) . toEqual ( "one" ) ;
110+
111+ ctx . name = "two" ;
112+ detectChanges ( view ) ;
113+
114+ expect ( input . value ) . toEqual ( "two" ) ;
115+ done ( ) ;
116+ } ) ;
117+ } ) ;
118+ } ) ;
119+ }
120+
121+ @Component ( {
122+ template : new TemplateConfig ( {
123+ directives : [ ControlGroupDecorator , ControlDecorator ]
124+ } )
125+ } )
126+ class MyComp {
127+ form :ControlGroup ;
128+ name :string ;
129+
130+ constructor ( form , name = null ) {
131+ this . form = form ;
132+ this . name = name ;
133+ }
134+ }
0 commit comments