diff --git a/spec/api-app-spec.js b/spec/api-app-spec.js index 618919ec25ef..84c207713e7b 100644 --- a/spec/api-app-spec.js +++ b/spec/api-app-spec.js @@ -5,6 +5,7 @@ const net = require('net') const fs = require('fs') const path = require('path') const {remote} = require('electron') +const {closeWindow} = require('./window-helpers') const {app, BrowserWindow, ipcMain} = remote @@ -19,9 +20,6 @@ describe('electron module', function () { let window = null beforeEach(function () { - if (window != null) { - window.destroy() - } window = new BrowserWindow({ show: false, width: 400, @@ -30,10 +28,7 @@ describe('electron module', function () { }) afterEach(function () { - if (window != null) { - window.destroy() - } - window = null + return closeWindow(window).then(function () { window = null }) }) it('always returns the internal electron module', function (done) { @@ -191,10 +186,7 @@ describe('app module', function () { }) afterEach(function () { - if (w != null) { - w.destroy() - } - w = null + return closeWindow(w).then(function () { w = null }) }) it('can import certificate into platform cert store', function (done) { @@ -232,10 +224,7 @@ describe('app module', function () { var w = null afterEach(function () { - if (w != null) { - w.destroy() - } - w = null + return closeWindow(w).then(function () { w = null }) }) it('should emit browser-window-focus event when window is focused', function (done) { diff --git a/spec/api-browser-window-spec.js b/spec/api-browser-window-spec.js index b5cfea354dff..29c5444f563b 100644 --- a/spec/api-browser-window-spec.js +++ b/spec/api-browser-window-spec.js @@ -5,6 +5,7 @@ const fs = require('fs') const path = require('path') const os = require('os') const http = require('http') +const {closeWindow} = require('./window-helpers') const remote = require('electron').remote const screen = require('electron').screen @@ -38,9 +39,6 @@ describe('browser-window module', function () { }) beforeEach(function () { - if (w != null) { - w.destroy() - } w = new BrowserWindow({ show: false, width: 400, @@ -52,10 +50,7 @@ describe('browser-window module', function () { }) afterEach(function () { - if (w != null) { - w.destroy() - } - w = null + return closeWindow(w).then(function () { w = null }) }) describe('BrowserWindow.close()', function () { diff --git a/spec/api-crash-reporter-spec.js b/spec/api-crash-reporter-spec.js index 16806c7102c4..7b04c27e1f6b 100644 --- a/spec/api-crash-reporter-spec.js +++ b/spec/api-crash-reporter-spec.js @@ -3,6 +3,7 @@ const http = require('http') const multiparty = require('multiparty') const path = require('path') const url = require('url') +const {closeWindow} = require('./window-helpers') const remote = require('electron').remote const app = remote.require('electron').app @@ -20,7 +21,7 @@ describe('crash-reporter module', function () { }) afterEach(function () { - w.destroy() + return closeWindow(w).then(function () { w = null }) }) if (process.mas) { diff --git a/spec/api-debugger-spec.js b/spec/api-debugger-spec.js index 27aacc7671cf..c9d1ff422274 100644 --- a/spec/api-debugger-spec.js +++ b/spec/api-debugger-spec.js @@ -1,5 +1,6 @@ const assert = require('assert') const path = require('path') +const {closeWindow} = require('./window-helpers') const BrowserWindow = require('electron').remote.BrowserWindow describe('debugger module', function () { @@ -7,9 +8,6 @@ describe('debugger module', function () { var w = null beforeEach(function () { - if (w != null) { - w.destroy() - } w = new BrowserWindow({ show: false, width: 400, @@ -18,10 +16,7 @@ describe('debugger module', function () { }) afterEach(function () { - if (w != null) { - w.destroy() - } - w = null + return closeWindow(w).then(function () { w = null }) }) describe('debugger.attach', function () { diff --git a/spec/api-ipc-spec.js b/spec/api-ipc-spec.js index 83413e08f067..8a57fb0ab2ba 100644 --- a/spec/api-ipc-spec.js +++ b/spec/api-ipc-spec.js @@ -2,6 +2,7 @@ const assert = require('assert') const path = require('path') +const {closeWindow} = require('./window-helpers') const {ipcRenderer, remote} = require('electron') const {ipcMain, webContents, BrowserWindow} = remote @@ -17,6 +18,12 @@ const comparePaths = function (path1, path2) { describe('ipc module', function () { var fixtures = path.join(__dirname, 'fixtures') + var w = null + + afterEach(function () { + return closeWindow(w).then(function () { w = null }) + }) + describe('remote.require', function () { it('should returns same object for the same module', function () { var dialog1 = remote.require('electron') @@ -302,19 +309,18 @@ describe('ipc module', function () { it('does not crash when reply is not sent and browser is destroyed', function (done) { this.timeout(10000) - var w = new BrowserWindow({ + w = new BrowserWindow({ show: false }) ipcMain.once('send-sync-message', function (event) { event.returnValue = null - w.destroy() done() }) w.loadURL('file://' + path.join(fixtures, 'api', 'send-sync-message.html')) }) it('does not crash when reply is sent by multiple listeners', function (done) { - var w = new BrowserWindow({ + w = new BrowserWindow({ show: false }) ipcMain.on('send-sync-message', function (event) { @@ -322,7 +328,6 @@ describe('ipc module', function () { }) ipcMain.on('send-sync-message', function (event) { event.returnValue = null - w.destroy() done() }) w.loadURL('file://' + path.join(fixtures, 'api', 'send-sync-message.html')) @@ -354,12 +359,6 @@ describe('ipc module', function () { }) describe('remote listeners', function () { - var w = null - - afterEach(function () { - w.destroy() - }) - it('can be added and removed correctly', function () { w = new BrowserWindow({ show: false diff --git a/spec/api-protocol-spec.js b/spec/api-protocol-spec.js index 597f061c6d82..3aba18cae787 100644 --- a/spec/api-protocol-spec.js +++ b/spec/api-protocol-spec.js @@ -2,6 +2,7 @@ const assert = require('assert') const http = require('http') const path = require('path') const qs = require('querystring') +const {closeWindow} = require('./window-helpers') const remote = require('electron').remote const {BrowserWindow, protocol, webContents} = remote @@ -896,11 +897,10 @@ describe('protocol module', function () { afterEach(function (done) { protocol.unregisterProtocol(standardScheme, function () { - if (w != null) { - w.destroy() - } - w = null - done() + closeWindow(w).then(function () { + w = null + done() + }) }) }) diff --git a/spec/api-session-spec.js b/spec/api-session-spec.js index e6f5737b33ba..52da23ce5254 100644 --- a/spec/api-session-spec.js +++ b/spec/api-session-spec.js @@ -2,6 +2,7 @@ const assert = require('assert') const http = require('http') const path = require('path') const fs = require('fs') +const {closeWindow} = require('./window-helpers') const {ipcRenderer, remote} = require('electron') const {ipcMain, session, BrowserWindow} = remote @@ -14,9 +15,6 @@ describe('session module', function () { var url = 'http://127.0.0.1' beforeEach(function () { - if (w != null) { - w.destroy() - } w = new BrowserWindow({ show: false, width: 400, @@ -25,10 +23,7 @@ describe('session module', function () { }) afterEach(function () { - if (w != null) { - w.destroy() - } - w = null + return closeWindow(w).then(function () { w = null }) }) describe('session.defaultSession', function () { @@ -194,7 +189,7 @@ describe('session module', function () { }) afterEach(function () { - w.destroy() + return closeWindow(w).then(function () { w = null }) }) it('can cancel default download behavior', function (done) { diff --git a/spec/api-web-contents-spec.js b/spec/api-web-contents-spec.js index b9195702a324..66b20ca2a825 100644 --- a/spec/api-web-contents-spec.js +++ b/spec/api-web-contents-spec.js @@ -2,6 +2,7 @@ const assert = require('assert') const path = require('path') +const {closeWindow} = require('./window-helpers') const {remote} = require('electron') const {BrowserWindow, webContents} = remote @@ -13,9 +14,6 @@ describe('webContents module', function () { let w beforeEach(function () { - if (w != null) { - w.destroy() - } w = new BrowserWindow({ show: false, width: 400, @@ -27,10 +25,7 @@ describe('webContents module', function () { }) afterEach(function () { - if (w != null) { - w.destroy() - } - w = null + return closeWindow(w).then(function () { w = null }) }) describe('getAllWebContents() API', function () { diff --git a/spec/asar-spec.js b/spec/asar-spec.js index 81f6ebe2161d..7d7f36e2fc0a 100644 --- a/spec/asar-spec.js +++ b/spec/asar-spec.js @@ -2,6 +2,7 @@ const assert = require('assert') const ChildProcess = require('child_process') const fs = require('fs') const path = require('path') +const {closeWindow} = require('./window-helpers') const nativeImage = require('electron').nativeImage const remote = require('electron').remote @@ -794,8 +795,8 @@ describe('asar package', function () { it('sets __dirname correctly', function (done) { after(function () { - w.destroy() ipcMain.removeAllListeners('dirname') + return closeWindow(w).then(function () { w = null }) }) var w = new BrowserWindow({ @@ -818,8 +819,8 @@ describe('asar package', function () { it('loads script tag in html', function (done) { after(function () { - w.destroy() ipcMain.removeAllListeners('ping') + return closeWindow(w).then(function () { w = null }) }) var w = new BrowserWindow({ diff --git a/spec/window-helpers.js b/spec/window-helpers.js new file mode 100644 index 000000000000..9909ec65721d --- /dev/null +++ b/spec/window-helpers.js @@ -0,0 +1,13 @@ +exports.closeWindow = (window) => { + if (window == null || window.isDestroyed()) { + return Promise.resolve() + } else { + return new Promise((resolve, reject) => { + window.once('closed', () => { + resolve() + }) + window.setClosable(true) + window.close() + }) + } +}