diff --git a/src/vaadin-number-field.html b/src/vaadin-number-field.html index 07b8977a..412559a3 100644 --- a/src/vaadin-number-field.html +++ b/src/vaadin-number-field.html @@ -333,7 +333,7 @@ } __onInputChange() { - this.checkValidity(); + this.validate(); } _stepOrMinChanged(step, min) { @@ -344,7 +344,7 @@ checkValidity() { // text-field mixin does not check against `min`, `max` and `step` if (this.min !== undefined || this.max !== undefined || this.step !== 1) { - this.invalid = !this.inputElement.checkValidity(); + return this.inputElement.checkValidity(); } return super.checkValidity(); } diff --git a/test/number-field.html b/test/number-field.html index 66981f43..1f588b92 100644 --- a/test/number-field.html +++ b/test/number-field.html @@ -705,6 +705,32 @@ expect(numberField.validate()).to.be.true; }); + it('should align checkValidity with the native input element', () => { + numberField.value = -1; + numberField.min = 0; + + expect(numberField.checkValidity()).to.equal(numberField.inputElement.checkValidity()); + }); + + it('should not validate when explicitly set to invalid', () => { + numberField.invalid = true; + + expect(numberField.value).to.be.empty; + expect(numberField.validate()).to.be.false; + + expect(numberField.invalid).to.be.true; + }); + + it('should validate when inherited validation constraint is provided and explicitly set to invalid', () => { + numberField.invalid = true; + numberField.maxlength = 5; + + expect(numberField.value).to.be.empty; + expect(numberField.validate()).to.be.true; + + expect(numberField.invalid).to.be.false; + }); + it('should allow setting decimals', () => { numberField.value = 7.6; expect(numberField.value).to.be.equal('7.6');