<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description('Check stepping-up and -down for number input from renderer.');

var input = document.createElement('input');
var invalidStateErr = '"InvalidStateError (DOM Exception 11): The object is in an invalid state."';

function sendKey(keyName) {
    var event = document.createEvent('KeyboardEvent');
    event.initKeyboardEvent('keydown', true, true, document.defaultView, keyName);
    input.dispatchEvent(event);
}

function setInputAttributes(min, max, step, value) {
    input.min = min;
    input.max = max;
    input.step = step;
    input.value = value;
}

function stepUp(value, step, max, optionalStepCount) {
    setInputAttributes(null, max, step, value);
    if (typeof optionalStepCount != "undefined")
        if (optionalStepCount < 0)
            for (var i = 0; i < -optionalStepCount; i++)
                sendKey('Down');
        else
            for (var i = 0; i < optionalStepCount; i++)
                sendKey('Up');
    else
        sendKey('Up');
    return input.value;
}

function stepDown(value, step, min, optionalStepCount) {
    setInputAttributes(min, null, step, value);
    if (typeof optionalStepCount != "undefined")
        if (optionalStepCount < 0)
            for (var i = 0; i < -optionalStepCount; i++)
                sendKey('Up');
        else
            for (var i = 0; i < optionalStepCount; i++)
                sendKey('Down');
    else
        sendKey('Down');
    return input.value;
}

// Range value gets automatically shifted based on bounds,
// So always set the min and max first to get expected behavior

function stepUpExplicitBounds(min, max, step, value, stepCount) {
    setInputAttributes(min, max, step, value);
    if (typeof stepCount !== 'undefined')
        if (stepCount < 0) {
            for (var i = 0; i < -stepCount; i++)
                sendKey('Down');
        } else {
            for (var i = 0; i < stepCount; i++)
                sendKey('Up');
        }
    else
        sendKey('Up');
    return input.value;
}

function stepDownExplicitBounds(min, max, step, value, stepCount) {
    setInputAttributes(min, max, step, value);
    if (typeof stepCount !== 'undefined')
        if (stepCount < 0) {
            for (var i = 0; i < -stepCount; i++)
                sendKey('Up');
        } else {
            for (var i = 0; i < stepCount; i++)
                sendKey('Down');
        }
    else
        sendKey('Down');
    return input.value;
}

debug('Number type');
input.type = 'number';
debug('Function arguments are (value, step, {min or max}, [stepCount]).');

debug('');
debug('Invalid value');
shouldBe('stepUp("", null, null)', '"1"');
shouldBe('stepDown("", null, null)', '"-1"');
shouldBe('stepUp("", "any", null)', '"1"');
shouldBe('stepDown("", "any", null)', '"-1"');
shouldBe('stepUp("", "foo", null)', '"1"');
shouldBe('stepDown("", "foo", null)', '"-1"');
shouldBe('stepUp("foo", null, null)', '"1"');
shouldBe('stepDown("foo", null, null)', '"-1"');
shouldBe('stepUp("foo", "any", null)', '"1"');
shouldBe('stepDown("foo", "any", null)', '"-1"');
shouldBe('stepUp("foo", "foo", null)', '"1"');
shouldBe('stepDown("foo", "foo", null)', '"-1"');

debug('');
debug('Normal cases');
shouldBe('stepUp("0", null, null)', '"1"');
shouldBe('stepUp("1", null, null, 2)', '"3"');
shouldBe('stepUp("3", null, null, -1)', '"2"');
shouldBe('stepDown("2", null, null)', '"1"');
shouldBe('stepDown("1", null, null, 2)', '"-1"');
shouldBe('stepDown("-1", null, null, -1)', '"0"');

debug('');
debug('Fractional cases')

// Note: these tests also appear in number-stepup-stepdown.html. However, the
// results here differ from the results there. According to:
//
//      https://html.spec.whatwg.org/multipage/forms.html#number-state-(type=number)
//
// The browser is allowed to clamp resulting values to the nearest multiple of
// the [step] value:
//
//      When the element is suffering from a step mismatch, the user agent may
//      round the element's value to the nearest number for which the element
//      would not suffer from a step mismatch. If there are two such numbers,
//      user agents are encouraged to pick the one nearest positive infinity.
//
// WebKit seesm to perform this clamping when stepping from the UI, but not
// from the API.
//
// See also the function comment for InputType::stepUpFromRenderer.

// Base/model/template tests
shouldBe('stepUp("0.1", 1, null)', '"1"')       // Is 1.1 in non-render test
shouldBe('stepUp("0.2", 1, null)', '"1"');      // Is 1.1 in non-render test
shouldBe('stepUp("1.0", 1, null)', '"2"');
shouldBe('stepUp("1.1", 1, null)', '"2"');      // Is 2.1 in non-render test
shouldBe('stepUp("1.2", 1, null)', '"2"');      // Is 2.2 in non-render test
shouldBe('stepUp("2.0", 1, null)', '"3"');

debug('');
// Same as above, but with negative numbers.
shouldBe('stepUp("-0.1", 1, null)', '"0"');     // Is 0.9 in non-render test
shouldBe('stepUp("-0.2", 1, null)', '"0"');     // Is 0.8 in non-render test
shouldBe('stepUp("-1.0", 1, null)', '"0"');
shouldBe('stepUp("-1.1", 1, null)', '"-1"');    // Is -0.1 in non-render test
shouldBe('stepUp("-1.2", 1, null)', '"-1"');    // Is -0.2 in non-render test
shouldBe('stepUp("-2.0", 1, null)', '"-1"');

debug('');
// Same as above, but stepping down rather than up.
shouldBe('stepDown("0.1", 1, null)', '"0"');    // Is -0.9 in non-render test
shouldBe('stepDown("0.2", 1, null)', '"0"');    // Is -0.8 in non-render test
shouldBe('stepDown("1.0", 1, null)', '"0"');
shouldBe('stepDown("1.1", 1, null)', '"1"');    // Is 0.1 in non-render test
shouldBe('stepDown("1.2", 1, null)', '"1"');    // Is 0.2 in non-render test
shouldBe('stepDown("2.0", 1, null)', '"1"');

debug('');
shouldBe('stepDown("-0.1", 1, null)', '"-1"');  // Is -1.1 in non-render test
shouldBe('stepDown("-0.2", 1, null)', '"-1"');  // Is -1.2 in non-render test
shouldBe('stepDown("-1.0", 1, null)', '"-2"');
shouldBe('stepDown("-1.1", 1, null)', '"-2"');  // Is -2.1 in non-render test
shouldBe('stepDown("-1.2", 1, null)', '"-2"');  // Is -2.2 in non-render test
shouldBe('stepDown("-2.0", 1, null)', '"-3"');

// Same as above, but with leading/trailing zeros removed.
debug('');
shouldBe('stepUp(".1", 1, null)', '"1"');       // Is 1.1 in non-render test
shouldBe('stepUp(".2", 1, null)', '"1"');       // Is 1.2 in non-render test
shouldBe('stepUp("1.", 1, null)', '"1"');
shouldBe('stepUp("2.", 1, null)', '"1"');

debug('');
shouldBe('stepUp("-.1", 1, null)', '"0"');      // Is 0.9 in non-render test
shouldBe('stepUp("-.2", 1, null)', '"0"');      // Is 0.8 in non-render test
shouldBe('stepUp("-1.", 1, null)', '"1"');
shouldBe('stepUp("-2.", 1, null)', '"1"');

debug('');
shouldBe('stepDown(".1", 1, null)', '"0"');     // Is -0.9 in non-render test
shouldBe('stepDown(".2", 1, null)', '"0"');     // Is -0.8 in non-render test
shouldBe('stepDown("1.", 1, null)', '"-1"');
shouldBe('stepDown("2.", 1, null)', '"-1"');

debug('');
shouldBe('stepDown("-.1", 1, null)', '"-1"');   // Is -1.1 in non-render test
shouldBe('stepDown("-.2", 1, null)', '"-1"');   // Is -1.2 in non-render test
shouldBe('stepDown("-1.", 1, null)', '"-1"');
shouldBe('stepDown("-2.", 1, null)', '"-1"');

// Same as above, but stepping by .1 rather than 1.
debug('');
shouldBe('stepUp("0.1", .1, null)', '"0.2"');
shouldBe('stepUp("0.2", .1, null)', '"0.3"');
shouldBe('stepUp("1.0", .1, null)', '"1.1"');
shouldBe('stepUp("1.1", .1, null)', '"1.2"');
shouldBe('stepUp("1.2", .1, null)', '"1.3"');
shouldBe('stepUp("2.0", .1, null)', '"2.1"');

debug('');
shouldBe('stepUp("-0.1", .1, null)', '"0"');
shouldBe('stepUp("-0.2", .1, null)', '"-0.1"');
shouldBe('stepUp("-1.0", .1, null)', '"-0.9"');
shouldBe('stepUp("-1.1", .1, null)', '"-1"');
shouldBe('stepUp("-1.2", .1, null)', '"-1.1"');
shouldBe('stepUp("-2.0", .1, null)', '"-1.9"');

debug('');
shouldBe('stepDown("0.1", .1, null)', '"0"');
shouldBe('stepDown("0.2", .1, null)', '"0.1"');
shouldBe('stepDown("1.0", .1, null)', '"0.9"');
shouldBe('stepDown("1.1", .1, null)', '"1"');
shouldBe('stepDown("1.2", .1, null)', '"1.1"');
shouldBe('stepDown("2.0", .1, null)', '"1.9"');

debug('');
shouldBe('stepDown("-0.1", .1, null)', '"-0.2"');
shouldBe('stepDown("-0.2", .1, null)', '"-0.3"');
shouldBe('stepDown("-1.0", .1, null)', '"-1.1"');
shouldBe('stepDown("-1.1", .1, null)', '"-1.2"');
shouldBe('stepDown("-1.2", .1, null)', '"-1.3"');
shouldBe('stepDown("-2.0", .1, null)', '"-2.1"');

debug('');
shouldBe('stepUp(".1", .1, null)', '"0.2"');
shouldBe('stepUp(".2", .1, null)', '"0.3"');
shouldBe('stepUp("1.", .1, null)', '"0.1"');
shouldBe('stepUp("2.", .1, null)', '"0.1"');

debug('');
shouldBe('stepUp("-.1", .1, null)', '"0"');
shouldBe('stepUp("-.2", .1, null)', '"-0.1"');
shouldBe('stepUp("-1.", .1, null)', '"0.1"');
shouldBe('stepUp("-2.", .1, null)', '"0.1"');

shouldBe('stepDown(".1", .1, null)', '"0"');
shouldBe('stepDown(".2", .1, null)', '"0.1"');
shouldBe('stepDown("1.", .1, null)', '"-0.1"');
shouldBe('stepDown("2.", .1, null)', '"-0.1"');

debug('');
shouldBe('stepDown("-.1", .1, null)', '"-0.2"');
shouldBe('stepDown("-.2", .1, null)', '"-0.3"');
shouldBe('stepDown("-1.", .1, null)', '"-0.1"');
shouldBe('stepDown("-2.", .1, null)', '"-0.1"');

debug('');
debug('Invalid step value');
shouldBe('stepUp("0", "foo", null)', '"1"');
shouldBe('stepUp("1", "0", null)', '"2"');
shouldBe('stepUp("2", "-1", null)', '"3"');

debug('');
debug('Step=any');
shouldBe('stepUp("0", "any", null)', '"1"');
shouldBe('stepDown("0", "any", null)', '"-1"');

debug('');
debug('Step=any corner case');
shouldBe('stepUpExplicitBounds("0", "100", "any", "1.5", "1")', '"2.5"');
shouldBe('stepDownExplicitBounds("0", "100", "any", "1.5", "1")', '"0.5"');

debug('');
debug('Overflow/underflow');
shouldBe('stepDown("1", "1", "0")', '"0"');
shouldBe('stepDown("0", "1", "0")', '"0"');
shouldBe('stepDown("1", "1", "0", 2)', '"0"');
shouldBe('stepDown("1", "3.40282346e+38", "", 2)', '"-3.40282346e+38"');
shouldBe('stepUp("-1", "1", "0")', '"0"');
shouldBe('stepUp("0", "1", "0")', '"0"');
shouldBe('stepUp("-1", "1", "0", 2)', '"0"');
shouldBe('stepUp("1", "3.40282346e+38", "", 2)', '"3.40282346e+38"');

debug('');
debug('stepDown()/stepUp() for stepMismatch values');
shouldBe('stepUp("1", "2", "")', '"2"');
shouldBe('input.min = "0"; stepUp("9", "10", "")', '"10"');
shouldBe('stepDown("19", "10", "0")', '"10"');
shouldBe('stepUp("89", "10", "99")', '"90"');
shouldBe('stepUp("7", "300", "")', '"300"');
shouldBe('stepUp("-7", "300", "")', '"0"');
shouldBe('stepDown("7", "300", "")', '"0"');
shouldBe('stepDown("-7", "300", "")', '"-300"');

debug('');
debug('Huge value and small step');
shouldBe('input.min = ""; stepUp("1e+38", "1", "", 999)', '"1e+38"');
shouldBe('input.max = ""; stepDown("1e+38", "1", "", 999)', '"1e+38"');

debug('');
debug('Fractional numbers');
shouldBe('input.min = ""; stepUp("0", "0.33333333333333333", "", 3)', '"1"');
shouldBe('stepUp("1", "0.1", "", 10)', '"2"');
shouldBe('input.min = "0"; stepUp("0", "0.003921568627450980", "1", 255)', '"1"');

debug('');
debug('Rounding');
shouldBe('stepUp("5.005", "0.005", "", 2)', '"5.015"');
shouldBe('stepUp("5.005", "0.005", "", 11)', '"5.06"');
shouldBe('stepUp("5.005", "0.005", "", 12)', '"5.065"');
shouldBe('stepUpExplicitBounds("4", "9", "0.005", "5.005", 2)', '"5.015"');
shouldBe('stepUpExplicitBounds("4", "9", "0.005", "5.005", 11)', '"5.06"');
shouldBe('stepUpExplicitBounds("4", "9", "0.005", "5.005", 12)', '"5.065"');
shouldBe('stepUpExplicitBounds(-4, 4, 1, "")', '"1"');
shouldBe('stepDownExplicitBounds(-4, 4, 1, "")', '"-1"');
shouldBe('stepDownExplicitBounds(0, 4, 1, "")', '"0"');
shouldBe('stepUpExplicitBounds(-4, 0, 1, "")', '"0"');
shouldBe('stepDownExplicitBounds(1, 4, 1, "")', '"1"');
shouldBe('stepUpExplicitBounds(1, 4, 1, "")', '"1"');
shouldBe('stepDownExplicitBounds(-4, -1, 1, "")', '"-1"');
shouldBe('stepUpExplicitBounds(-4, -1, 1, "")', '"-1"');
shouldBe('stepUpExplicitBounds(-100, null, 3, "")', '"2"');
shouldBe('stepDownExplicitBounds(-100, null, 3, "")', '"-1"');
shouldBe('stepUpExplicitBounds(1, 4, 1, 0)', '"1"');
shouldBe('stepDownExplicitBounds(1, 4, 1, 0)', '"0"');
shouldBe('stepDownExplicitBounds(-4, -1, 1, 0)', '"-1"');
shouldBe('stepUpExplicitBounds(-4, -1, 1, 0)', '"0"');
shouldBe('stepUpExplicitBounds(-100, null, 3, 3)', '"5"');
shouldBe('stepDownExplicitBounds(-100, null, 3, 3)', '"2"');

debug('');
</script>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
