// This file expects imgutils.js to be loaded as well. /* import-globals-from imgutils.js */ var currentTest; var gIsRefImageLoaded = false; const gShouldOutputDebugInfo = false;
function pollForSuccess() { if (!currentTest.isTestFinished) { if (
!currentTest.reusingReferenceImage ||
(currentTest.reusingReferenceImage && gIsRefImageLoaded)
) {
currentTest.checkImage();
}
if (!document.getElementById(referenceElementId)) { // In this case, we're assuming the user passed in a string that // indicates the source of the image they want to change to, // after the reference image has been taken. this.reusingImageAsReference = true;
}
this.srcAttr = srcAttr; this.debugElementId = debugElementId; this.referenceSnapshot = ""; // value will be set in takeReferenceSnapshot() this.pollCounter = 0; this.isTestFinished = false; this.numRefsTaken = 0; this.blankWaitTime = 0;
AnimationTest.prototype.preloadImage = function () { if (this.srcAttr) { this.myImage = new Image(); this.myImage.onload = function () {
currentTest.continueTest();
}; this.myImage.src = this.srcAttr;
} else { this.continueTest();
}
};
AnimationTest.prototype.outputDebugInfo = function (message, id, dataUri) { if (!gShouldOutputDebugInfo) { return;
} var debugElement = document.getElementById(this.debugElementId); var newDataUriElement = document.createElement("a");
newDataUriElement.setAttribute("id", id);
newDataUriElement.setAttribute("href", dataUri);
newDataUriElement.appendChild(document.createTextNode(message));
debugElement.appendChild(newDataUriElement); var brElement = document.createElement("br");
debugElement.appendChild(brElement);
todo(false, "Debug (" + id + "): " + message + " " + dataUri);
};
AnimationTest.prototype.isFinished = function () { returnthis.isTestFinished;
};
AnimationTest.prototype.takeCleanSnapshot = function () { var cleanElement; if (this.cleanId) {
cleanElement = document.getElementById(this.cleanId);
}
// Enable clean page comparison element if (cleanElement) { this.enableDisplay(cleanElement);
}
// Take a snapshot of the initial (clean) page this.cleanSnapshot = snapshotWindow(window, false);
// Disable the clean page comparison element if (cleanElement) { this.disableDisplay(cleanElement);
}
AnimationTest.prototype.takeBlankSnapshot = function () { // Take a snapshot of the initial (essentially blank) page this.blankSnapshot = snapshotWindow(window, false);
/** *Thisisthesecondpartofthetest.Itistriggered(eventually)from *beginTest()eithersynchronouslyorasynchronously,asanimageload *callback.
*/
AnimationTest.prototype.continueTest = async function () { // In case something goes wrong, fail earlier than mochitest timeout, // and with more information.
setTimeout(failTest, this.timeout);
if (!this.reusingImageAsReference) { this.disableDisplay(document.getElementById(this.imageElementId));
}
let tookReference = new Promise(resolve => { this.takeReferenceSnapshot(resolve);
});
AnimationTest.prototype.setupPolledImage = function () { // Make sure the image is visible if (!this.reusingImageAsReference) { this.enableDisplay(document.getElementById(this.imageElementId)); var currentSnapshot = snapshotWindow(window, false); var result = compareSnapshots(
currentSnapshot, this.referenceSnapshot, true
);
AnimationTest.prototype.checkImage = function () { if (this.isTestFinished) { return;
}
this.pollCounter++;
// We need this for some tests, because we need to force the // test image to be visible. if (!this.reusingImageAsReference) { this.enableDisplay(document.getElementById(this.imageElementId));
}
var currentSnapshot = snapshotWindow(window, false); var result = compareSnapshots(currentSnapshot, this.referenceSnapshot, true);
AnimationTest.prototype.takeReferenceSnapshot = function (resolve) { this.numRefsTaken++;
// Test to make sure the reference image doesn't match a clean snapshot if (!this.cleanSnapshot) { this.takeCleanSnapshot();
}
// Used later to verify that the reference div disappeared if (!this.blankSnapshot) { this.takeBlankSnapshot();
}
if (this.reusingImageAsReference) { // Show reference elem (which is actually our image), & take a snapshot var referenceElem = document.getElementById(this.imageElementId); this.enableDisplay(referenceElem);
let snapResult = compareSnapshots( this.cleanSnapshot, this.referenceSnapshot, false
); if (!snapResult[0]) { if (this.blankWaitTime > 2000) { // if it took longer than two seconds to load the image, we probably // have a problem. this.wereFailures = true;
ok(
snapResult[0], "Reference snapshot shouldn't match clean (non-image) snapshot"
);
} else { this.blankWaitTime += currentTest.pollFreq; // let's wait a bit and see if it clears up
setTimeout(
() => this.takeReferenceSnapshot(resolve),
currentTest.pollFreq
); return;
}
}
ok(
snapResult[0], "Reference snapshot shouldn't match clean (non-image) snapshot"
);
let dataString = "Reference Snapshot #" + this.numRefsTaken; this.outputDebugInfo(
dataString, "refSnapId", this.referenceSnapshot.toDataURL()
);
} else { // Make sure the animation section is hidden this.disableDisplay(document.getElementById(this.imageElementId));
// Show reference div, & take a snapshot var referenceDiv = document.getElementById(this.referenceElementId); this.enableDisplay(referenceDiv);
this.referenceSnapshot = snapshotWindow(window, false);
let snapResult = compareSnapshots( this.cleanSnapshot, this.referenceSnapshot, false
); if (!snapResult[0]) { if (this.blankWaitTime > 2000) { // if it took longer than two seconds to load the image, we probably // have a problem. this.wereFailures = true;
ok(
snapResult[0], "Reference snapshot shouldn't match clean (non-image) snapshot"
);
} else { this.blankWaitTime += 20; // let's wait a bit and see if it clears up
setTimeout(() => this.takeReferenceSnapshot(resolve), 20); return;
}
}
ok(
snapResult[0], "Reference snapshot shouldn't match clean (non-image) snapshot"
);
AnimationTest.prototype.testBlankCameBack = function () { var blankSnapshot2 = snapshotWindow(window, false); var result = compareSnapshots(this.blankSnapshot, blankSnapshot2, true);
ok(
result[0], "Reference image should disappear when it becomes display:none"
);
if (!result[0]) { this.wereFailures = true; var dataString = "Second Blank Snapshot"; this.outputDebugInfo(dataString, "blank2SnapId", result[2]);
}
};
AnimationTest.prototype.cleanUpAndFinish = function () { // On the off chance that failTest and checkImage are triggered // back-to-back, use a flag to prevent multiple calls to SimpleTest.finish. if (this.isTestFinished) { return;
}
this.isTestFinished = true;
// Call our closing function, if one exists if (this.closeFunc) { this.closeFunc(); return;
}
if (this.wereFailures) {
document.getElementById(this.debugElementId).style.display = "block";
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.