Bug 852021 - add getText* at caret offset mochitest, r=tbsaunde

This commit is contained in:
Alexander Surkov 2013-03-22 11:02:35 +09:00
parent fed2c3e17c
commit ddc3fa1553
4 changed files with 330 additions and 0 deletions

View File

@ -1097,6 +1097,9 @@ function synthKey(aNodeOrID, aKey, aArgs, aCheckerOrEventSeq)
case "VK_HOME":
key = "home";
break;
case "VK_END":
key = "end";
break;
case "VK_ESCAPE":
key = "escape";
break;
@ -1182,6 +1185,14 @@ function synthHomeKey(aNodeOrID, aCheckerOrEventSeq)
this.__proto__ = new synthKey(aNodeOrID, "VK_HOME", null, aCheckerOrEventSeq);
}
/**
* End key invoker.
*/
function synthEndKey(aNodeOrID, aCheckerOrEventSeq)
{
this.__proto__ = new synthKey(aNodeOrID, "VK_END", null, aCheckerOrEventSeq);
}
/**
* Enter key invoker
*/
@ -1407,6 +1418,63 @@ function synthSelectAll(aNodeOrID, aCheckerOrEventSeq)
}
}
/**
* Move the caret to the end of line.
*/
function moveToLineEnd(aID, aCaretOffset)
{
if (MAC) {
this.__proto__ = new synthKey(aID, "VK_RIGHT", { metaKey: true },
new caretMoveChecker(aCaretOffset, aID));
} else {
this.__proto__ = new synthEndKey(aID,
new caretMoveChecker(aCaretOffset, aID));
}
this.getID = function moveToLineEnd_getID()
{
return "move to line end in " + prettyName(aID);
}
}
/**
* Move the caret to begining of the line.
*/
function moveToLineStart(aID, aCaretOffset)
{
if (MAC) {
this.__proto__ = new synthKey(aID, "VK_LEFT", { metaKey: true },
new caretMoveChecker(aCaretOffset, aID));
} else {
this.__proto__ = new synthHomeKey(aID,
new caretMoveChecker(aCaretOffset, aID));
}
this.getID = function moveToLineEnd_getID()
{
return "move to line start in " + prettyName(aID);
}
}
/**
* Move the caret to begining of the text.
*/
function moveToTextStart(aID)
{
if (MAC) {
this.__proto__ = new synthKey(aID, "VK_UP", { metaKey: true },
new caretMoveChecker(0, aID));
} else {
this.__proto__ = new synthKey(aID, "VK_HOME", { ctrlKey: true },
new caretMoveChecker(0, aID));
}
this.getID = function moveToTextStart_getID()
{
return "move to text start in " + prettyName(aID);
}
}
/**
* Move the caret in text accessible.
*/

View File

@ -8,6 +8,9 @@ const BOUNDARY_LINE_START = nsIAccessibleText.BOUNDARY_LINE_START;
const BOUNDARY_LINE_END = nsIAccessibleText.BOUNDARY_LINE_END;
const BOUNDARY_ATTRIBUTE_RANGE = nsIAccessibleText.BOUNDARY_ATTRIBUTE_RANGE;
const kTextEndOffset = nsIAccessibleText.TEXT_OFFSET_END_OF_TEXT;
const kCaretOffset = nsIAccessibleText.TEXT_OFFSET_CARET;
const kTodo = 1;
const kOk = 2;

View File

@ -13,6 +13,7 @@ include $(DEPTH)/config/autoconf.mk
MOCHITEST_A11Y_FILES = \
doc.html \
test_atcaretoffset.html \
test_doc.html \
test_hypertext.html \
test_label.xul \

View File

@ -0,0 +1,258 @@
<!DOCTYPE html>
<html>
<head>
<title>Test: nsIAccessibleText getText* functions at caret offset</title>
<link rel="stylesheet" type="text/css"
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
<script type="application/javascript"
src="chrome://mochikit/content/MochiKit/packed.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript"
src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
<script type="application/javascript"
src="../common.js"></script>
<script type="application/javascript"
src="../role.js"></script>
<script type="application/javascript"
src="../states.js"></script>
<script type="application/javascript"
src="../events.js"></script>
<script type="application/javascript"
src="../text.js"></script>
<script type="application/javascript">
//gA11yEventDumpToConsole = true; // debugging
// __a__w__o__r__d__\n
// 0 1 2 3 4 5
// __t__w__o__ (soft line break)
// 6 7 8 9
// __w__o__r__d__s
// 10 11 12 13 14 15
function moveToLastLineEnd()
{
this.__proto__ = new synthFocus("textarea");
this.finalCheck = function moveToLastLineEnd_finalCheck()
{
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_START, "", 15, 15,
"textarea", kTodo, kOk, kTodo);
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_END, "", 15, 15,
"textarea", kOk, kTodo, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_START, "", 15, 15,
"textarea", kTodo, kTodo, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_END, "words", 10, 15,
"textarea", kTodo, kTodo, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_START, "words", 10, 15,
"textarea", kOk, kOk, kOk);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_END, "\ntwo ", 5, 10,
"textarea", kTodo, kTodo, kTodo);
}
this.getID = function moveToLastLineEnd_getID()
{
return "move to last line end";
}
}
function moveToLastLineStart()
{
this.__proto__ = new moveToLineStart("textarea", 10);
this.finalCheck = function moveToLastLineStart_finalCheck()
{
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_START, "", 15, 15,
"textarea", kTodo, kTodo, kTodo);
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_END, "", 15, 15,
"textarea", kTodo, kTodo, kOk);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_START, "words", 10, 15,
"textarea", kTodo, kOk, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_END, "\ntwo ", 5, 10,
"textarea", kTodo, kTodo, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_START, "two ", 6, 10,
"textarea", kTodo, kTodo, kOk);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_END, "\ntwo ", 5, 10,
"textarea", kTodo, kTodo, kOk);
}
this.getID = function moveToLastLineStart_getID()
{
return "move to last line start";
}
}
function moveToMiddleLineStart()
{
this.__proto__ = new synthUpKey("textarea",
new caretMoveChecker(6, "textarea"));
this.finalCheck = function moveToMiddleLineStart_finalCheck()
{
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_START, "words", 10, 15,
"textarea", kTodo, kTodo, kTodo);
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_END, "words", 10, 15,
"textarea", kTodo, kTodo, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_START, "two ", 6, 10,
"textarea", kOk, kOk, kOk);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_END, "\ntwo ", 5, 10,
"textarea", kTodo, kOk, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_START, "aword\n", 0, 6,
"textarea", kTodo, kTodo, kOk);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_END, "aword", 0, 5,
"textarea", kTodo, kTodo, kTodo);
}
this.getID = function moveToMiddleLineStart_getID()
{
return "move to middle line start";
}
}
function moveToMiddleLineEnd()
{
this.__proto__ = new moveToLineEnd("textarea", 10);
this.finalCheck = function moveToMiddleLineEnd_finalCheck()
{
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_START, "words", 10, 15,
"textarea", kTodo, kTodo, kTodo);
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_END, "words", 10, 15,
"textarea", kTodo, kTodo, kOk);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_START, "two ", 6, 10,
"textarea", kOk, kOk, kOk);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_END, "\ntwo ", 5, 10,
"textarea", kTodo, kTodo, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_START, "aword\n", 0, 6,
"textarea", kTodo, kTodo, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_END, "aword", 0, 5,
"textarea", kTodo, kTodo, kTodo);
}
this.getID = function moveToMiddleLineEnd_getID()
{
return "move to middle line end";
}
}
function moveToFirstLineStart()
{
this.__proto__ = new moveToTextStart("textarea");
this.finalCheck = function moveToFirstLineStart_finalCheck()
{
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_START, "two ", 6, 10,
"textarea", kTodo, kTodo, kTodo);
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_END, "aword", 0, 5,
"textarea", kTodo, kOk, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_START, "aword\n", 0, 6,
"textarea", kTodo, kOk, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_END, "", 0, 0,
"textarea", kTodo, kOk, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_START, "", 0, 0,
"textarea", kOk, kOk, kOk);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_END, "", 0, 0,
"textarea", kOk, kOk, kOk);
}
this.getID = function moveToFirstLineStart_getID()
{
return "move to first line start";
}
}
function moveToFirstLineEnd()
{
this.__proto__ = new moveToLineEnd("textarea", 5);
this.finalCheck = function moveToFirstLineStart_finalCheck()
{
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_START, "two ", 6, 10,
"textarea", kTodo, kTodo, kTodo);
testTextAfterOffset(kCaretOffset, BOUNDARY_LINE_END, "\ntwo ", 5, 10,
"textarea", kTodo, kTodo, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_START, "aword\n", 0, 6,
"textarea", kTodo, kOk, kTodo);
testTextAtOffset(kCaretOffset, BOUNDARY_LINE_END, "aword", 0, 5,
"textarea", kOk, kOk, kOk);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_START, "", 0, 0,
"textarea", kTodo, kOk, kTodo);
testTextBeforeOffset(kCaretOffset, BOUNDARY_LINE_END, "", 0, 0,
"textarea", kTodo, kOk, kTodo);
}
this.getID = function moveToFirstLineEnd_getID()
{
return "move to first line end";
}
}
var gQueue = null;
function doTest()
{
SimpleTest.expectAssertions(5);
gQueue = new eventQueue();
gQueue.push(new moveToLastLineEnd());
gQueue.push(new moveToLastLineStart());
gQueue.push(new moveToMiddleLineStart());
gQueue.push(new moveToMiddleLineEnd());
gQueue.push(new moveToFirstLineStart());
gQueue.push(new moveToFirstLineEnd());
gQueue.invoke(); // will call SimpleTest.finish();
}
SimpleTest.waitForExplicitFinish();
addA11yLoadEvent(doTest);
</script>
</head>
<body>
<a target="_blank"
title="nsIAccessibleText getText related functions tests at caret offset"
href="https://bugzilla.mozilla.org/show_bug.cgi?id=852021">
Bug 852021
</a>
<p id="display"></p>
<div id="content" style="display: none"></div>
<pre id="test">
<textarea id="textarea" cols="5">aword
two words</textarea>
</pre>
</body>
</html>