diff -r 000000000000 -r 6474c204b198 testing/mochitest/tests/SimpleTest/WindowSnapshot.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/testing/mochitest/tests/SimpleTest/WindowSnapshot.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,63 @@ +var gWindowUtils; + +try { + gWindowUtils = SpecialPowers.getDOMWindowUtils(window); + if (gWindowUtils && !gWindowUtils.compareCanvases) + gWindowUtils = null; +} catch (e) { + gWindowUtils = null; +} + +function snapshotWindow(win, withCaret) { + return SpecialPowers.snapshotWindow(win, withCaret); +} + +// If the two snapshots don't compare as expected (true for equal, false for +// unequal), returns their serializations as data URIs. In all cases, returns +// whether the comparison was as expected. +function compareSnapshots(s1, s2, expected) { + var s1Str, s2Str; + var correct = false; + if (gWindowUtils) { + // First, check that the canvases are the same size. + var equal; + if (s1.width != s2.width || s1.height != s2.height) { + equal = false; + } else { + try { + equal = (gWindowUtils.compareCanvases(s1, s2, {}) == 0); + } catch (e) { + equal = false; + ok(false, "Exception thrown from compareCanvases: " + e); + } + } + correct = (equal == expected); + } + + if (!correct) { + s1Str = s1.toDataURL(); + s2Str = s2.toDataURL(); + + if (!gWindowUtils) { + correct = ((s1Str == s2Str) == expected); + } + } + + return [correct, s1Str, s2Str]; +} + +function assertSnapshots(s1, s2, expected, s1name, s2name) { + var [correct, s1Str, s2Str] = compareSnapshots(s1, s2, expected); + var sym = expected ? "==" : "!="; + ok(correct, "reftest comparison: " + sym + " " + s1name + " " + s2name); + if (!correct) { + var report = "REFTEST TEST-UNEXPECTED-FAIL | " + s1name + " | image comparison (" + sym + ")\n"; + if (expected) { + report += "REFTEST IMAGE 1 (TEST): " + s1Str + "\n"; + report += "REFTEST IMAGE 2 (REFERENCE): " + s2Str + "\n"; + } else { + report += "REFTEST IMAGE: " + s1Str + "\n"; + } + dump(report); + } +}