211 lines
9.2 KiB
HTML
211 lines
9.2 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<script src="../../resources/js-test-pre.js"></script>
|
|
</head>
|
|
<style>
|
|
.userselect { user-select: none; -webkit-user-select: none; }
|
|
</style>
|
|
<body id="body">
|
|
|
|
<div id="text" tabindex="0">word1 test</div>
|
|
<span id="span">Thisis</span>longword I<span>'ll try.</span>
|
|
Test Content<span id="target" contenteditable="true">editable is working.</span>
|
|
|
|
<div id="text2">
|
|
c <img src="#" aria-label="blah" style="background-color: #aaaaaa; width: 100px; height: 100px;">d
|
|
</div>
|
|
|
|
<div class="userselect" id="text3">can't select</div>
|
|
|
|
<div id="text4">
|
|
巧克力是食物吗?
|
|
</div>
|
|
<div id="text4a">
|
|
كيف حالك؟
|
|
</div>
|
|
|
|
<pre id="text5">
|
|
both spaces
|
|
line breaks
|
|
</pre>
|
|
|
|
<div id="text6">
|
|
some<br>text
|
|
</div>
|
|
|
|
<div id="text7">
|
|
test audio <audio controls><source src="test.mp3" type="audio/mpeg"></audio>file
|
|
</div>
|
|
|
|
<p id="text8">
|
|
<strong>Edit</strong>
|
|
text
|
|
</p>
|
|
|
|
<p id="description"></p>
|
|
<div id="console"></div>
|
|
|
|
<script>
|
|
|
|
description("This tests that word navigation is working correctly.");
|
|
|
|
if (window.accessibilityController) {
|
|
|
|
var text = accessibilityController.accessibleElementById("text");
|
|
// Get the actual text node.
|
|
text = text.childAtIndex(0);
|
|
|
|
// Check that we can get the word range. Land at "w" in "word1 test".
|
|
var textMarkerRange = text.textMarkerRangeForElement(text);
|
|
var startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
var currentMarker = advanceAndVerify(startMarker, 1, text);
|
|
|
|
// Check that we are at the end of paragraph, so right word should be empty
|
|
currentMarker = advanceAndVerify(currentMarker, 9, text);
|
|
|
|
// Check the case with span
|
|
// At "T" in "Thisis", should return the word as "Thisislongword".
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text);
|
|
// At " " before "I", the word should be "I'll".
|
|
currentMarker = advanceAndVerify(currentMarker, 14, text);
|
|
// At " " before "try", the word should excludes "."
|
|
currentMarker = advanceAndVerify(currentMarker, 5, text);
|
|
|
|
// Check the case with contenteditable
|
|
// At "e" in "editable", the word should NOT include "Content" before it.
|
|
currentMarker = advanceAndVerify(currentMarker, 18, text);
|
|
|
|
// Check the case with replaced node, the replaced node should be considered a word.
|
|
var text2 = accessibilityController.accessibleElementById("text2");
|
|
textMarkerRange = text2.textMarkerRangeForElement(text2);
|
|
currentMarker = text2.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
currentMarker = advanceAndVerify(currentMarker, 2, text2);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text2);
|
|
|
|
// Check user-select:none is also working.
|
|
var text3 = accessibilityController.accessibleElementById("text3");
|
|
textMarkerRange = text3.textMarkerRangeForElement(text3);
|
|
currentMarker = text3.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text3);
|
|
|
|
// Check multi-language, Chinese here.
|
|
var text4 = accessibilityController.accessibleElementById("text4");
|
|
textMarkerRange = text4.textMarkerRangeForElement(text4);
|
|
currentMarker = text4.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
// Make sure when we are at the beginning of line, it won't go to previous node.
|
|
currentMarker = advanceAndVerify(currentMarker, 0, text4);
|
|
currentMarker = advanceAndVerify(currentMarker, 2, text4);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text4);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text4);
|
|
// And Arabic
|
|
var text4a = accessibilityController.accessibleElementById("text4a");
|
|
textMarkerRange = text4a.textMarkerRangeForElement(text4a);
|
|
currentMarker = text4a.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
currentMarker = advanceAndVerify(currentMarker, 3, text4a);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text4a);
|
|
|
|
// Check text in pre tag with line breaks.
|
|
var text5 = accessibilityController.accessibleElementById("text5");
|
|
textMarkerRange = text5.textMarkerRangeForElement(text5);
|
|
currentMarker = text5.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
// At "h" in "both", right word should be " ".
|
|
currentMarker = advanceAndVerify(currentMarker, 4, text5);
|
|
// At the end of first line, right word should be new line.
|
|
currentMarker = advanceAndVerify(currentMarker, 9, text5);
|
|
|
|
// Check text with br tag in it.
|
|
var text6 = accessibilityController.accessibleElementById("text6");
|
|
textMarkerRange = text6.textMarkerRangeForElement(text6);
|
|
currentMarker = text6.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
currentMarker = advanceAndVerify(currentMarker, 4, text6);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text6);
|
|
|
|
// Check <audio> element.
|
|
var text7 = accessibilityController.accessibleElementById("text7");
|
|
textMarkerRange = text7.textMarkerRangeForElement(text7);
|
|
currentMarker = text7.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
currentMarker = advanceAndVerify(currentMarker, 11, text7);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text7);
|
|
currentMarker = advanceAndVerify(currentMarker, 1, text7);
|
|
|
|
// For node with text node children, we should treat the visual space as word boundary.
|
|
var text8 = accessibilityController.accessibleElementById("text8");
|
|
textMarkerRange = text8.textMarkerRangeForElement(text8);
|
|
currentMarker = text8.startTextMarkerForTextMarkerRange(textMarkerRange);
|
|
currentMarker = advanceAndVerify(currentMarker, 4, text8);
|
|
|
|
// Check the word marker runs from start to end, and backwards.
|
|
// Make sure it won't hang.
|
|
verifyDocument(text);
|
|
|
|
function advanceAndVerify(currentMarker, offset, obj) {
|
|
var previousMarker = currentMarker;
|
|
for (var i = 0; i < offset; i++) {
|
|
previousMarker = currentMarker;
|
|
currentMarker = obj.nextTextMarker(previousMarker);
|
|
}
|
|
verifyWordRangeForTextMarker(previousMarker, currentMarker, obj);
|
|
return currentMarker;
|
|
}
|
|
|
|
function replaceAttachmentInString(str) {
|
|
var newline = '\n';
|
|
str = str.replace(String.fromCharCode(65532), "[ATTACHMENT]");
|
|
str = str.replace(newline, "'line break'");
|
|
return str;
|
|
}
|
|
|
|
function verifyWordRangeForTextMarker(preMarker, textMarker, obj) {
|
|
var markerRange = obj.textMarkerRangeForMarkers(preMarker, textMarker);
|
|
var currentCharacter = replaceAttachmentInString(obj.stringForTextMarkerRange(markerRange));
|
|
debug("Current character is: " + currentCharacter);
|
|
|
|
var previousWordRange = obj.leftWordTextMarkerRangeForTextMarker(textMarker);
|
|
var nextWordRange = obj.rightWordTextMarkerRangeForTextMarker(textMarker);
|
|
var preWord = replaceAttachmentInString(obj.stringForTextMarkerRange(previousWordRange));
|
|
var nextWord = replaceAttachmentInString(obj.stringForTextMarkerRange(nextWordRange));
|
|
debug("Left word is: " + preWord);
|
|
debug("Right word is: " + nextWord);
|
|
|
|
var preWordStart = obj.previousWordStartTextMarkerForTextMarker(textMarker);
|
|
var nextWordEnd = obj.nextWordEndTextMarkerForTextMarker(textMarker);
|
|
var preAndNextWordRange = obj.textMarkerRangeForMarkers(preWordStart, nextWordEnd);
|
|
var preAndNextWord = replaceAttachmentInString(obj.stringForTextMarkerRange(preAndNextWordRange));
|
|
debug("Pre word start to next word end: " + preAndNextWord + "\n");
|
|
}
|
|
|
|
function verifyDocument(obj) {
|
|
var start = obj.startTextMarker;
|
|
|
|
// Going forward.
|
|
debug("Test going forward.");
|
|
var current = start;
|
|
var endWord = "file";
|
|
var currWord = "";
|
|
while(currWord != endWord) {
|
|
var nextWordRange = obj.rightWordTextMarkerRangeForTextMarker(current);
|
|
currWord = obj.stringForTextMarkerRange(nextWordRange);
|
|
current = obj.nextWordEndTextMarkerForTextMarker(current);
|
|
}
|
|
debug("End word: " + replaceAttachmentInString(currWord));
|
|
|
|
// Going backwards.
|
|
debug("\nTest going backwards.");
|
|
var startWord = "word1";
|
|
currWord = "";
|
|
while(currWord != startWord) {
|
|
var previousWordRange = obj.leftWordTextMarkerRangeForTextMarker(current);
|
|
currWord = obj.stringForTextMarkerRange(previousWordRange);
|
|
current = obj.previousWordStartTextMarkerForTextMarker(current);
|
|
}
|
|
debug("Start word: " + replaceAttachmentInString(currWord));
|
|
}
|
|
}
|
|
|
|
</script>
|
|
|
|
<script src="../../resources/js-test-post.js"></script>
|
|
</body>
|
|
</html> |