haikuwebkit/LayoutTests/accessibility/mac/text-marker-sentence-nav.html

141 lines
5.5 KiB
HTML
Raw Permalink Normal View History

AX: Implement sentence related text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=154312 Reviewed by Chris Fleizach. Source/WebCore: Using CharacterOffset to implement sentence related text marker calls. Reused logic from VisibleUnits class. Also fixed an issue where paragraph navigation should skip preceding and following BR nodes. Test: accessibility/mac/text-marker-sentence-nav.html * accessibility/AXObjectCache.cpp: (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::setRangeStartOrEndWithCharacterOffset): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::leftWordRange): (WebCore::AXObjectCache::rightWordRange): (WebCore::AXObjectCache::characterBefore): (WebCore::characterOffsetNodeIsBR): (WebCore::parentEditingBoundary): (WebCore::AXObjectCache::nextBoundary): (WebCore::AXObjectCache::previousBoundary): (WebCore::AXObjectCache::paragraphForCharacterOffset): (WebCore::AXObjectCache::nextParagraphEndCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfSentence): (WebCore::AXObjectCache::endCharacterOffsetOfSentence): (WebCore::AXObjectCache::sentenceForCharacterOffset): (WebCore::AXObjectCache::nextSentenceEndCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): (WebCore::AXObjectCache::rootAXEditableElement): (WebCore::startWordBoundary): Deleted. (WebCore::endWordBoundary): Deleted. (WebCore::AXObjectCache::nextWordBoundary): Deleted. (WebCore::AXObjectCache::previousWordBoundary): Deleted. * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): * editing/VisibleUnits.cpp: (WebCore::startWordBoundary): (WebCore::startOfWord): (WebCore::endWordBoundary): (WebCore::startSentenceBoundary): (WebCore::startOfSentence): (WebCore::endSentenceBoundary): * editing/VisibleUnits.h: Tools: * DumpRenderTree/AccessibilityUIElement.cpp: (nextParagraphEndTextMarkerForTextMarkerCallback): (sentenceTextMarkerRangeForTextMarkerCallback): (previousSentenceStartTextMarkerForTextMarkerCallback): (nextSentenceEndTextMarkerForTextMarkerCallback): (setSelectedVisibleTextRangeCallback): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (AccessibilityUIElement::getJSClass): * DumpRenderTree/AccessibilityUIElement.h: * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::mathPostscriptsDescription): * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (WTR::_convertMathMultiscriptPairsToString): LayoutTests: * accessibility/mac/text-marker-paragraph-nav-expected.txt: * accessibility/mac/text-marker-paragraph-nav.html: * accessibility/mac/text-marker-sentence-nav-expected.txt: Added. * accessibility/mac/text-marker-sentence-nav.html: Added. Canonical link: https://commits.webkit.org/172453@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196699 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-17 18:16:50 +00:00
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<meta charset="utf-8">
<script src="../../resources/js-test-pre.js"></script>
</head>
<body id="body">
<div id="text1" tabindex="0">
This i<span>s a sen</span>tence,
right? Yes!
</div>
<div id="text2">
test audio <audio controls><source src="test.mp3" type="audio/mpeg"></audio>file.
</div>
<div id="text3">
巧克力
是食物吗? 是的。
</div>
<div id="text3a">
كيف حالك؟
</div>
<pre id="text4">
both spaces
line breaks. Right?
</pre>
<div id="text5">
This is my first sentence.<br><br>
AX: Implement sentence related text marker functions using TextIterator https://bugs.webkit.org/show_bug.cgi?id=154312 Reviewed by Chris Fleizach. Source/WebCore: Using CharacterOffset to implement sentence related text marker calls. Reused logic from VisibleUnits class. Also fixed an issue where paragraph navigation should skip preceding and following BR nodes. Test: accessibility/mac/text-marker-sentence-nav.html * accessibility/AXObjectCache.cpp: (WebCore::resetNodeAndOffsetForReplacedNode): (WebCore::setRangeStartOrEndWithCharacterOffset): (WebCore::AXObjectCache::characterOffsetForNodeAndOffset): (WebCore::AXObjectCache::previousCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfWord): (WebCore::AXObjectCache::endCharacterOffsetOfWord): (WebCore::AXObjectCache::previousWordStartCharacterOffset): (WebCore::AXObjectCache::leftWordRange): (WebCore::AXObjectCache::rightWordRange): (WebCore::AXObjectCache::characterBefore): (WebCore::characterOffsetNodeIsBR): (WebCore::parentEditingBoundary): (WebCore::AXObjectCache::nextBoundary): (WebCore::AXObjectCache::previousBoundary): (WebCore::AXObjectCache::paragraphForCharacterOffset): (WebCore::AXObjectCache::nextParagraphEndCharacterOffset): (WebCore::AXObjectCache::previousParagraphStartCharacterOffset): (WebCore::AXObjectCache::startCharacterOffsetOfSentence): (WebCore::AXObjectCache::endCharacterOffsetOfSentence): (WebCore::AXObjectCache::sentenceForCharacterOffset): (WebCore::AXObjectCache::nextSentenceEndCharacterOffset): (WebCore::AXObjectCache::previousSentenceStartCharacterOffset): (WebCore::AXObjectCache::rootAXEditableElement): (WebCore::startWordBoundary): Deleted. (WebCore::endWordBoundary): Deleted. (WebCore::AXObjectCache::nextWordBoundary): Deleted. (WebCore::AXObjectCache::previousWordBoundary): Deleted. * accessibility/AXObjectCache.h: * accessibility/mac/WebAccessibilityObjectWrapperMac.mm: (-[WebAccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): * editing/VisibleUnits.cpp: (WebCore::startWordBoundary): (WebCore::startOfWord): (WebCore::endWordBoundary): (WebCore::startSentenceBoundary): (WebCore::startOfSentence): (WebCore::endSentenceBoundary): * editing/VisibleUnits.h: Tools: * DumpRenderTree/AccessibilityUIElement.cpp: (nextParagraphEndTextMarkerForTextMarkerCallback): (sentenceTextMarkerRangeForTextMarkerCallback): (previousSentenceStartTextMarkerForTextMarkerCallback): (nextSentenceEndTextMarkerForTextMarkerCallback): (setSelectedVisibleTextRangeCallback): (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (AccessibilityUIElement::getJSClass): * DumpRenderTree/AccessibilityUIElement.h: * DumpRenderTree/ios/AccessibilityUIElementIOS.mm: (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): * DumpRenderTree/mac/AccessibilityUIElementMac.mm: (AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (AccessibilityUIElement::supportedActions): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.cpp: (WTR::AccessibilityUIElement::paragraphTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): * WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h: * WebKitTestRunner/InjectedBundle/Bindings/AccessibilityUIElement.idl: * WebKitTestRunner/InjectedBundle/ios/AccessibilityUIElementIOS.mm: (WTR::AccessibilityUIElement::previousParagraphStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::mathPostscriptsDescription): * WebKitTestRunner/InjectedBundle/mac/AccessibilityUIElementMac.mm: (WTR::AccessibilityUIElement::nextParagraphEndTextMarkerForTextMarker): (WTR::AccessibilityUIElement::sentenceTextMarkerRangeForTextMarker): (WTR::AccessibilityUIElement::previousSentenceStartTextMarkerForTextMarker): (WTR::AccessibilityUIElement::nextSentenceEndTextMarkerForTextMarker): (WTR::_convertMathMultiscriptPairsToString): LayoutTests: * accessibility/mac/text-marker-paragraph-nav-expected.txt: * accessibility/mac/text-marker-paragraph-nav.html: * accessibility/mac/text-marker-sentence-nav-expected.txt: Added. * accessibility/mac/text-marker-sentence-nav.html: Added. Canonical link: https://commits.webkit.org/172453@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@196699 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2016-02-17 18:16:50 +00:00
This is my second sentence. This is my third sentence.
This is my fourth sentence.
</div>
<p id="description"></p>
<div id="console"></div>
<script>
description("This tests that sentence navigation is working correctly.");
if (window.accessibilityController) {
// Check that we can get the paragraph range with span tag.
var text = accessibilityController.accessibleElementById("text1");
var textMarkerRange = text.textMarkerRangeForElement(text);
var startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
var currentMarker = advanceAndVerify(startMarker, 1, text);
// Audio tag.
text = accessibilityController.accessibleElementById("text2");
textMarkerRange = text.textMarkerRangeForElement(text);
startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
currentMarker = advanceAndVerify(startMarker, 1, text);
// Multi-languages.
text = accessibilityController.accessibleElementById("text3");
textMarkerRange = text.textMarkerRangeForElement(text);
startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
currentMarker = advanceAndVerify(startMarker, 1, text);
text = accessibilityController.accessibleElementById("text3a");
textMarkerRange = text.textMarkerRangeForElement(text);
startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
currentMarker = advanceAndVerify(startMarker, 1, text);
// Check the case with pre tag.
text = accessibilityController.accessibleElementById("text4");
textMarkerRange = text.textMarkerRangeForElement(text);
startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
currentMarker = advanceAndVerify(startMarker, 1, text);
currentMarker = advanceAndVerify(currentMarker, 15, text);
// Check getting the correct sentences.
text = accessibilityController.accessibleElementById("text5");
textMarkerRange = text.textMarkerRangeForElement(text);
startMarker = text.startTextMarkerForTextMarkerRange(textMarkerRange);
verifySentences(text, startMarker, 5);
function advanceAndVerify(currentMarker, offset, obj) {
var previousMarker = currentMarker;
for (var i = 0; i < offset; i++) {
previousMarker = currentMarker;
currentMarker = obj.nextTextMarker(previousMarker);
}
verifySentenceRangeForTextMarker(previousMarker, currentMarker, obj);
return currentMarker;
}
function replaceAttachmentInString(str) {
str = str.replace(String.fromCharCode(65532), "[ATTACHMENT]");
return str;
}
function verifySentenceRangeForTextMarker(preMarker, textMarker, obj) {
var markerRange = obj.textMarkerRangeForMarkers(preMarker, textMarker);
var currentCharacter = replaceAttachmentInString(obj.stringForTextMarkerRange(markerRange));
debug("Current character is: " + currentCharacter);
var range = obj.sentenceTextMarkerRangeForTextMarker(textMarker);
var sentence = replaceAttachmentInString(obj.stringForTextMarkerRange(range));
debug("Current sentence is: " + sentence);
var preStart = obj.previousSentenceStartTextMarkerForTextMarker(textMarker);
var nextEnd = obj.nextSentenceEndTextMarkerForTextMarker(textMarker);
var preAndNextSentenceRange = obj.textMarkerRangeForMarkers(preStart, nextEnd);
var preAndNextSentence = replaceAttachmentInString(obj.stringForTextMarkerRange(preAndNextSentenceRange));
debug("Pre sentence start to next sentence end: " + preAndNextSentence + "\n");
}
function verifySentences(obj, startMarker, sentenceCount) {
var current = startMarker;
var i = 0;
while(i < sentenceCount) {
current = obj.nextSentenceEndTextMarkerForTextMarker(current);
var currRange = obj.sentenceTextMarkerRangeForTextMarker(current);
var currSentence = obj.stringForTextMarkerRange(currRange);
debug("Sentence: " + currSentence);
i++;
}
// Backwards.
i = 0;
while(i < sentenceCount) {
current = obj.previousSentenceStartTextMarkerForTextMarker(current);
var next = obj.nextTextMarker(current);
var currRange = obj.sentenceTextMarkerRangeForTextMarker(next);
var currSentence = obj.stringForTextMarkerRange(currRange);
debug("Sentence: " + currSentence);
i++;
}
}
}
</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>