diff options
| author | Misko Hevery | 2012-04-03 22:05:13 -0700 |
|---|---|---|
| committer | Misko Hevery | 2012-04-03 23:28:05 -0700 |
| commit | 21b77ad5c231ab0e05eb89f22005f7ed8d40a6c1 (patch) | |
| tree | 3425cfb53994ff0bc7a321144099a6a811f97259 /test/ng/directive | |
| parent | 2f5dba488e855bcdbb9304aa809efcb9de7b43e9 (diff) | |
| download | angular.js-21b77ad5c231ab0e05eb89f22005f7ed8d40a6c1.tar.bz2 | |
fix(form): preperly clean up when invalid widget is removed
Removing invalid widget sometimes resulted in improper cleanup of the form state.
Diffstat (limited to 'test/ng/directive')
| -rw-r--r-- | test/ng/directive/formSpec.js | 43 |
1 files changed, 38 insertions, 5 deletions
diff --git a/test/ng/directive/formSpec.js b/test/ng/directive/formSpec.js index 491a31db..3e672a7b 100644 --- a/test/ng/directive/formSpec.js +++ b/test/ng/directive/formSpec.js @@ -189,16 +189,16 @@ describe('form', function() { it('should deregister a child form when its DOM is removed', function() { doc = jqLite( - '<form name="parent">' + - '<div class="ng-form" name="child">' + - '<input ng:model="modelA" name="inputA" required>' + - '</div>' + + '<form name="parent">' + + '<div class="ng-form" name="child">' + + '<input ng:model="modelA" name="inputA" required>' + + '</div>' + '</form>'); $compile(doc)(scope); scope.$apply(); var parent = scope.parent, - child = scope.child; + child = scope.child; expect(parent).toBeDefined(); expect(child).toBeDefined(); @@ -211,6 +211,39 @@ describe('form', function() { }); + it('should deregister a input when its removed from DOM', function() { + doc = jqLite( + '<form name="parent">' + + '<div class="ng-form" name="child">' + + '<input ng:model="modelA" name="inputA" required>' + + '</div>' + + '</form>'); + $compile(doc)(scope); + scope.$apply(); + + var parent = scope.parent, + child = scope.child, + input = child.inputA; + + expect(parent).toBeDefined(); + expect(child).toBeDefined(); + expect(parent.$error.required).toEqual([child]); + expect(child.$error.required).toEqual([input]); + expect(doc.hasClass('ng-invalid')).toBe(true); + expect(doc.hasClass('ng-invalid-required')).toBe(true); + expect(doc.find('div').hasClass('ng-invalid')).toBe(true); + expect(doc.find('div').hasClass('ng-invalid-required')).toBe(true); + doc.find('input').remove(); //remove child + + expect(parent.$error.required).toBe(false); + expect(child.$error.required).toBe(false); + expect(doc.hasClass('ng-valid')).toBe(true); + expect(doc.hasClass('ng-valid-required')).toBe(true); + expect(doc.find('div').hasClass('ng-valid')).toBe(true); + expect(doc.find('div').hasClass('ng-valid-required')).toBe(true); + }); + + it('should chain nested forms in repeater', function() { doc = jqLite( '<ng:form name=parent>' + |
