| 
									
										
										
										
											2016-06-23 09:47:54 -07:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-23 17:10:22 -07:00
										 |  |  | import {Log, afterEach, beforeEach, ddescribe, describe, expect, iit, inject, it, xit} from '@angular/core/testing/testing_internal'; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-23 17:10:22 -07:00
										 |  |  | import {fakeAsync, flushMicrotasks, tick,} from '@angular/core/testing'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-14 18:23:40 -07:00
										 |  |  | import {SpyNgControl, SpyValueAccessor} from './spies'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 13:27:29 -07:00
										 |  |  | import {FormGroup, FormControl, FormArray, FormArrayName, FormControlName, FormGroupName, NgModelGroup, FormGroupDirective, ControlValueAccessor, Validators, NgForm, NgModel, FormControlDirective, NgControl, DefaultValueAccessor, CheckboxControlValueAccessor, SelectControlValueAccessor, Validator} from '@angular/forms'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-14 18:23:40 -07:00
										 |  |  | import {selectValueAccessor, composeValidators} from '@angular/forms/src/directives/shared'; | 
					
						
							|  |  |  | import {TimerWrapper} from '../src/facade/async'; | 
					
						
							|  |  |  | import {PromiseWrapper} from '../src/facade/promise'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | import {SimpleChange} from '@angular/core/src/change_detection'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class DummyControlValueAccessor implements ControlValueAccessor { | 
					
						
							| 
									
										
										
										
											2016-06-11 21:23:37 -07:00
										 |  |  |   writtenValue: any; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |   registerOnChange(fn: any /** TODO #9100 */) {} | 
					
						
							|  |  |  |   registerOnTouched(fn: any /** TODO #9100 */) {} | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |   writeValue(obj: any): void { this.writtenValue = obj; } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class CustomValidatorDirective implements Validator { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |   validate(c: FormControl): {[key: string]: any} { return {'custom': true}; } | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  | function asyncValidator(expected: any /** TODO #9100 */, timeout = 0) { | 
					
						
							|  |  |  |   return (c: any /** TODO #9100 */) => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |     var completer = PromiseWrapper.completer(); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     var res = c.value != expected ? {'async': true} : null; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |     if (timeout == 0) { | 
					
						
							|  |  |  |       completer.resolve(res); | 
					
						
							|  |  |  |     } else { | 
					
						
							|  |  |  |       TimerWrapper.setTimeout(() => { completer.resolve(res); }, timeout); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     return completer.promise; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |   describe('Form Directives', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |     var defaultAccessor: DefaultValueAccessor; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     beforeEach(() => { defaultAccessor = new DefaultValueAccessor(null, null); }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     describe('shared', () => { | 
					
						
							|  |  |  |       describe('selectValueAccessor', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         var dir: NgControl; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         beforeEach(() => { dir = <any>new SpyNgControl(); }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should throw when given an empty array', | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            () => { expect(() => selectValueAccessor(dir, [])).toThrowError(); }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should return the default value accessor when no other provided', | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            () => { expect(selectValueAccessor(dir, [defaultAccessor])).toEqual(defaultAccessor); }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should return checkbox accessor when provided', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var checkboxAccessor = new CheckboxControlValueAccessor(null, null); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           expect(selectValueAccessor(dir, [ | 
					
						
							|  |  |  |             defaultAccessor, checkboxAccessor | 
					
						
							|  |  |  |           ])).toEqual(checkboxAccessor); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should return select accessor when provided', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var selectAccessor = new SelectControlValueAccessor(null, null); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           expect(selectValueAccessor(dir, [ | 
					
						
							|  |  |  |             defaultAccessor, selectAccessor | 
					
						
							|  |  |  |           ])).toEqual(selectAccessor); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should throw when more than one build-in accessor is provided', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var checkboxAccessor = new CheckboxControlValueAccessor(null, null); | 
					
						
							|  |  |  |           var selectAccessor = new SelectControlValueAccessor(null, null); | 
					
						
							|  |  |  |           expect(() => selectValueAccessor(dir, [checkboxAccessor, selectAccessor])).toThrowError(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should return custom accessor when provided', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var customAccessor = new SpyValueAccessor(); | 
					
						
							|  |  |  |           var checkboxAccessor = new CheckboxControlValueAccessor(null, null); | 
					
						
							|  |  |  |           expect(selectValueAccessor(dir, <any>[defaultAccessor, customAccessor, checkboxAccessor])) | 
					
						
							|  |  |  |               .toEqual(customAccessor); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should throw when more than one custom accessor is provided', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var customAccessor: ControlValueAccessor = <any>new SpyValueAccessor(); | 
					
						
							|  |  |  |           expect(() => selectValueAccessor(dir, [customAccessor, customAccessor])).toThrowError(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       describe('composeValidators', () => { | 
					
						
							|  |  |  |         it('should compose functions', () => { | 
					
						
							|  |  |  |           var dummy1 = (_: any /** TODO #9100 */) => ({'dummy1': true}); | 
					
						
							|  |  |  |           var dummy2 = (_: any /** TODO #9100 */) => ({'dummy2': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var v = composeValidators([dummy1, dummy2]); | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |           expect(v(new FormControl(''))).toEqual({'dummy1': true, 'dummy2': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should compose validator directives', () => { | 
					
						
							|  |  |  |           var dummy1 = (_: any /** TODO #9100 */) => ({'dummy1': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           var v = composeValidators([dummy1, new CustomValidatorDirective()]); | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |           expect(v(new FormControl(''))).toEqual({'dummy1': true, 'custom': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 19:10:17 -07:00
										 |  |  |     describe('formGroup', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var form: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |       var formModel: FormGroup; | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var loginControlDir: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 19:10:17 -07:00
										 |  |  |         form = new FormGroupDirective([], []); | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         formModel = new FormGroup({ | 
					
						
							|  |  |  |           'login': new FormControl(), | 
					
						
							|  |  |  |           'passwords': new FormGroup( | 
					
						
							|  |  |  |               {'password': new FormControl(), 'passwordConfirm': new FormControl()}) | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  |         form.form = formModel; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 13:17:07 -07:00
										 |  |  |         loginControlDir = new FormControlName( | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |             form, [Validators.required], [asyncValidator('expected')], [defaultAccessor]); | 
					
						
							|  |  |  |         loginControlDir.name = 'login'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         loginControlDir.valueAccessor = new DummyControlValueAccessor(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport control properties', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         expect(form.control).toBe(formModel); | 
					
						
							|  |  |  |         expect(form.value).toBe(formModel.value); | 
					
						
							|  |  |  |         expect(form.valid).toBe(formModel.valid); | 
					
						
							|  |  |  |         expect(form.errors).toBe(formModel.errors); | 
					
						
							|  |  |  |         expect(form.pristine).toBe(formModel.pristine); | 
					
						
							|  |  |  |         expect(form.dirty).toBe(formModel.dirty); | 
					
						
							|  |  |  |         expect(form.touched).toBe(formModel.touched); | 
					
						
							|  |  |  |         expect(form.untouched).toBe(formModel.untouched); | 
					
						
							| 
									
										
										
										
											2016-06-24 13:37:42 -07:00
										 |  |  |         expect(form.statusChanges).toBe(formModel.statusChanges); | 
					
						
							|  |  |  |         expect(form.valueChanges).toBe(formModel.valueChanges); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       describe('addControl', () => { | 
					
						
							|  |  |  |         it('should throw when no control found', () => { | 
					
						
							| 
									
										
										
										
											2016-06-12 13:17:07 -07:00
										 |  |  |           var dir = new FormControlName(form, null, null, [defaultAccessor]); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           dir.name = 'invalidName'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |           expect(() => form.addControl(dir)) | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |               .toThrowError(new RegExp('Cannot find control \'invalidName\'')); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should throw when no value accessor', () => { | 
					
						
							| 
									
										
										
										
											2016-06-12 13:17:07 -07:00
										 |  |  |           var dir = new FormControlName(form, null, null, null); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           dir.name = 'login'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |           expect(() => form.addControl(dir)) | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |               .toThrowError(new RegExp('No value accessor for \'login\'')); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should set up validators', fakeAsync(() => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |              form.addControl(loginControlDir); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              // sync validators are set
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.hasError('required', ['login'])).toBe(true); | 
					
						
							|  |  |  |              expect(formModel.hasError('async', ['login'])).toBe(false); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              (<FormControl>formModel.find(['login'])).updateValue('invalid value'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              // sync validator passes, running async validators
 | 
					
						
							|  |  |  |              expect(formModel.pending).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.hasError('required', ['login'])).toBe(false); | 
					
						
							|  |  |  |              expect(formModel.hasError('async', ['login'])).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should write value to the DOM', () => { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |           (<FormControl>formModel.find(['login'])).updateValue('initValue'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |           form.addControl(loginControlDir); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           expect((<any>loginControlDir.valueAccessor).writtenValue).toEqual('initValue'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should add the directive to the list of directives included in the form', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           form.addControl(loginControlDir); | 
					
						
							|  |  |  |           expect(form.directives).toEqual([loginControlDir]); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |       describe('addFormGroup', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |         var matchingPasswordsValidator = (g: any /** TODO #9100 */) => { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           if (g.controls['password'].value != g.controls['passwordConfirm'].value) { | 
					
						
							|  |  |  |             return {'differentPasswords': true}; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           } else { | 
					
						
							|  |  |  |             return null; | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should set up validator', fakeAsync(() => { | 
					
						
							| 
									
										
										
										
											2016-06-12 16:37:42 -07:00
										 |  |  |              var group = new FormGroupName( | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |                  form, [matchingPasswordsValidator], [asyncValidator('expected')]); | 
					
						
							|  |  |  |              group.name = 'passwords'; | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              form.addFormGroup(group); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              (<FormControl>formModel.find(['passwords', 'password'])).updateValue('somePassword'); | 
					
						
							|  |  |  |              (<FormControl>formModel.find([ | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |                'passwords', 'passwordConfirm' | 
					
						
							|  |  |  |              ])).updateValue('someOtherPassword'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              // sync validators are set
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.hasError('differentPasswords', ['passwords'])).toEqual(true); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              (<FormControl>formModel.find([ | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |                'passwords', 'passwordConfirm' | 
					
						
							|  |  |  |              ])).updateValue('somePassword'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              // sync validators pass, running async validators
 | 
					
						
							|  |  |  |              expect(formModel.pending).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.hasError('async', ['passwords'])).toBe(true); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            })); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       describe('removeControl', () => { | 
					
						
							|  |  |  |         it('should remove the directive to the list of directives included in the form', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           form.addControl(loginControlDir); | 
					
						
							|  |  |  |           form.removeControl(loginControlDir); | 
					
						
							|  |  |  |           expect(form.directives).toEqual([]); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       describe('ngOnChanges', () => { | 
					
						
							|  |  |  |         it('should update dom values of all the directives', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           form.addControl(loginControlDir); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |           (<FormControl>formModel.find(['login'])).updateValue('new value'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |           form.ngOnChanges({}); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           expect((<any>loginControlDir.valueAccessor).writtenValue).toEqual('new value'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should set up a sync validator', () => { | 
					
						
							|  |  |  |           var formValidator = (c: any /** TODO #9100 */) => ({'custom': true}); | 
					
						
							| 
									
										
										
										
											2016-06-10 19:10:17 -07:00
										 |  |  |           var f = new FormGroupDirective([formValidator], []); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |           f.form = formModel; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           f.ngOnChanges({'form': new SimpleChange(null, null)}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |           expect(formModel.errors).toEqual({'custom': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should set up an async validator', fakeAsync(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 19:10:17 -07:00
										 |  |  |              var f = new FormGroupDirective([], [asyncValidator('expected')]); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |              f.form = formModel; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              f.ngOnChanges({'form': new SimpleChange(null, null)}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.errors).toEqual({'async': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            })); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     describe('NgForm', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var form: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |       var formModel: FormGroup; | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var loginControlDir: any /** TODO #9100 */; | 
					
						
							|  |  |  |       var personControlGroupDir: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							|  |  |  |         form = new NgForm([], []); | 
					
						
							|  |  |  |         formModel = form.form; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 16:37:42 -07:00
										 |  |  |         personControlGroupDir = new NgModelGroup(form, [], []); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         personControlGroupDir.name = 'person'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-23 09:55:26 -07:00
										 |  |  |         loginControlDir = new NgModel(personControlGroupDir, null, null, [defaultAccessor]); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         loginControlDir.name = 'login'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         loginControlDir.valueAccessor = new DummyControlValueAccessor(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport control properties', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         expect(form.control).toBe(formModel); | 
					
						
							|  |  |  |         expect(form.value).toBe(formModel.value); | 
					
						
							|  |  |  |         expect(form.valid).toBe(formModel.valid); | 
					
						
							|  |  |  |         expect(form.errors).toBe(formModel.errors); | 
					
						
							|  |  |  |         expect(form.pristine).toBe(formModel.pristine); | 
					
						
							|  |  |  |         expect(form.dirty).toBe(formModel.dirty); | 
					
						
							|  |  |  |         expect(form.touched).toBe(formModel.touched); | 
					
						
							|  |  |  |         expect(form.untouched).toBe(formModel.untouched); | 
					
						
							| 
									
										
										
										
											2016-06-24 13:37:42 -07:00
										 |  |  |         expect(form.statusChanges).toBe(formModel.statusChanges); | 
					
						
							|  |  |  |         expect(form.valueChanges).toBe(formModel.valueChanges); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |       describe('addControl & addFormGroup', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should create a control with the given name', fakeAsync(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              form.addFormGroup(personControlGroupDir); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |              form.addControl(loginControlDir); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              flushMicrotasks(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.find(['person', 'login'])).not.toBeNull; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // should update the form's value and validity
 | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |       describe('removeControl & removeFormGroup', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         it('should remove control', fakeAsync(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              form.addFormGroup(personControlGroupDir); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |              form.addControl(loginControlDir); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |              form.removeFormGroup(personControlGroupDir); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |              form.removeControl(loginControlDir); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              flushMicrotasks(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |              expect(formModel.find(['person'])).toBeNull(); | 
					
						
							|  |  |  |              expect(formModel.find(['person', 'login'])).toBeNull(); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // should update the form's value and validity
 | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should set up sync validator', fakeAsync(() => { | 
					
						
							|  |  |  |            var formValidator = (c: any /** TODO #9100 */) => ({'custom': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            var f = new NgForm([formValidator], []); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            expect(f.form.errors).toEqual({'custom': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should set up async validator', fakeAsync(() => { | 
					
						
							|  |  |  |            var f = new NgForm([], [asyncValidator('expected')]); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |            tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            expect(f.form.errors).toEqual({'async': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 16:37:42 -07:00
										 |  |  |     describe('FormGroupName', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var formModel: any /** TODO #9100 */; | 
					
						
							|  |  |  |       var controlGroupDir: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         formModel = new FormGroup({'login': new FormControl(null)}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 19:10:17 -07:00
										 |  |  |         var parent = new FormGroupDirective([], []); | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         parent.form = new FormGroup({'group': formModel}); | 
					
						
							| 
									
										
										
										
											2016-06-12 16:37:42 -07:00
										 |  |  |         controlGroupDir = new FormGroupName(parent, [], []); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         controlGroupDir.name = 'group'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport control properties', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         expect(controlGroupDir.control).toBe(formModel); | 
					
						
							|  |  |  |         expect(controlGroupDir.value).toBe(formModel.value); | 
					
						
							|  |  |  |         expect(controlGroupDir.valid).toBe(formModel.valid); | 
					
						
							|  |  |  |         expect(controlGroupDir.errors).toBe(formModel.errors); | 
					
						
							|  |  |  |         expect(controlGroupDir.pristine).toBe(formModel.pristine); | 
					
						
							|  |  |  |         expect(controlGroupDir.dirty).toBe(formModel.dirty); | 
					
						
							|  |  |  |         expect(controlGroupDir.touched).toBe(formModel.touched); | 
					
						
							|  |  |  |         expect(controlGroupDir.untouched).toBe(formModel.untouched); | 
					
						
							| 
									
										
										
										
											2016-06-24 13:37:42 -07:00
										 |  |  |         expect(controlGroupDir.statusChanges).toBe(formModel.statusChanges); | 
					
						
							|  |  |  |         expect(controlGroupDir.valueChanges).toBe(formModel.valueChanges); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-25 13:27:29 -07:00
										 |  |  |     describe('FormArrayName', () => { | 
					
						
							|  |  |  |       var formModel: FormArray; | 
					
						
							|  |  |  |       var formArrayDir: FormArrayName; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							|  |  |  |         const parent = new FormGroupDirective([], []); | 
					
						
							|  |  |  |         formModel = new FormArray([new FormControl('')]); | 
					
						
							|  |  |  |         parent.form = new FormGroup({'array': formModel}); | 
					
						
							|  |  |  |         formArrayDir = new FormArrayName(parent, [], []); | 
					
						
							|  |  |  |         formArrayDir.name = 'array'; | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should reexport control properties', () => { | 
					
						
							|  |  |  |         expect(formArrayDir.control).toBe(formModel); | 
					
						
							|  |  |  |         expect(formArrayDir.value).toBe(formModel.value); | 
					
						
							|  |  |  |         expect(formArrayDir.valid).toBe(formModel.valid); | 
					
						
							|  |  |  |         expect(formArrayDir.errors).toBe(formModel.errors); | 
					
						
							|  |  |  |         expect(formArrayDir.pristine).toBe(formModel.pristine); | 
					
						
							|  |  |  |         expect(formArrayDir.dirty).toBe(formModel.dirty); | 
					
						
							|  |  |  |         expect(formArrayDir.touched).toBe(formModel.touched); | 
					
						
							|  |  |  |         expect(formArrayDir.untouched).toBe(formModel.untouched); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 17:28:19 -07:00
										 |  |  |     describe('FormControlDirective', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var controlDir: any /** TODO #9100 */; | 
					
						
							|  |  |  |       var control: any /** TODO #9100 */; | 
					
						
							|  |  |  |       var checkProperties = function(control: any /** TODO #9100 */) { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         expect(controlDir.control).toBe(control); | 
					
						
							|  |  |  |         expect(controlDir.value).toBe(control.value); | 
					
						
							|  |  |  |         expect(controlDir.valid).toBe(control.valid); | 
					
						
							|  |  |  |         expect(controlDir.errors).toBe(control.errors); | 
					
						
							|  |  |  |         expect(controlDir.pristine).toBe(control.pristine); | 
					
						
							|  |  |  |         expect(controlDir.dirty).toBe(control.dirty); | 
					
						
							|  |  |  |         expect(controlDir.touched).toBe(control.touched); | 
					
						
							|  |  |  |         expect(controlDir.untouched).toBe(control.untouched); | 
					
						
							| 
									
										
										
										
											2016-06-24 13:37:42 -07:00
										 |  |  |         expect(controlDir.statusChanges).toBe(control.statusChanges); | 
					
						
							|  |  |  |         expect(controlDir.valueChanges).toBe(control.valueChanges); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 17:28:19 -07:00
										 |  |  |         controlDir = new FormControlDirective([Validators.required], [], [defaultAccessor]); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         controlDir.valueAccessor = new DummyControlValueAccessor(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         control = new FormControl(null); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         controlDir.form = control; | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport control properties', () => { checkProperties(control); }); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport new control properties', () => { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         var newControl = new FormControl(null); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         controlDir.form = newControl; | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         controlDir.ngOnChanges({'form': new SimpleChange(control, newControl)}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         checkProperties(newControl); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should set up validator', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         expect(control.valid).toBe(true); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // this will add the required validator and recalculate the validity
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         controlDir.ngOnChanges({'form': new SimpleChange(null, control)}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         expect(control.valid).toBe(false); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |     describe('NgModel', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var ngModel: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 10:09:50 -07:00
										 |  |  |         ngModel = new NgModel( | 
					
						
							|  |  |  |             null, [Validators.required], [asyncValidator('expected')], [defaultAccessor]); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         ngModel.valueAccessor = new DummyControlValueAccessor(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport control properties', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         var control = ngModel.control; | 
					
						
							|  |  |  |         expect(ngModel.control).toBe(control); | 
					
						
							|  |  |  |         expect(ngModel.value).toBe(control.value); | 
					
						
							|  |  |  |         expect(ngModel.valid).toBe(control.valid); | 
					
						
							|  |  |  |         expect(ngModel.errors).toBe(control.errors); | 
					
						
							|  |  |  |         expect(ngModel.pristine).toBe(control.pristine); | 
					
						
							|  |  |  |         expect(ngModel.dirty).toBe(control.dirty); | 
					
						
							|  |  |  |         expect(ngModel.touched).toBe(control.touched); | 
					
						
							|  |  |  |         expect(ngModel.untouched).toBe(control.untouched); | 
					
						
							| 
									
										
										
										
											2016-06-24 13:37:42 -07:00
										 |  |  |         expect(ngModel.statusChanges).toBe(control.statusChanges); | 
					
						
							|  |  |  |         expect(ngModel.valueChanges).toBe(control.valueChanges); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should set up validator', fakeAsync(() => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            // this will add the required validator and recalculate the validity
 | 
					
						
							|  |  |  |            ngModel.ngOnChanges({}); | 
					
						
							|  |  |  |            tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            expect(ngModel.control.errors).toEqual({'required': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            ngModel.control.updateValue('someValue'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |            tick(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |            expect(ngModel.control.errors).toEqual({'async': true}); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-12 13:17:07 -07:00
										 |  |  |     describe('FormControlName', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 17:08:59 -07:00
										 |  |  |       var formModel: any /** TODO #9100 */; | 
					
						
							|  |  |  |       var controlNameDir: any /** TODO #9100 */; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |       beforeEach(() => { | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         formModel = new FormControl('name'); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-10 19:10:17 -07:00
										 |  |  |         var parent = new FormGroupDirective([], []); | 
					
						
							| 
									
										
										
										
											2016-06-10 11:15:59 -07:00
										 |  |  |         parent.form = new FormGroup({'name': formModel}); | 
					
						
							| 
									
										
										
										
											2016-06-12 13:17:07 -07:00
										 |  |  |         controlNameDir = new FormControlName(parent, [], [], [defaultAccessor]); | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |         controlNameDir.name = 'name'; | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-08 16:38:52 -07:00
										 |  |  |       it('should reexport control properties', () => { | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |         expect(controlNameDir.control).toBe(formModel); | 
					
						
							|  |  |  |         expect(controlNameDir.value).toBe(formModel.value); | 
					
						
							|  |  |  |         expect(controlNameDir.valid).toBe(formModel.valid); | 
					
						
							|  |  |  |         expect(controlNameDir.errors).toBe(formModel.errors); | 
					
						
							|  |  |  |         expect(controlNameDir.pristine).toBe(formModel.pristine); | 
					
						
							|  |  |  |         expect(controlNameDir.dirty).toBe(formModel.dirty); | 
					
						
							|  |  |  |         expect(controlNameDir.touched).toBe(formModel.touched); | 
					
						
							|  |  |  |         expect(controlNameDir.untouched).toBe(formModel.untouched); | 
					
						
							| 
									
										
										
										
											2016-06-24 13:37:42 -07:00
										 |  |  |         expect(controlNameDir.statusChanges).toBe(formModel.statusChanges); | 
					
						
							|  |  |  |         expect(controlNameDir.valueChanges).toBe(formModel.valueChanges); | 
					
						
							| 
									
										
										
										
											2016-06-08 15:36:24 -07:00
										 |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |