Close windows instead of destroying them

This commit is contained in:
Kevin Sawicki 2016-08-03 12:47:53 -07:00
Родитель cce6be1900
Коммит 0ebe142b2f
10 изменённых файлов: 45 добавлений и 62 удалений

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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 () {

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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 () {

Просмотреть файл

@ -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

Просмотреть файл

@ -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()
})
})
})

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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 () {

Просмотреть файл

@ -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({

13
spec/window-helpers.js Normal file
Просмотреть файл

@ -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()
})
}
}