Bug 822173 - bunch of editable tests is never invoked, r=marcoz

This commit is contained in:
Alexander Surkov 2012-12-17 20:38:57 +09:00
Родитель 6d3e2a837c
Коммит a01759ff9b
3 изменённых файлов: 72 добавлений и 51 удалений

Просмотреть файл

@ -33,6 +33,26 @@ function editableTextTestRun()
*/
function editableTextTest(aID)
{
/**
* Schedule a test, the given function with its arguments will be executed
* when preceding test is complete.
*/
this.scheduleTest = function scheduleTest(aFunc)
{
// A data container acts like a dummy invoker, it's never invoked but
// it's used to generate real invoker when previous invoker was handled.
var dataContainer = {
func: aFunc,
funcArgs: Array.slice(arguments, 1)
};
this.mEventQueue.push(dataContainer);
if (!this.mEventQueueReady) {
this.unwrapNextTest();
this.mEventQueueReady = true;
}
}
/**
* setTextContents test.
*/
@ -51,7 +71,7 @@ function editableTextTest(aID)
var oldValue = getValue(aID);
var removeTripple = oldValue ? [0, oldValue.length, oldValue] : null;
this.scheduleTest(aID, removeTripple, insertTripple, setTextContentsInvoke,
this.generateTest(aID, removeTripple, insertTripple, setTextContentsInvoke,
getValueChecker(aID, aValue), testID);
}
@ -70,7 +90,7 @@ function editableTextTest(aID)
}
var resPos = (aResPos != undefined) ? aResPos : aPos;
this.scheduleTest(aID, null, [resPos, resPos + aStr.length, aStr],
this.generateTest(aID, null, [resPos, resPos + aStr.length, aStr],
insertTextInvoke, getValueChecker(aID, aResStr), testID);
}
@ -88,7 +108,7 @@ function editableTextTest(aID)
acc.copyText(aStartPos, aEndPos);
}
this.scheduleTest(aID, null, null, copyTextInvoke,
this.generateTest(aID, null, null, copyTextInvoke,
getClipboardChecker(aID, aClipboardStr), testID);
}
@ -108,7 +128,7 @@ function editableTextTest(aID)
acc.pasteText(aPos);
}
this.scheduleTest(aID, null, [aStartPos, aEndPos, getTextFromClipboard],
this.generateTest(aID, null, [aStartPos, aEndPos, getTextFromClipboard],
copyNPasteInvoke, getValueChecker(aID, aResStr), testID);
}
@ -129,7 +149,7 @@ function editableTextTest(aID)
var resStartPos = (aResStartPos != undefined) ? aResStartPos : aStartPos;
var resEndPos = (aResEndPos != undefined) ? aResEndPos : aEndPos;
this.scheduleTest(aID, [resStartPos, resEndPos, getTextFromClipboard], null,
this.generateTest(aID, [resStartPos, resEndPos, getTextFromClipboard], null,
cutTextInvoke, getValueChecker(aID, aResStr), testID);
}
@ -149,7 +169,7 @@ function editableTextTest(aID)
acc.pasteText(aPos);
}
this.scheduleTest(aID, [aStartPos, aEndPos, getTextFromClipboard],
this.generateTest(aID, [aStartPos, aEndPos, getTextFromClipboard],
[aPos, -1, getTextFromClipboard],
cutNPasteTextInvoke, getValueChecker(aID, aResStr),
testID);
@ -168,7 +188,7 @@ function editableTextTest(aID)
acc.pasteText(aPos);
}
this.scheduleTest(aID, null, [aPos, -1, getTextFromClipboard],
this.generateTest(aID, null, [aPos, -1, getTextFromClipboard],
pasteTextInvoke, getValueChecker(aID, aResStr), testID);
}
@ -177,35 +197,20 @@ function editableTextTest(aID)
*/
this.deleteText = function deleteText(aStartPos, aEndPos, aResStr)
{
function getRemovedText() { return invoker.removedText; }
var testID = "deleteText from " + aStartPos + " to " + aEndPos +
" for " + prettyName(aID);
var invoker = {
eventSeq: [
new textChangeChecker(aID, aStartPos, aEndPos, getRemovedText, false)
],
var oldValue = getValue(aID).substring(aStartPos, aEndPos);
var removeTripple = oldValue ? [aStartPos, aEndPos, oldValue] : null;
invoke: function invoke()
{
var acc = getAccessible(aID,
[nsIAccessibleText, nsIAccessibleEditableText]);
function deleteTextInvoke()
{
var acc = getAccessible(aID, [nsIAccessibleEditableText]);
acc.deleteText(aStartPos, aEndPos);
}
this.removedText = acc.getText(aStartPos, aEndPos);
acc.deleteText(aStartPos, aEndPos);
},
finalCheck: function finalCheck()
{
getValueChecker(aID, aResStr).check();
},
getID: function getID()
{
return "deleteText from " + aStartPos + " to " + aEndPos + " for " +
prettyName(aID);
}
};
this.mEventQueue.push(invoker);
this.generateTest(aID, removeTripple, null, deleteTextInvoke,
getValueChecker(aID, aResStr), testID);
}
//////////////////////////////////////////////////////////////////////////////
@ -265,16 +270,31 @@ function editableTextTest(aID)
}
/**
* Create an invoker for the test and push it into event queue.
* Process next scheduled test.
*/
this.scheduleTest = function scheduleTest(aID, aRemoveTriple, aInsertTriple,
this.unwrapNextTest = function unwrapNextTest()
{
var data = this.mEventQueue.mInvokers[this.mEventQueue.mIndex + 1];
if (data)
data.func.apply(this, data.funcArgs);
}
/**
* Used to generate an invoker object for the sheduled test.
*/
this.generateTest = function generateTest(aID, aRemoveTriple, aInsertTriple,
aInvokeFunc, aChecker, aInvokerID)
{
var et = this;
var invoker = {
eventSeq: [],
invoke: aInvokeFunc,
finalCheck: function finalCheck() { aChecker.check(); },
finalCheck: function finalCheck()
{
aChecker.check();
et.unwrapNextTest(); // replace dummy invoker on real invoker object.
},
getID: function getID() { return aInvokerID; }
};
@ -292,7 +312,7 @@ function editableTextTest(aID)
invoker.eventSeq.push(checker);
}
this.mEventQueue.push(invoker);
this.mEventQueue.mInvokers[this.mEventQueue.mIndex + 1] = invoker;
}
/**
@ -318,5 +338,6 @@ function editableTextTest(aID)
}
this.mEventQueue = new eventQueue();
this.mEventQueueReady = false;
}

Просмотреть файл

@ -25,16 +25,16 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=452161
//////////////////////////////////////////////////////////////////////////
// setTextContents
et.setTextContents("hello");
et.setTextContents("olleh", aTrailChar); // due to some reason this reports '\n' in the end
et.setTextContents("");
et.scheduleTest(et.setTextContents, "hello");
et.scheduleTest(et.setTextContents, "olleh", aTrailChar); // due to some reason this reports '\n' in the end
et.scheduleTest(et.setTextContents, "");
//////////////////////////////////////////////////////////////////////////
// insertText
et.insertText("hello", 0, "hello");
et.insertText("ma ", 0, "ma hello");
et.insertText("ma", 2, "mama hello");
et.insertText(" hello", 10, "mama hello hello");
et.scheduleTest(et.insertText, "hello", 0, "hello");
et.scheduleTest(et.insertText, "ma ", 0, "ma hello");
et.scheduleTest(et.insertText, "ma", 2, "mama hello");
et.scheduleTest(et.insertText, " hello", 10, "mama hello hello");
// XXX: bug 452584

Просмотреть файл

@ -22,14 +22,14 @@
// 'ee' insertion/removal at 1 or 2 offset of 'hello'/'heeello' string
// reports 'ee' text was inserted/removed at 2 offset.
et.insertText("ee", 1, "heeello", 2);
et.copyText(1, 3, "ee");
et.cutText(1, 3, "hello", 2, 4);
et.insertText("ee", 2, "heeello", 2);
et.cutText(2, 4, "hello", 2, 4);
et.scheduleTest(et.insertText, "ee", 1, "heeello", 2);
et.scheduleTest(et.copyText, 1, 3, "ee");
et.scheduleTest(et.cutText, 1, 3, "hello", 2, 4);
et.scheduleTest(et.insertText, "ee", 2, "heeello", 2);
et.scheduleTest(et.cutText, 2, 4, "hello", 2, 4);
et.deleteText(1, 3, "hlo");
et.pasteText(1, "heelo");
et.scheduleTest(et.deleteText, 1, 3, "hlo");
et.scheduleTest(et.pasteText, 1, "heelo");
var testRun = new editableTextTestRun();
testRun.add(et);