108 lines
4.1 KiB
HTML
108 lines
4.1 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<script src="../../resources/js-test.js"></script>
|
|
<script src="../../editing/editing.js"></script>
|
|
<script src="value-change/value-change-helpers.js"></script>
|
|
</head>
|
|
<body id="body">
|
|
|
|
<div id="content">
|
|
<div id="content-editable-div" contenteditable="true" role="textbox"></div>
|
|
<input id="text" type="text" value="">
|
|
<textarea id="textarea"></textarea>
|
|
</div>
|
|
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
description("This tests that when we are calling the replace with range API to insert or replace text, value change notifications are posted as expected with correct user info data.");
|
|
|
|
var webArea = 0;
|
|
var count = 0;
|
|
|
|
var resultIndex = -1;
|
|
|
|
var actualChangeTypes = [];
|
|
var actualChangeValues = [];
|
|
var actualEditTypes = [];
|
|
|
|
var expectedValues = [];
|
|
|
|
function notificationCallback(notification, userInfo) {
|
|
if (notification == "AXValueChanged") {
|
|
actualChangeTypes[count] = userInfo["AXTextStateChangeType"];
|
|
var changes = userInfo["AXTextChangeValues"];
|
|
if (changes && changes.length == 1) {
|
|
var change = changes[0];
|
|
actualChangeValues[count] = change["AXTextChangeValue"];
|
|
actualEditTypes[count] = stringForEditType(change["AXTextEditType"])
|
|
} else if (changes && changes.length == 2) {
|
|
var change1 = changes[0];
|
|
var change2 = changes[1];
|
|
actualChangeValues[count] = [change1["AXTextChangeValue"], change2["AXTextChangeValue"]];
|
|
actualEditTypes[count] = [stringForEditType(change1["AXTextEditType"]), stringForEditType(change2["AXTextEditType"])];
|
|
}
|
|
|
|
count++;
|
|
|
|
var expectedCount = 6;
|
|
if (count == expectedCount) {
|
|
shouldBeInsert("Apple");
|
|
shouldBeInsertReplace("Apple", "Pie");
|
|
shouldBeInsert("Banana");
|
|
shouldBeInsertReplace("Banana", "Ice-cream");
|
|
shouldBeInsert("Cat");
|
|
shouldBeInsertReplace("Cat", "Dog");
|
|
|
|
webArea.removeNotificationListener();
|
|
finishJSTest();
|
|
}
|
|
}
|
|
}
|
|
|
|
if (window.accessibilityController) {
|
|
jsTestIsAsync = true;
|
|
|
|
accessibilityController.enableEnhancedAccessibility(true);
|
|
|
|
webArea = accessibilityController.rootElement.childAtIndex(0);
|
|
|
|
var addedNotification = webArea.addNotificationListener(notificationCallback);
|
|
shouldBe("addedNotification", "true");
|
|
|
|
var axContentEditableDiv = accessibilityController.accessibleElementById("content-editable-div");
|
|
var contentEditableDiv = document.getElementById("content-editable-div");
|
|
contentEditableDiv.focus();
|
|
shouldBeTrue("axContentEditableDiv.replaceTextInRange('Apple', 0, 0)");
|
|
shouldBe("axContentEditableDiv.stringValue", "'AXValue: Apple'");
|
|
shouldBeTrue("axContentEditableDiv.replaceTextInRange('Pie', 0, 5)");
|
|
shouldBe("axContentEditableDiv.stringValue", "'AXValue: Pie'");
|
|
contentEditableDiv.blur();
|
|
|
|
var axText = accessibilityController.accessibleElementById("text");
|
|
var text = document.getElementById("text");
|
|
text.focus();
|
|
shouldBeTrue("axText.replaceTextInRange('Banana', 0, 0)");
|
|
shouldBe("axText.stringValue", "'AXValue: Banana'");
|
|
shouldBeTrue("axText.replaceTextInRange('Ice-cream', 0, 6)");
|
|
shouldBe("axText.stringValue", "'AXValue: Ice-cream'");
|
|
text.blur();
|
|
|
|
var axTextarea = accessibilityController.accessibleElementById("textarea");
|
|
var textarea = document.getElementById("textarea");
|
|
textarea.focus();
|
|
shouldBeTrue("axTextarea.replaceTextInRange('Cat', 0, 0)");
|
|
shouldBe("axTextarea.stringValue", "'AXValue: Cat'");
|
|
shouldBeTrue("axTextarea.replaceTextInRange('Dog', 0, 3)");
|
|
shouldBe("axTextarea.stringValue", "'AXValue: Dog'");
|
|
textarea.blur();
|
|
|
|
document.getElementById("content").style.visibility = "hidden";
|
|
}
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|