diff options
Diffstat (limited to 'devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js')
-rw-r--r-- | devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js b/devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js new file mode 100644 index 000000000..0773be55c --- /dev/null +++ b/devtools/client/projecteditor/test/browser_projecteditor_immediate_destroy.js @@ -0,0 +1,93 @@ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// +// Whitelisting this test. +// As part of bug 1077403, the leaking uncaught rejection should be fixed. +// +thisTestLeaksUncaughtRejectionsAndShouldBeFixed("destroy"); +thisTestLeaksUncaughtRejectionsAndShouldBeFixed("TypeError: this.window is null"); + +// Test that projecteditor can be destroyed in various states of loading +// without causing any leaks or exceptions. + +add_task(function* () { + + info("Testing tab closure when projecteditor is in various states"); + let loaderUrl = "chrome://devtools/content/projecteditor/chrome/content/projecteditor-test.xul"; + + yield addTab(loaderUrl).then(() => { + let iframe = content.document.getElementById("projecteditor-iframe"); + ok(iframe, "Tab has placeholder iframe for projecteditor"); + + info("Closing the tab without doing anything"); + gBrowser.removeCurrentTab(); + }); + + yield addTab(loaderUrl).then(() => { + let iframe = content.document.getElementById("projecteditor-iframe"); + ok(iframe, "Tab has placeholder iframe for projecteditor"); + + let projecteditor = ProjectEditor.ProjectEditor(); + ok(projecteditor, "ProjectEditor has been initialized"); + + info("Closing the tab before attempting to load"); + gBrowser.removeCurrentTab(); + }); + + yield addTab(loaderUrl).then(() => { + let iframe = content.document.getElementById("projecteditor-iframe"); + ok(iframe, "Tab has placeholder iframe for projecteditor"); + + let projecteditor = ProjectEditor.ProjectEditor(); + ok(projecteditor, "ProjectEditor has been initialized"); + + projecteditor.load(iframe); + + info("Closing the tab after a load is requested, but before load is finished"); + gBrowser.removeCurrentTab(); + }); + + yield addTab(loaderUrl).then(() => { + let iframe = content.document.getElementById("projecteditor-iframe"); + ok(iframe, "Tab has placeholder iframe for projecteditor"); + + let projecteditor = ProjectEditor.ProjectEditor(); + ok(projecteditor, "ProjectEditor has been initialized"); + + return projecteditor.load(iframe).then(() => { + info("Closing the tab after a load has been requested and finished"); + gBrowser.removeCurrentTab(); + }); + }); + + yield addTab(loaderUrl).then(() => { + let iframe = content.document.getElementById("projecteditor-iframe"); + ok(iframe, "Tab has placeholder iframe for projecteditor"); + + let projecteditor = ProjectEditor.ProjectEditor(iframe); + ok(projecteditor, "ProjectEditor has been initialized"); + + let loadedDone = promise.defer(); + projecteditor.loaded.then(() => { + ok(false, "Loaded has finished after destroy() has been called"); + loadedDone.resolve(); + }, () => { + ok(true, "Loaded has been rejected after destroy() has been called"); + loadedDone.resolve(); + }); + + projecteditor.destroy(); + + return loadedDone.promise.then(() => { + gBrowser.removeCurrentTab(); + }); + }); + + finish(); +}); + + |