<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test-pre.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>
description('Check stepping-up and -down for range 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;
}

input.type = 'range';
debug('Function arguments are (min, max, step, value, [stepCount]).');
debug('Using the default values');
shouldBe('stepUpExplicitBounds(null, null, null, "")', '"51"');
shouldBe('stepDownExplicitBounds(null, null, null, "")', '"49"');
shouldBe('stepUpExplicitBounds(null, null, "any", "")', '"51"');
shouldBe('stepDownExplicitBounds(null, null, "any", "")', '"49"');
shouldBe('stepUpExplicitBounds(null, null, "foo", "")', '"51"');
shouldBe('stepDownExplicitBounds(null, null, "foo", "")', '"49"');
shouldBe('stepUpExplicitBounds(null, null, null, "foo")', '"51"');
shouldBe('stepDownExplicitBounds(null, null, null, "foo")', '"49"');
shouldBe('stepUpExplicitBounds(null, null, "any", "foo")', '"51"');
shouldBe('stepDownExplicitBounds(null, null, "any", "foo")', '"49"');
shouldBe('stepUpExplicitBounds(null, null, "foo", "foo")', '"51"');
shouldBe('stepDownExplicitBounds(null, null, "foo", "foo")', '"49"');

debug('');
debug('Normal cases');
shouldBe('stepUpExplicitBounds(null, null, null, "0")', '"1"');
shouldBe('stepUpExplicitBounds(null, null, null, "1", 2)', '"3"');
shouldBe('stepUpExplicitBounds(null, null, null, "3", -1)', '"2"');
shouldBe('stepDownExplicitBounds("-100", null, null, "2")', '"1"');
shouldBe('stepDownExplicitBounds("-100", null, null, "1", 2)', '"-1"');
shouldBe('stepDownExplicitBounds("-100", null, null, "-1", -1)', '"0"');


debug('');
debug('Fractional cases')
// "When the element is suffering from a step mismatch, the user agent must
// round the element's value to the nearest number for which the element would
// not suffer from a step mismatch, and which is greater than or equal to the
// minimum, and, if the maximum is not less than the minimum, which is less
// than or equal to the maximum, if there is a number that matches these
// constraints. If two numbers match these constraints, then user agents must
// use the one nearest to positive infinity.""

// Base/model/template tests
shouldBe('stepUpExplicitBounds(-10, 10, 1, "0.1")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "0.2")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "1.0")', '"2"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "1.1")', '"2"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "1.2")', '"2"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "2.0")', '"3"');

// Same as above, but with negative numbers.
debug('');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-0.1")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-0.2")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-1.0")', '"0"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-1.1")', '"0"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-1.2")', '"0"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-2.0")', '"-1"');

// Same as above, but stepping down rather than up.
debug('');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "0.1")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "0.2")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "1.0")', '"0"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "1.1")', '"0"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "1.2")', '"0"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "2.0")', '"1"');

debug('');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-0.1")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-0.2")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-1.0")', '"-2"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-1.1")', '"-2"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-1.2")', '"-2"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-2.0")', '"-3"');

// Same as above, but with leading/trailing zeros removed.
debug('');
shouldBe('stepUpExplicitBounds(-10, 10, 1, ".1")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, ".2")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "1.")', '"2"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "2.")', '"3"');

debug('');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-.1")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-.2")', '"1"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-1.")', '"0"');
shouldBe('stepUpExplicitBounds(-10, 10, 1, "-2.")', '"-1"');

debug('');
shouldBe('stepDownExplicitBounds(-10, 10, 1, ".1")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, ".2")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "1.")', '"0"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "2.")', '"1"');

debug('');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-.1")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-.2")', '"-1"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-1.")', '"-2"');
shouldBe('stepDownExplicitBounds(-10, 10, 1, "-2.")', '"-3"');

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

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

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

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

debug('');
shouldBe('stepUpExplicitBounds(-10, 10, .1, ".1")', '"0.2"');
shouldBe('stepUpExplicitBounds(-10, 10, .1, ".2")', '"0.3"');
shouldBe('stepUpExplicitBounds(-10, 10, .1, "1.")', '"1.1"');
shouldBe('stepUpExplicitBounds(-10, 10, .1, "2.")', '"2.1"');

debug('');
shouldBe('stepUpExplicitBounds(-10, 10, .1, "-.1")', '"0"');
shouldBe('stepUpExplicitBounds(-10, 10, .1, "-.2")', '"-0.1"');
shouldBe('stepUpExplicitBounds(-10, 10, .1, "-1.")', '"-0.9"');
shouldBe('stepUpExplicitBounds(-10, 10, .1, "-2.")', '"-1.9"');

shouldBe('stepDownExplicitBounds(-10, 10, .1, ".1")', '"0"');
shouldBe('stepDownExplicitBounds(-10, 10, .1, ".2")', '"0.1"');
shouldBe('stepDownExplicitBounds(-10, 10, .1, "1.")', '"0.9"');
shouldBe('stepDownExplicitBounds(-10, 10, .1, "2.")', '"1.9"');

debug('');
shouldBe('stepDownExplicitBounds(-10, 10, .1, "-.1")', '"-0.2"');
shouldBe('stepDownExplicitBounds(-10, 10, .1, "-.2")', '"-0.3"');
shouldBe('stepDownExplicitBounds(-10, 10, .1, "-1.")', '"-1.1"');
shouldBe('stepDownExplicitBounds(-10, 10, .1, "-2.")', '"-2.1"');

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

debug('');
debug('Step=any');
shouldBe('stepUpExplicitBounds(null, null, "any", "1")', '"2"');
shouldBe('stepDownExplicitBounds(null, null, "any", "1")', '"0"');

debug('');
debug('Overflow/underflow');
shouldBe('stepUpExplicitBounds(null, "100", "1", "99")', '"100"');
shouldBe('stepUpExplicitBounds(null, "100", "1", "100")', '"100"');
shouldBe('stepUpExplicitBounds(null, "100", "1", "99", 2)', '"100"');
shouldBe('stepDownExplicitBounds("0", null, "1", "1")', '"0"');
shouldBe('stepDownExplicitBounds("0", null, "1", "0")', '"0"');
shouldBe('stepDownExplicitBounds("0", null, "1", "1", 2)', '"0"');
shouldBe('stepDownExplicitBounds(null, null, "3.40282346e+38", "1", 2)', '"0"');
shouldBe('stepUpExplicitBounds(-100, 0, 1, -1)', '"0"');
shouldBe('stepUpExplicitBounds(null, 0, 1, 0)', '"0"');
shouldBe('stepUpExplicitBounds(-100, 0, 1, -1, 2)', '"0"');
shouldBe('stepUpExplicitBounds(null, null, "3.40282346e+38", "1", 2)', '"0"');

debug('');
debug('stepDown()/stepUp() for stepMismatch values');
shouldBe('stepUpExplicitBounds(null, null, 2, 1)', '"4"');
shouldBe('stepUpExplicitBounds(0, null, 10, 9, 9)', '"100"');
shouldBe('stepDownExplicitBounds(0, null, 10, 19)', '"10"');

debug('');
debug('value + step is <= max, but rounded result would be > max.');
shouldBe('stepUpExplicitBounds(null, 99, 10, 89)', '"90"');

debug('');
debug('Huge value and small step');
shouldBe('stepUpExplicitBounds(0, 1e38, 1, 1e38, 999)', '"1e+38"');
shouldBe('stepDownExplicitBounds(0, 1e38, 1, 1e38, 999)', '"1e+38"');

debug('');
debug('Fractional numbers');
shouldBe('stepUpExplicitBounds(null, null, 0.33333333333333333, 0, 3)', '"1"');
shouldBe('stepUpExplicitBounds(null, null, 0.1, 1)', '"1.1"');
shouldBe('stepUpExplicitBounds(null, null, 0.1, 1, 8)', '"1.8"');
shouldBe('stepUpExplicitBounds(null, null, 0.1, 1, 10)', '"2"');
shouldBe('stepUpExplicitBounds(0, 1, 0.003921568627450980, 0, 255)', '"1"');
shouldBe('stepDownExplicitBounds(null, null, 0.1, 1, 8)', '"0.2"');
shouldBe('stepDownExplicitBounds(null, null, 0.1, 1)', '"0.9"');

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