@@ -718,6 +718,99 @@ void main() {
718
718
expect (s.eval ('myForm["name"].name' )).toEqual ("name" );
719
719
});
720
720
721
+ it ("should clear all the error states from the entire form and all error-related CSS classes" , (TestBed _) {
722
+ Scope s = _.rootScope;
723
+ s.context['name' ] = 'cool' ;
724
+
725
+ var form = _.compile ('<form name="myForm">'
726
+ ' <input type="text" ng-model="someModel" probe="i" name="name" />'
727
+ '</form>' );
728
+
729
+ NgForm formModel = s.context['myForm' ];
730
+ Probe probe = s.context['i' ];
731
+ NgModel inputModel = probe.directive (NgModel );
732
+ var input = inputModel.element.node;
733
+
734
+ inputModel.addError ('required' );
735
+ s.apply ();
736
+
737
+ expect (form).toHaveClass ('required-invalid' );
738
+ expect (formModel.hasErrorState ('required' )).toBe (true );
739
+
740
+ expect (input).toHaveClass ('required-invalid' );
741
+ expect (inputModel.hasErrorState ('required' )).toBe (true );
742
+
743
+ formModel.clearErrorStates ();
744
+ s.apply ();
745
+
746
+ expect (form).not.toHaveClass ('required-invalid' );
747
+ expect (form).not.toHaveClass ('ng-invalid' );
748
+ expect (formModel.hasErrorState ('required' )).toBe (false );
749
+
750
+ expect (input).not.toHaveClass ('required-invalid' );
751
+ expect (input).not.toHaveClass ('ng-invalid' );
752
+ expect (inputModel.hasErrorState ('required' )).toBe (false );
753
+ });
754
+
755
+ it ("should clear all errors from the fieldset and properly update the parent form\' s errors" , (TestBed _) {
756
+ Scope s = _.rootScope;
757
+ s.context['name' ] = 'cool' ;
758
+
759
+ var form = _.compile ('<form name="myForm">'
760
+ ' <input type="text" ng-model="anotherModel" probe="x" />' +
761
+ ' <fieldset probe="f">' +
762
+ ' <input type="text" ng-model="someModel" probe="i" name="name" />'
763
+ ' </fieldset>' +
764
+ '</form>' );
765
+
766
+ NgForm formModel = s.context['myForm' ];
767
+ NgModel inputModel = s.context['i' ].directive (NgModel );
768
+ var input = inputModel.element.node;
769
+
770
+ NgModel anotherModel = s.context['x' ].directive (NgModel );
771
+ var anotherInput = anotherModel.element.node;
772
+
773
+ NgForm fieldsetModel = s.context['f' ].directive (NgForm );
774
+ var fieldset = fieldsetModel.element.node;
775
+
776
+ inputModel.addError ("required" );
777
+ anotherModel.addError ("required" );
778
+ s.apply ();
779
+
780
+ expect (form).toHaveClass ('required-invalid' );
781
+ expect (formModel.hasErrorState ('required' )).toBe (true );
782
+ expect (fieldset).toHaveClass ('required-invalid' );
783
+ expect (fieldsetModel.hasErrorState ('required' )).toBe (true );
784
+
785
+ expect (input).toHaveClass ('required-invalid' );
786
+ expect (inputModel.hasErrorState ('required' )).toBe (true );
787
+ expect (anotherInput).toHaveClass ('required-invalid' );
788
+ expect (anotherModel.hasErrorState ('required' )).toBe (true );
789
+
790
+ fieldsetModel.clearErrorStates ();
791
+ s.apply ();
792
+
793
+ expect (form).toHaveClass ('required-invalid' );
794
+ expect (anotherInput).toHaveClass ('required-invalid' );
795
+
796
+ expect (fieldset).not.toHaveClass ('required-invalid' );
797
+ expect (input).not.toHaveClass ('required-invalid' );
798
+
799
+ expect (fieldset).not.toHaveClass ('ng-invalid' );
800
+ expect (form).toHaveClass ('ng-invalid' );
801
+
802
+ expect (fieldsetModel.hasErrorState ('required' )).toBe (false );
803
+ expect (inputModel.hasErrorState ('required' )).toBe (false );
804
+ expect (anotherModel.hasErrorState ('required' )).toBe (true );
805
+ expect (formModel.hasErrorState ('required' )).toBe (true );
806
+
807
+ anotherModel.removeError ("required" );
808
+ s.apply ();
809
+
810
+ expect (formModel.hasErrorState ('required' )).toBe (false );
811
+ expect (form).not.toHaveClass ('required-invalid' );
812
+ });
813
+
721
814
describe ('regression tests: form' , () {
722
815
beforeEachModule ((Module module) {
723
816
module.bind (NgForm );
0 commit comments