<html>
<body>
<script>
    if (window.testRunner)
        testRunner.dumpAsText();

    function checkValue() {
        if (!window.accessibilityController)
            return;
       
        var aria = document.getElementById("slider");
        aria.focus();
        var focusedElement = accessibilityController.focusedElement;
        var value = focusedElement.intValue;
        var minValue = focusedElement.minValue;
        var maxValue = focusedElement.maxValue;
      
        var result = document.getElementById("result");
        if (value == 5 && minValue == 0 && maxValue == 10)
            result.innerText = "This test PASSES in DumpRenderTree. The value is " + value + ", the minValue is "
                + minValue + ", and the max value is " + maxValue + ".";
        else
            result.innerText = "This test FAILS in DumpRenderTree. The value, minValue, and/or maxValue of the range must be incorrect.";
    }
</script>

<div>
    <p>In accessibility, the following should be a progress indicator:</p>
    <p><span tabindex="0" role="slider" id="slider" aria-valuenow=5 aria-valuemin=0 aria-valuemax=10>X</span></p>
    <span id="result"></span>
    <script>
        checkValue();
    </script>
  </div>
 
 </body>
</html>
