blob: 4c3ff4f26142a57ee8de3c66eabb93444743e508 [file] [log] [blame] [edit]
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/accessibility-helper.js"></script>
<script src="../../resources/js-test.js"></script>
</head>
<body>
<input type="range" min="0" max="100" value="50" id="slider">
<span id="val">50</span>
<script>
var output = "This test ensures slider increment and decrement actions work as expected, and verifies other general properties of sliders.\n\n";
document.getElementById("slider").addEventListener("change", event => {
document.getElementById("val").innerText = event.target.value;
});
if (window.accessibilityController) {
window.jsTestIsAsync = true;
var slider = document.getElementById("slider");
var sliderAXObject = accessibilityController.accessibleElementById("slider");
var valueDiv = document.getElementById("val");
var thumbAXObject;
async function testMinMax(min, max) {
await waitFor(() => sliderAXObject.minValue === min && sliderAXObject.maxValue === max);
output += expect("sliderAXObject.minValue", min);
output += expect("sliderAXObject.maxValue", max);
}
async function testValues(oldValue, direction) {
// Increment and decrement operations modify the slider's value by 5%.
const range = slider.getAttribute("max") - slider.getAttribute("min");
const expected = direction * range * 0.05 + (oldValue * 1);
await waitFor(() => slider.value == expected && valueDiv.innerText == expected);
output += expect("slider.value", `'${expected}'`);
output += expect("valueDiv.innerText", `'${expected}'`);
}
async function testIncrement() {
const oldValue = slider.value;
output += `${evalAndReturn("sliderAXObject.increment()")}\n`;
await testValues(oldValue, 1)
}
async function testDecrement() {
const oldValue = slider.value;
output += `${evalAndReturn("sliderAXObject.decrement()")}\n`;
await testValues(oldValue, -1)
}
setTimeout(async function() {
output += "** Verify basic slider accessibility attributes\n";
await testMinMax(0, 100);
output += expect("sliderAXObject.childrenCount", 1);
output += expect("sliderAXObject.role", "'AXRole: AXSlider'");
output += "\n** Verify basic thumb accessibility attributes\n";
output += `${evalAndReturn("thumbAXObject = sliderAXObject.childAtIndex(0)")}\n`;
output += expect("thumbAXObject.childrenCount", 0);
output += expect("thumbAXObject.role", "'AXRole: AXValueIndicator'");
output += "\n** Increment the slider, test slider value and div set on 'update' event\n";
await testIncrement();
output += "\n** Decrement the slider, test slider value and div set on 'update' event\n";
output += `${evalAndReturn("slider.value = 22")}\n`;
await testDecrement();
output += "\n** Change slider range\n";
output += `${evalAndReturn("slider.setAttribute('max', 1000)")}\n`;
output += `${evalAndReturn("slider.setAttribute('min', 500)")}\n`;
await testMinMax(500, 1000);
output += "\n** Re-test incrementing the slider\n";
output += `${evalAndReturn("slider.value = 600")}\n`;
await testIncrement();
output += "\n** Re-test decrementing the slider\n";
output += `${evalAndReturn("slider.value = 850")}\n`;
await testDecrement();
debug(output);
finishJSTest();
}, 0);
}
</script>
</body>
</html>