зеркало из https://github.com/mozilla/gecko-dev.git
215 строки
6.9 KiB
HTML
215 строки
6.9 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>nsIHyper>TextAccessible in dynamic tests</title>
|
|
<link rel="stylesheet" type="text/css"
|
|
href="chrome://mochikit/content/tests/SimpleTest/test.css" />
|
|
|
|
<script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
|
|
|
|
<script type="application/javascript"
|
|
src="../common.js"></script>
|
|
<script type="application/javascript"
|
|
src="../events.js"></script>
|
|
|
|
<script type="application/javascript">
|
|
const kLinksCount = 128;
|
|
function addLinks(aContainerID) {
|
|
this.containerNode = getNode(aContainerID);
|
|
|
|
this.eventSeq = [
|
|
new invokerChecker(EVENT_REORDER, this.containerNode),
|
|
];
|
|
|
|
this.invoke = function addLinks_invoke() {
|
|
for (var jdx = 0; jdx < kLinksCount; jdx++) {
|
|
var a = document.createElement("a");
|
|
a.setAttribute("href", "mozilla.org");
|
|
a.textContent = "mozilla";
|
|
this.containerNode.appendChild(a);
|
|
|
|
var span = document.createElement("span");
|
|
span.textContent = " text ";
|
|
this.containerNode.appendChild(span);
|
|
}
|
|
};
|
|
|
|
this.finalCheck = function addLinks_finalCheck() {
|
|
// getLinkAt and getLinkIndex.
|
|
var htAcc = getAccessible(this.containerNode, [nsIAccessibleHyperText]);
|
|
for (var jdx = 0; jdx < kLinksCount; jdx++) {
|
|
var link = htAcc.getLinkAt(jdx);
|
|
ok(link, "No link at index " + jdx + " for '" + aContainerID + "'");
|
|
|
|
var linkIdx = htAcc.getLinkIndex(link);
|
|
is(linkIdx, jdx, "Wrong link index for '" + aContainerID + "'!");
|
|
}
|
|
};
|
|
|
|
this.getID = function addLinks_getID() {
|
|
return "Add links for '" + aContainerID + "'";
|
|
};
|
|
}
|
|
|
|
function updateText(aContainerID) {
|
|
this.containerNode = getNode(aContainerID);
|
|
this.container = getAccessible(this.containerNode, nsIAccessibleHyperText);
|
|
this.text = this.container.firstChild;
|
|
this.textNode = this.text.DOMNode;
|
|
this.textLen = this.textNode.data.length;
|
|
|
|
this.eventSeq = [
|
|
new invokerChecker(EVENT_TEXT_INSERTED, this.containerNode),
|
|
];
|
|
|
|
this.invoke = function updateText_invoke() {
|
|
is(this.container.getLinkIndexAtOffset(this.textLen), 0,
|
|
"Wrong intial text offsets!");
|
|
|
|
this.text.DOMNode.appendData(" my");
|
|
};
|
|
|
|
this.finalCheck = function updateText_finalCheck() {
|
|
is(this.container.getLinkIndexAtOffset(this.textLen), -1,
|
|
"Text offsets weren't updated!");
|
|
};
|
|
|
|
this.getID = function updateText_getID() {
|
|
return "update text for '" + aContainerID + "'";
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Text offsets must be updated when hypertext child is removed.
|
|
*/
|
|
function removeChild(aContainerID, aChildID, aInitialText, aFinalText) {
|
|
this.containerNode = getNode(aContainerID);
|
|
this.container = getAccessible(this.containerNode, nsIAccessibleText);
|
|
this.childNode = getNode(aChildID);
|
|
|
|
// Call first to getText so offsets are cached
|
|
is(this.container.getText(0, -1), aInitialText,
|
|
"Wrong text before child removal");
|
|
|
|
this.eventSeq = [
|
|
new invokerChecker(EVENT_REORDER, this.containerNode),
|
|
];
|
|
|
|
this.invoke = function removeChild_invoke() {
|
|
this.containerNode.removeChild(this.childNode);
|
|
};
|
|
|
|
this.finalCheck = function removeChild_finalCheck() {
|
|
is(this.container.getText(0, -1), aFinalText,
|
|
"Wrong text after child removal");
|
|
is(this.container.characterCount, aFinalText.length,
|
|
"Wrong text after child removal");
|
|
};
|
|
|
|
this.getID = function removeChild_getID() {
|
|
return "check text after removing child from '" + aContainerID + "'";
|
|
};
|
|
}
|
|
|
|
function removeFirstChild(aContainer) {
|
|
this.ht = getAccessible(aContainer, [ nsIAccessibleHyperText ]);
|
|
this.eventSeq = [
|
|
new invokerChecker(EVENT_REORDER, aContainer),
|
|
];
|
|
|
|
this.invoke = function removeFirstChild_invoke() {
|
|
is(this.ht.linkCount, 2, "Wrong embedded objects count before removal");
|
|
|
|
getNode(aContainer).removeChild(getNode(aContainer).firstElementChild);
|
|
};
|
|
|
|
this.finalCheck = function removeFirstChild_finalCheck() {
|
|
// check list index before link count
|
|
is(this.ht.getLinkIndex(this.ht.firstChild), 0, "Wrong child index");
|
|
is(this.ht.linkCount, 1, "Wrong embedded objects count after removal");
|
|
};
|
|
|
|
this.getID = function removeFirstChild_getID() {
|
|
return "Remove first child and check embedded object indeces";
|
|
};
|
|
}
|
|
|
|
function removeLastChild(aContainer) {
|
|
this.ht = getAccessible(aContainer, [ nsIAccessibleHyperText ]);
|
|
this.eventSeq = [
|
|
new invokerChecker(EVENT_REORDER, aContainer),
|
|
];
|
|
|
|
this.invoke = function removeLastChild_invoke() {
|
|
is(this.ht.linkCount, 1, "Wrong embedded objects count before removal");
|
|
|
|
getNode(aContainer).removeChild(getNode(aContainer).lastElementChild);
|
|
};
|
|
|
|
this.finalCheck = function removeLastChild_finalCheck() {
|
|
is(this.ht.linkCount, 0, "Wrong embedded objects count after removal");
|
|
|
|
var link = null;
|
|
try {
|
|
link = this.ht.getLinkAt(0);
|
|
} catch (e) { }
|
|
ok(!link, "No embedded object is expected");
|
|
};
|
|
|
|
this.getID = function removeLastChild_getID() {
|
|
return "Remove last child and try its embedded object";
|
|
};
|
|
}
|
|
|
|
// gA11yEventDumpToConsole = true; // debug stuff
|
|
|
|
var gQueue = null;
|
|
function doTest() {
|
|
gQueue = new eventQueue();
|
|
gQueue.push(new addLinks("p1"));
|
|
gQueue.push(new updateText("p2"));
|
|
gQueue.push(new removeChild("div1", "div2",
|
|
"hello my good friend", "hello friend"));
|
|
gQueue.push(new removeFirstChild("c4"));
|
|
gQueue.push(new removeLastChild("c5"));
|
|
|
|
gQueue.invoke(); // Will call SimpleTest.finish();
|
|
}
|
|
|
|
SimpleTest.waitForExplicitFinish();
|
|
addA11yLoadEvent(doTest);
|
|
</script>
|
|
</head>
|
|
<body>
|
|
|
|
<a target="_blank"
|
|
title="Cache links within hypertext accessible"
|
|
href="https://bugzilla.mozilla.org/show_bug.cgi?id=572394">
|
|
Mozilla Bug 572394
|
|
</a>
|
|
<a target="_blank"
|
|
title="Text offsets don't get updated when text of first child text accessible is changed"
|
|
href="https://bugzilla.mozilla.org/show_bug.cgi?id=625009">
|
|
Mozilla Bug 625009
|
|
</a>
|
|
<a target="_blank"
|
|
title="Crash in nsHyperTextAccessible::GetText()"
|
|
href="https://bugzilla.mozilla.org/show_bug.cgi?id=630841">
|
|
Mozilla Bug 630841
|
|
</a><br>
|
|
<p id="display"></p>
|
|
<div id="content" style="display: none"></div>
|
|
<pre id="test">
|
|
</pre>
|
|
|
|
<p id="p1"></p>
|
|
<p id="p2"><b>hello</b><a>friend</a></p>
|
|
<div id="div1">hello<span id="div2"> my<span id="div3"> good</span></span> friend</span></div>
|
|
<form id="c4">
|
|
<label for="c4_input">label</label>
|
|
<input id="c4_input">
|
|
</form>
|
|
<div id="c5">TextLeaf<input id="c5_input"></div>
|
|
</body>
|
|
</html>
|