@@ -3849,6 +3849,102 @@ describe('input', function() {
3849
3849
} ) ;
3850
3850
} ) ;
3851
3851
3852
+ describe ( 'ngRequired' , function ( ) {
3853
+
3854
+ describe ( 'when the ngRequired expression initially evaluates to true' , function ( ) {
3855
+
3856
+ it ( 'should be valid even if value is 0' , function ( ) {
3857
+ compileInput ( '<input type="number" ng-model="value" name="numberInput" ng-required="true" />' ) ;
3858
+
3859
+ changeInputValueTo ( '0' ) ;
3860
+ expect ( inputElm ) . toBeValid ( ) ;
3861
+ expect ( scope . value ) . toBe ( 0 ) ;
3862
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3863
+ } ) ;
3864
+
3865
+ it ( 'should be valid even if value 0 is set from model' , function ( ) {
3866
+ compileInput ( '<input type="number" ng-model="value" name="numberInput" ng-required="true" />' ) ;
3867
+
3868
+ scope . $apply ( 'value = 0' ) ;
3869
+
3870
+ expect ( inputElm ) . toBeValid ( ) ;
3871
+ expect ( inputElm . val ( ) ) . toBe ( '0' ) ;
3872
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3873
+ } ) ;
3874
+
3875
+ it ( 'should register required on non boolean elements' , function ( ) {
3876
+ compileInput ( '<div ng-model="value" name="numberInput" ng-required="true">' ) ;
3877
+
3878
+ scope . $apply ( "value = ''" ) ;
3879
+
3880
+ expect ( inputElm ) . toBeInvalid ( ) ;
3881
+ expect ( scope . form . numberInput . $error . required ) . toBeTruthy ( ) ;
3882
+ } ) ;
3883
+
3884
+ it ( 'should change from invalid to valid when the value is empty and the ngRequired expression changes to false' , function ( ) {
3885
+ compileInput ( '<input type="number" ng-model="value" name="numberInput" ng-required="ngRequiredExpr" />' ) ;
3886
+
3887
+ scope . $apply ( 'ngRequiredExpr = true' ) ;
3888
+
3889
+ expect ( inputElm ) . toBeInvalid ( ) ;
3890
+ expect ( scope . value ) . toBeUndefined ( ) ;
3891
+ expect ( scope . form . numberInput . $error . required ) . toBeTruthy ( ) ;
3892
+
3893
+ scope . $apply ( 'ngRequiredExpr = false' ) ;
3894
+
3895
+ expect ( inputElm ) . toBeValid ( ) ;
3896
+ expect ( scope . value ) . toBeUndefined ( ) ;
3897
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3898
+ } ) ;
3899
+ } ) ;
3900
+
3901
+ describe ( 'when the ngRequired expression initially evaluates to false' , function ( ) {
3902
+
3903
+ it ( 'should be valid even if value is empty' , function ( ) {
3904
+ compileInput ( '<input type="number" ng-model="value" name="numberInput" ng-required="false" />' ) ;
3905
+
3906
+ expect ( inputElm ) . toBeValid ( ) ;
3907
+ expect ( scope . value ) . toBeUndefined ( ) ;
3908
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3909
+ expect ( scope . form . numberInput . $error . number ) . toBeFalsy ( ) ;
3910
+ } ) ;
3911
+
3912
+ it ( 'should be valid if value is non-empty' , function ( ) {
3913
+ compileInput ( '<input type="number" ng-model="value" name="numberInput" ng-required="false" />' ) ;
3914
+
3915
+ changeInputValueTo ( '42' ) ;
3916
+ expect ( inputElm ) . toBeValid ( ) ;
3917
+ expect ( scope . value ) . toBe ( 42 ) ;
3918
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3919
+ } ) ;
3920
+
3921
+ it ( 'should not register required on non boolean elements' , function ( ) {
3922
+ compileInput ( '<div ng-model="value" name="numberInput" ng-required="false">' ) ;
3923
+
3924
+ scope . $apply ( "value = ''" ) ;
3925
+
3926
+ expect ( inputElm ) . toBeValid ( ) ;
3927
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3928
+ } ) ;
3929
+
3930
+ it ( 'should change from valid to invalid when the value is empty and the ngRequired expression changes to true' , function ( ) {
3931
+ compileInput ( '<input type="number" ng-model="value" name="numberInput" ng-required="ngRequiredExpr" />' ) ;
3932
+
3933
+ scope . $apply ( 'ngRequiredExpr = false' ) ;
3934
+
3935
+ expect ( inputElm ) . toBeValid ( ) ;
3936
+ expect ( scope . value ) . toBeUndefined ( ) ;
3937
+ expect ( scope . form . numberInput . $error . required ) . toBeFalsy ( ) ;
3938
+
3939
+ scope . $apply ( 'ngRequiredExpr = true' ) ;
3940
+
3941
+ expect ( inputElm ) . toBeInvalid ( ) ;
3942
+ expect ( scope . value ) . toBeUndefined ( ) ;
3943
+ expect ( scope . form . numberInput . $error . required ) . toBeTruthy ( ) ;
3944
+ } ) ;
3945
+ } ) ;
3946
+ } ) ;
3947
+
3852
3948
describe ( 'minlength' , function ( ) {
3853
3949
3854
3950
it ( 'should invalidate values that are shorter than the given minlength' , function ( ) {
0 commit comments