Check stepUp() and stepDown() behavior for number type. On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". Number type Invalid value PASS stepUp("", null, null) is "1" PASS stepDown("", null, null) is "-1" Non-number arguments PASS stepUp("0", null, null, "0") is "0" PASS stepDown("0", null, null, "0") is "0" PASS stepUp("0", null, null, "foo") is "0" PASS stepDown("0", null, null, "foo") is "0" PASS stepUp("0", null, null, null) is "0" PASS stepDown("0", null, null, null) is "0" Normal cases PASS stepUp("0", null, null) is "1" PASS stepUp("1", null, null, 2) is "3" PASS stepUp("3", null, null, -1) is "2" PASS stepDown("2", null, null) is "1" PASS stepDown("1", null, null, 2) is "-1" PASS stepDown("-1", null, null, -1) is "0" PASS stepDown("0", "1", null, 2147483648) is "2147483648" Extra arguments PASS input.value = "0"; input.min = null; input.step = null; input.stepUp(1, 2); input.value is "1" PASS input.value = "1"; input.stepDown(1, 3); input.value is "0" Invalid step value PASS stepUp("0", "foo", null) is "1" PASS stepUp("1", "0", null) is "2" PASS stepUp("2", "-1", null) is "3" Step=any PASS stepUp("0", "any", null) threw exception InvalidStateError: Failed to execute 'stepUp' on 'HTMLInputElement': This form element does not have an allowed value step.. PASS stepDown("0", "any", null) threw exception InvalidStateError: Failed to execute 'stepDown' on 'HTMLInputElement': This form element does not have an allowed value step.. Step=any corner case PASS stepUpExplicitBounds("0", "100", "any", "1.5", "1") threw exception InvalidStateError: Failed to execute 'stepUp' on 'HTMLInputElement': This form element does not have an allowed value step.. PASS stepDownExplicitBounds("0", "100", "any", "1.5", "1") threw exception InvalidStateError: Failed to execute 'stepDown' on 'HTMLInputElement': This form element does not have an allowed value step.. Overflow/underflow PASS stepDown("1", "1", "0") is "0" PASS stepDown("0", "1", "0") is "0" PASS stepDown("1", "1", "0", 2) is "0" PASS stepDown("1", "1.797693134862315e+308", "", 2) is "-1.797693134862315e+308" PASS stepUp("-1", "1", "0") is "0" PASS stepUp("0", "1", "0") is "0" PASS stepUp("-1", "1", "0", 2) is "0" PASS stepUp("1", "1.797693134862315e+308", "", 2) is "1.797693134862315e+308" stepDown()/stepUp() for stepMismatch values PASS stepUpExplicitBounds("0", "", "2", "1"); input.value is "2" PASS stepUp("1", "2", "") is "2" PASS input.stepDown(); input.value is "0" PASS input.min = "0"; stepUp("9", "10", "", 9) is "90" PASS stepDown("19", "10", "0") is "10" PASS stepUp("89", "10", "99") is "90" Huge value and small step PASS input.min = ""; stepUp("1e+308", "1", "", 999999) is "1e+308" PASS input.max = ""; stepDown("1e+308", "1", "", 999999) is "1e+308" Fractional numbers PASS input.min = ""; stepUp("0", "0.33333333333333333", "", 3) is "1" PASS stepUp("1", "0.1", "", 10) is "2" PASS input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.stepUp(); input.value is "3" PASS input.min = "0"; stepUp("0", "0.003921568627450980", "1", 255) is "1" PASS for (var i = 0; i < 255; i++) { input.stepDown(); }; input.value is "0" Rounding PASS stepUp("5.005", "0.005", "", 2) is "5.015" PASS stepUp("5.005", "0.005", "", 11) is "5.06" PASS stepUp("5.005", "0.005", "", 12) is "5.065" PASS stepUpExplicitBounds("4", "9", "0.005", "5.005", 2) is "5.015" PASS stepUpExplicitBounds("4", "9", "0.005", "5.005", 11) is "5.06" PASS stepUpExplicitBounds("4", "9", "0.005", "5.005", 12) is "5.065" This test should not dispatch any |change| events. PASS changeEventCounter is 0 PASS successfullyParsed is true TEST COMPLETE