Skip to content

Commit

Permalink
fix: avoid using initial step in validation
Browse files Browse the repository at this point in the history
setting the min or max property should not trigger step-based validation

fix #420
  • Loading branch information
pekam committed Oct 7, 2019
1 parent 7599194 commit ae75415
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 1 deletion.
8 changes: 7 additions & 1 deletion src/vaadin-number-field.html
Original file line number Diff line number Diff line change
Expand Up @@ -303,7 +303,13 @@
}

_stepChanged(step) {
this.inputElement.step = step;
if (!this.__stepChangedCalled) {
// Setting the initial value, avoid using it in validation.
this.inputElement.step = 'any';
this.__stepChangedCalled = true;
} else {
this.inputElement.step = step;
}
}

_minChanged(min) {
Expand Down
43 changes: 43 additions & 0 deletions test/number-field.html
Original file line number Diff line number Diff line change
Expand Up @@ -749,6 +749,49 @@
expect(numberField.validate(), 'value should not be greater than max').to.be.false;
});

it('should validate by step when defined by user', () => {
numberField.step = 1.5;

numberField.value = '0';
expect(numberField.validate()).to.be.true;

numberField.value = '-1.5';
expect(numberField.validate()).to.be.true;

numberField.value = '3';
expect(numberField.validate()).to.be.true;

numberField.value = '-1';
expect(numberField.validate()).to.be.false;

numberField.value = '2';
expect(numberField.validate()).to.be.false;
});

it('should use min as step basis in validation when both are defined', () => {
numberField.min = 1;
numberField.step = 1.5;

numberField.value = '1';
expect(numberField.validate()).to.be.true;

numberField.value = '2.5';
expect(numberField.validate()).to.be.true;

numberField.value = '4';
expect(numberField.validate()).to.be.true;

numberField.value = '1.5';
expect(numberField.validate()).to.be.false;
});

it('should not validate by step when only min and max are set', () => {
numberField.min = 1;
numberField.max = 5;
numberField.value = 1.5; // would be invalid by default step=1
expect(numberField.validate()).to.be.true;
});

describe('removing validation constraints', () => {
it('should update "invalid" state when "min" is removed', () => {
numberField.value = '42';
Expand Down

0 comments on commit ae75415

Please sign in to comment.