Close windows instead of destroying them
authorKevin Sawicki <kevinsawicki@gmail.com>
Wed, 3 Aug 2016 19:47:53 +0000 (12:47 -0700)
committerKevin Sawicki <kevinsawicki@gmail.com>
Wed, 3 Aug 2016 23:23:39 +0000 (16:23 -0700)
spec/api-app-spec.js
spec/api-browser-window-spec.js
spec/api-crash-reporter-spec.js
spec/api-debugger-spec.js
spec/api-ipc-spec.js
spec/api-protocol-spec.js
spec/api-session-spec.js
spec/api-web-contents-spec.js
spec/asar-spec.js
spec/window-helpers.js [new file with mode: 0644]

index 618919e..84c2077 100644 (file)
@@ -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) {
index b5cfea3..29c5444 100644 (file)
@@ -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 () {
index 16806c7..7b04c27 100644 (file)
@@ -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) {
index 27aacc7..c9d1ff4 100644 (file)
@@ -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 () {
index 83413e0..8a57fb0 100644 (file)
@@ -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
index 597f061..3aba18c 100644 (file)
@@ -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()
+        })
       })
     })
 
index e6f5737..52da23c 100644 (file)
@@ -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) {
index b919570..66b20ca 100644 (file)
@@ -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 () {
index 81f6ebe..7d7f36e 100644 (file)
@@ -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 (file)
index 0000000..9909ec6
--- /dev/null
@@ -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()
+    })
+  }
+}