зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1356271 - Make it so that it's easier to define repeating reflows for reflow tests. r=florian
MozReview-Commit-ID: 5ZL5RtItbiL --HG-- extra : rebase_source : 93fbacfde3a9825e46c0d81bb3ad29af448551fa extra : source : 7629e34f7fb6f756c09f0d6735b746a9d1050c5f
This commit is contained in:
Родитель
7670733223
Коммит
5f9f0cd7f2
|
@ -10,12 +10,15 @@
|
||||||
* for tips on how to do that.
|
* for tips on how to do that.
|
||||||
*/
|
*/
|
||||||
const EXPECTED_APPMENU_OPEN_REFLOWS = [
|
const EXPECTED_APPMENU_OPEN_REFLOWS = [
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
"openPopup@chrome://global/content/bindings/popup.xml",
|
||||||
"show/</<@chrome://browser/content/customizableui/panelUI.js",
|
"show/</<@chrome://browser/content/customizableui/panelUI.js",
|
||||||
],
|
],
|
||||||
|
},
|
||||||
|
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
||||||
"adjustArrowPosition@chrome://global/content/bindings/popup.xml",
|
"adjustArrowPosition@chrome://global/content/bindings/popup.xml",
|
||||||
"onxblpopupshowing@chrome://global/content/bindings/popup.xml",
|
"onxblpopupshowing@chrome://global/content/bindings/popup.xml",
|
||||||
|
@ -23,55 +26,33 @@ const EXPECTED_APPMENU_OPEN_REFLOWS = [
|
||||||
"show/</<@chrome://browser/content/customizableui/panelUI.js",
|
"show/</<@chrome://browser/content/customizableui/panelUI.js",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
times: 2, // This number should only ever go down - never up.
|
||||||
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
},
|
||||||
"adjustArrowPosition@chrome://global/content/bindings/popup.xml",
|
|
||||||
"onxblpopupshowing@chrome://global/content/bindings/popup.xml",
|
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
|
||||||
"show/</<@chrome://browser/content/customizableui/panelUI.js",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
||||||
"adjustArrowPosition@chrome://global/content/bindings/popup.xml",
|
"adjustArrowPosition@chrome://global/content/bindings/popup.xml",
|
||||||
"onxblpopuppositioned@chrome://global/content/bindings/popup.xml",
|
"onxblpopuppositioned@chrome://global/content/bindings/popup.xml",
|
||||||
],
|
],
|
||||||
|
},
|
||||||
|
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
"get_alignmentPosition@chrome://global/content/bindings/popup.xml",
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
"openPopup@chrome://global/content/bindings/popup.xml",
|
||||||
],
|
],
|
||||||
|
},
|
||||||
|
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
"openPopup@chrome://global/content/bindings/popup.xml",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
times: 6, // This number should only ever go down - never up.
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
},
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"handleEvent@resource:///modules/PanelMultiView.jsm",
|
|
||||||
"openPopup@chrome://global/content/bindings/popup.xml",
|
|
||||||
],
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const EXPECTED_APPMENU_SUBVIEW_REFLOWS = [
|
const EXPECTED_APPMENU_SUBVIEW_REFLOWS = [
|
||||||
|
@ -84,15 +65,14 @@ const EXPECTED_APPMENU_SUBVIEW_REFLOWS = [
|
||||||
* If we add more views where this is necessary, we may need to duplicate
|
* If we add more views where this is necessary, we may need to duplicate
|
||||||
* these expected reflows further.
|
* these expected reflows further.
|
||||||
*/
|
*/
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"descriptionHeightWorkaround@resource:///modules/PanelMultiView.jsm",
|
"descriptionHeightWorkaround@resource:///modules/PanelMultiView.jsm",
|
||||||
"onTransitionEnd@resource:///modules/PanelMultiView.jsm",
|
"onTransitionEnd@resource:///modules/PanelMultiView.jsm",
|
||||||
],
|
],
|
||||||
|
|
||||||
[
|
times: 2, // This number should only ever go down - never up.
|
||||||
"descriptionHeightWorkaround@resource:///modules/PanelMultiView.jsm",
|
},
|
||||||
"onTransitionEnd@resource:///modules/PanelMultiView.jsm",
|
|
||||||
],
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Please don't add anything new!
|
* Please don't add anything new!
|
||||||
|
|
|
@ -15,9 +15,11 @@
|
||||||
const EXPECTED_REFLOWS = [
|
const EXPECTED_REFLOWS = [
|
||||||
// selection change notification may cause querying the focused editor content
|
// selection change notification may cause querying the focused editor content
|
||||||
// by IME and that will cause reflow.
|
// by IME and that will cause reflow.
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"select@chrome://global/content/bindings/textbox.xml",
|
"select@chrome://global/content/bindings/textbox.xml",
|
||||||
],
|
],
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -10,11 +10,13 @@
|
||||||
* for tips on how to do that.
|
* for tips on how to do that.
|
||||||
*/
|
*/
|
||||||
const EXPECTED_REFLOWS = [
|
const EXPECTED_REFLOWS = [
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"select@chrome://global/content/bindings/textbox.xml",
|
"select@chrome://global/content/bindings/textbox.xml",
|
||||||
"focusAndSelectUrlBar@chrome://browser/content/browser.js",
|
"focusAndSelectUrlBar@chrome://browser/content/browser.js",
|
||||||
"_adjustFocusAfterTabSwitch@chrome://browser/content/tabbrowser.xml",
|
"_adjustFocusAfterTabSwitch@chrome://browser/content/tabbrowser.xml",
|
||||||
],
|
],
|
||||||
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -13,114 +13,94 @@
|
||||||
* for tips on how to do that.
|
* for tips on how to do that.
|
||||||
*/
|
*/
|
||||||
const EXPECTED_REFLOWS = [
|
const EXPECTED_REFLOWS = [
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"select@chrome://global/content/bindings/textbox.xml",
|
"select@chrome://global/content/bindings/textbox.xml",
|
||||||
"focusAndSelectUrlBar@chrome://browser/content/browser.js",
|
"focusAndSelectUrlBar@chrome://browser/content/browser.js",
|
||||||
"_delayedStartup@chrome://browser/content/browser.js",
|
"_delayedStartup@chrome://browser/content/browser.js",
|
||||||
],
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
if (Services.appinfo.OS == "Linux") {
|
if (Services.appinfo.OS == "Linux") {
|
||||||
if (gMultiProcessBrowser) {
|
if (gMultiProcessBrowser) {
|
||||||
EXPECTED_REFLOWS.push(
|
EXPECTED_REFLOWS.push({
|
||||||
[
|
stack: [
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
"EventListener.handleEvent*tabbrowser-tabs_XBL_Constructor@chrome://browser/content/tabbrowser.xml",
|
"EventListener.handleEvent*tabbrowser-tabs_XBL_Constructor@chrome://browser/content/tabbrowser.xml",
|
||||||
],
|
],
|
||||||
);
|
});
|
||||||
} else {
|
} else {
|
||||||
EXPECTED_REFLOWS.push(
|
EXPECTED_REFLOWS.push({
|
||||||
[
|
stack: [
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
"inferFromText@chrome://browser/content/browser.js",
|
"inferFromText@chrome://browser/content/browser.js",
|
||||||
"handleEvent@chrome://browser/content/browser.js",
|
"handleEvent@chrome://browser/content/browser.js",
|
||||||
],
|
],
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Services.appinfo.OS == "Darwin") {
|
if (Services.appinfo.OS == "Darwin") {
|
||||||
EXPECTED_REFLOWS.push(
|
EXPECTED_REFLOWS.push({
|
||||||
[
|
stack: [
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
"inferFromText@chrome://browser/content/browser.js",
|
"inferFromText@chrome://browser/content/browser.js",
|
||||||
"handleEvent@chrome://browser/content/browser.js",
|
"handleEvent@chrome://browser/content/browser.js",
|
||||||
],
|
],
|
||||||
);
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Services.appinfo.OS == "WINNT") {
|
if (Services.appinfo.OS == "WINNT") {
|
||||||
EXPECTED_REFLOWS.push(
|
EXPECTED_REFLOWS.push(
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"verticalMargins@chrome://browser/content/browser-tabsintitlebar.js",
|
"verticalMargins@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
],
|
],
|
||||||
|
times: 2, // This number should only ever go down - never up.
|
||||||
|
},
|
||||||
|
|
||||||
[
|
{
|
||||||
"verticalMargins@chrome://browser/content/browser-tabsintitlebar.js",
|
stack: [
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
"inferFromText@chrome://browser/content/browser.js",
|
"inferFromText@chrome://browser/content/browser.js",
|
||||||
"handleEvent@chrome://browser/content/browser.js",
|
"handleEvent@chrome://browser/content/browser.js",
|
||||||
],
|
],
|
||||||
|
},
|
||||||
|
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
"EventListener.handleEvent*tabbrowser-tabs_XBL_Constructor@chrome://browser/content/tabbrowser.xml",
|
"EventListener.handleEvent*tabbrowser-tabs_XBL_Constructor@chrome://browser/content/tabbrowser.xml",
|
||||||
],
|
],
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Services.appinfo.OS == "WINNT" || Services.appinfo.OS == "Darwin") {
|
if (Services.appinfo.OS == "WINNT" || Services.appinfo.OS == "Darwin") {
|
||||||
EXPECTED_REFLOWS.push(
|
EXPECTED_REFLOWS.push(
|
||||||
[
|
{
|
||||||
|
stack: [
|
||||||
"rect@chrome://browser/content/browser-tabsintitlebar.js",
|
"rect@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
],
|
],
|
||||||
|
times: 4, // This number should only ever go down - never up.
|
||||||
|
},
|
||||||
|
|
||||||
[
|
{
|
||||||
"rect@chrome://browser/content/browser-tabsintitlebar.js",
|
stack: [
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"rect@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"rect@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"verticalMargins@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
"verticalMargins@chrome://browser/content/browser-tabsintitlebar.js",
|
"verticalMargins@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
"_update@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
"updateAppearance@chrome://browser/content/browser-tabsintitlebar.js",
|
||||||
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
"handleEvent@chrome://browser/content/tabbrowser.xml",
|
||||||
],
|
],
|
||||||
|
times: 2, // This number should only ever go down - never up.
|
||||||
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,28 +5,35 @@
|
||||||
* @param testFn (async function)
|
* @param testFn (async function)
|
||||||
* The async function that will exercise the browser activity that is
|
* The async function that will exercise the browser activity that is
|
||||||
* being tested for reflows.
|
* being tested for reflows.
|
||||||
* @param expectedStacks (Array, optional)
|
* @param expectedReflows (Array, optional)
|
||||||
* An Array of Arrays representing stacks.
|
* An Array of Objects representing reflows.
|
||||||
*
|
*
|
||||||
* Example:
|
* Example:
|
||||||
*
|
*
|
||||||
* [
|
* [
|
||||||
|
* {
|
||||||
* // This reflow is caused by lorem ipsum
|
* // This reflow is caused by lorem ipsum
|
||||||
* [
|
* stack: [
|
||||||
* "select@chrome://global/content/bindings/textbox.xml",
|
* "select@chrome://global/content/bindings/textbox.xml",
|
||||||
* "focusAndSelectUrlBar@chrome://browser/content/browser.js",
|
* "focusAndSelectUrlBar@chrome://browser/content/browser.js",
|
||||||
* "openLinkIn@chrome://browser/content/utilityOverlay.js",
|
* "openLinkIn@chrome://browser/content/utilityOverlay.js",
|
||||||
* "openUILinkIn@chrome://browser/content/utilityOverlay.js",
|
* "openUILinkIn@chrome://browser/content/utilityOverlay.js",
|
||||||
* "BrowserOpenTab@chrome://browser/content/browser.js",
|
* "BrowserOpenTab@chrome://browser/content/browser.js",
|
||||||
* ],
|
* ],
|
||||||
|
* // We expect this particular reflow to happen 2 times
|
||||||
|
* times: 2,
|
||||||
|
* },
|
||||||
*
|
*
|
||||||
* // This reflow is caused by lorem ipsum
|
* {
|
||||||
* [
|
* // This reflow is caused by lorem ipsum. We expect this reflow
|
||||||
|
* // to only happen once, so we can omit the "times" property.
|
||||||
|
* stack: [
|
||||||
* "get_scrollPosition@chrome://global/content/bindings/scrollbox.xml",
|
* "get_scrollPosition@chrome://global/content/bindings/scrollbox.xml",
|
||||||
* "_fillTrailingGap@chrome://browser/content/tabbrowser.xml",
|
* "_fillTrailingGap@chrome://browser/content/tabbrowser.xml",
|
||||||
* "_handleNewTab@chrome://browser/content/tabbrowser.xml",
|
* "_handleNewTab@chrome://browser/content/tabbrowser.xml",
|
||||||
* "onxbltransitionend@chrome://browser/content/tabbrowser.xml",
|
* "onxbltransitionend@chrome://browser/content/tabbrowser.xml",
|
||||||
* ],
|
* ],
|
||||||
|
* }
|
||||||
*
|
*
|
||||||
* ]
|
* ]
|
||||||
*
|
*
|
||||||
|
@ -38,7 +45,7 @@
|
||||||
* @param window (browser window, optional)
|
* @param window (browser window, optional)
|
||||||
* The browser window to monitor. Defaults to the current window.
|
* The browser window to monitor. Defaults to the current window.
|
||||||
*/
|
*/
|
||||||
async function withReflowObserver(testFn, expectedStacks = [], win = window) {
|
async function withReflowObserver(testFn, expectedReflows = [], win = window) {
|
||||||
let dwu = win.QueryInterface(Ci.nsIInterfaceRequestor)
|
let dwu = win.QueryInterface(Ci.nsIInterfaceRequestor)
|
||||||
.getInterface(Ci.nsIDOMWindowUtils);
|
.getInterface(Ci.nsIDOMWindowUtils);
|
||||||
let dirtyFrameFn = () => {
|
let dirtyFrameFn = () => {
|
||||||
|
@ -53,9 +60,14 @@ async function withReflowObserver(testFn, expectedStacks = [], win = window) {
|
||||||
let els = Cc["@mozilla.org/eventlistenerservice;1"]
|
let els = Cc["@mozilla.org/eventlistenerservice;1"]
|
||||||
.getService(Ci.nsIEventListenerService);
|
.getService(Ci.nsIEventListenerService);
|
||||||
|
|
||||||
// We're going to remove the stacks one by one as we see them so that
|
// We're going to remove the reflows one by one as we see them so that
|
||||||
// we can check for expected, unseen reflows, so let's clone the array.
|
// we can check for expected, unseen reflows, so let's clone the array.
|
||||||
expectedStacks = expectedStacks.slice(0);
|
// While we're at it, for reflows that omit the "times" property, default
|
||||||
|
// it to 1.
|
||||||
|
expectedReflows = expectedReflows.slice(0);
|
||||||
|
expectedReflows.forEach(r => {
|
||||||
|
r.times = r.times || 1;
|
||||||
|
});
|
||||||
|
|
||||||
let observer = {
|
let observer = {
|
||||||
reflow(start, end) {
|
reflow(start, end) {
|
||||||
|
@ -76,12 +88,14 @@ async function withReflowObserver(testFn, expectedStacks = [], win = window) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let index = expectedStacks.findIndex(stack => path.startsWith(stack.join("|")));
|
let index = expectedReflows.findIndex(reflow => path.startsWith(reflow.stack.join("|")));
|
||||||
|
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
Assert.ok(true, "expected uninterruptible reflow: '" +
|
Assert.ok(true, "expected uninterruptible reflow: '" +
|
||||||
JSON.stringify(pathWithLineNumbers, null, "\t") + "'");
|
JSON.stringify(pathWithLineNumbers, null, "\t") + "'");
|
||||||
expectedStacks.splice(index, 1);
|
if (--expectedReflows[index].times == 0) {
|
||||||
|
expectedReflows.splice(index, 1);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Assert.ok(false, "unexpected uninterruptible reflow \n" +
|
Assert.ok(false, "unexpected uninterruptible reflow \n" +
|
||||||
JSON.stringify(pathWithLineNumbers, null, "\t") + "\n");
|
JSON.stringify(pathWithLineNumbers, null, "\t") + "\n");
|
||||||
|
@ -109,14 +123,14 @@ async function withReflowObserver(testFn, expectedStacks = [], win = window) {
|
||||||
dirtyFrameFn();
|
dirtyFrameFn();
|
||||||
await testFn();
|
await testFn();
|
||||||
} finally {
|
} finally {
|
||||||
for (let remainder of expectedStacks) {
|
for (let remainder of expectedReflows) {
|
||||||
Assert.ok(false,
|
Assert.ok(false,
|
||||||
`Unused expected reflow: ${JSON.stringify(remainder, null, "\t")}.\n` +
|
`Unused expected reflow: ${JSON.stringify(remainder.stack, null, "\t")}\n` +
|
||||||
|
`This reflow was supposed to be hit ${remainder.times} more time(s).\n` +
|
||||||
"This is probably a good thing - just remove it from the " +
|
"This is probably a good thing - just remove it from the " +
|
||||||
"expected list.");
|
"expected list.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
els.removeListenerForAllEvents(win, dirtyFrameFn, true);
|
els.removeListenerForAllEvents(win, dirtyFrameFn, true);
|
||||||
docShell.removeWeakReflowObserver(observer);
|
docShell.removeWeakReflowObserver(observer);
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче