<!doctype html>
<html>
<body>
<script src="../../../resources/js-test-pre.js"></script>
<script>
description("Tests that click events still work after a range is disabled while dragging.");
jsTestIsAsync = true;

const input = (that) => {
    if (Math.abs(that.value - 50) === 50)
        that.disabled = true;
};

let buttonClicked = false;

function buttonClick()
{
    buttonClicked = true;
}

onload = function() {
    range = document.querySelector("input");

    shouldBeFalse("range.disabled");

    debug("Drag range slider.");
    var centerY = range.offsetTop + range.offsetHeight / 2;
    var centerX = range.offsetLeft + range.offsetWidth / 2;
    var rightEdgeX = range.offsetLeft + range.offsetWidth - 1;

    eventSender.mouseMoveTo(centerX, centerY);
    eventSender.mouseDown();
    eventSender.mouseMoveTo(rightEdgeX, centerY);
    eventSender.mouseUp();

    setTimeout(function() {
        shouldBeTrue("range.disabled");

        debug("Click button");
        button = document.querySelector("button");
        var centerY = button.offsetTop + button.offsetHeight / 2;
        var centerX = button.offsetLeft + button.offsetWidth / 2;
        eventSender.mouseMoveTo(centerX, centerY);
        eventSender.mouseDown();
        eventSender.mouseUp();

        setTimeout(function() {
            shouldBeTrue("buttonClicked");
            finishJSTest();
        }, 0);
    }, 0);
}
</script>

<input type="range" oninput="input(this)">
<button onclick="buttonClick()">Click</button>
<script src="../../../resources/js-test-post.js"></script>
</body>
</html>
