blob: 476781b41811b54f4c925a39c268945468c48693 [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>
<script src="../../editing/editing.js"></script>
</head>
<body>
<input type="text" id="field" value="a">
<input type="password" id="secure-field" value="a">
<script>
var output = "This tests that the value change notifications user info data are correct when replacing the contents of an input field.\n\n";
const AXTextStateChangeTypeEdit = 1;
const AXTextEditTypeDelete = 1;
const AXTextEditTypeInsert = AXTextEditTypeDelete + 1;
var globalUserInfo = null;
function notificationCallback(notification, userInfo) {
if (notification == "AXValueChanged")
globalUserInfo = userInfo;
}
async function testField(id, newValue, expectedDeletion, expectedInsertion) {
// Assign the expected values to their corresponding globals so that they can be used in expect().
globalExpectedDeletion = expectedDeletion;
globalExpectedInsertion = expectedInsertion;
output += `globalExpectedDeletion: ${globalExpectedDeletion}\n`;
output += `globalExpectedInsertion: ${globalExpectedInsertion}\n`;
globalUserInfo = null;
document.getElementById(id).value = newValue;
await waitFor(() => { return globalUserInfo; });
// The userInfo for a replacement edit operation consists of a dictionary with the type AXTextStateChangeTypeEdit and an array of 2 elements describing the deletion and the insertion.
output += expect("globalUserInfo['AXTextStateChangeType']", "AXTextStateChangeTypeEdit");
values = globalUserInfo['AXTextChangeValues'];
output += expect("values.length", "2");
// Each array element is in turn a dictionary with the EditType, deletion or insertion, and the text being deleted or inserted.
output += expect("values[0]['AXTextEditType']", "AXTextEditTypeDelete");
output += expect("values[0]['AXTextChangeValue']", "globalExpectedDeletion");
output += expect("values[1]['AXTextEditType']", "AXTextEditTypeInsert");
output += expect("values[1]['AXTextChangeValue']", "globalExpectedInsertion");
}
if (window.accessibilityController) {
jsTestIsAsync = true;
accessibilityController.enableEnhancedAccessibility(true);
var webArea = accessibilityController.rootElement.childAtIndex(0);
webArea.addNotificationListener(notificationCallback);
var globalExpectedDeletion, globalExpectedInsertion;
setTimeout(async () => {
output += "Regular text field:\n";
await testField("field", "b", "a", "b");
output += "Password field:\n";
// Notification userInfo should come with masking characters (bullet = \u2022) regardless the inner or new value.
await testField("secure-field", "b", "\u2022", "\u2022");
webArea.removeNotificationListener();
debug(output);
finishJSTest();
}, 0);
}
</script>
</body>
</html>