<!DOCTYPE html>
<html>
<head>
<script src="../resources/js-test.js"></script>
</head>
<body>
<input id="password" type="password" value="Secret">
<script>
description("This tests that AXValue, caret position and text selection are reported correctly for password fields.");
if (window.accessibilityController) {
let password = document.getElementById("password");
let textLength = password.value.length;
password.focus();
window.axPassword = accessibilityController.accessibleElementById("password");
// Initially the caret should be at the beginning of the field.
shouldBe("axPassword", "axPassword.selectionAnchorObject");
shouldBe("axPassword", "axPassword.selectionFocusObject");
shouldBeZero("axPassword.selectionAnchorOffset");
shouldBeZero("axPassword.selectionFocusOffset");
// The password field should contain 6 bullets.
// (Bullet is the default mask character, not star.)
let axValue = "AXValue: " + new Array(textLength + 1).join(
String.fromCharCode(8226 /* Bullet symbol. */));
shouldBeEqualToString("axPassword.stringValue", axValue);
for (let start = 0; start < textLength; ++start) {
for (let end = start; end < textLength; ++end) {
password.setSelectionRange(start, end);
shouldBe("axPassword", "axPassword.selectionAnchorObject");
shouldBe("axPassword", "axPassword.selectionFocusObject");
shouldBeEqualToNumber("axPassword.selectionAnchorOffset", start);
shouldBeEqualToNumber("axPassword.selectionFocusOffset", end);
}
}
// Invalid range.
password.setSelectionRange(7, 0);
shouldBe("axPassword", "axPassword.selectionAnchorObject");
shouldBe("axPassword", "axPassword.selectionFocusObject");
shouldBeZero("axPassword.selectionAnchorOffset");
shouldBeZero("axPassword.selectionFocusOffset");
}
</script>
</body>
</html>