From 707d68f719a209f7ced9b08108a4892372ebb79d Mon Sep 17 00:00:00 2001 From: Cheng Zhao Date: Fri, 3 Jun 2016 12:12:20 +0900 Subject: [PATCH] spec: Add test case for app.relaunch --- spec/api-app-spec.js | 50 +++++++++++++++++++++++++++++++++ spec/fixtures/api/quit-app/package.json | 2 +- spec/fixtures/api/relaunch/main.js | 25 +++++++++++++++++ spec/fixtures/api/relaunch/package.json | 5 ++++ spec/package.json | 2 +- 5 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/api/relaunch/main.js create mode 100644 spec/fixtures/api/relaunch/package.json diff --git a/spec/api-app-spec.js b/spec/api-app-spec.js index df356ec..260bdd3 100644 --- a/spec/api-app-spec.js +++ b/spec/api-app-spec.js @@ -1,6 +1,7 @@ const assert = require('assert') const ChildProcess = require('child_process') const https = require('https') +const net = require('net') const fs = require('fs') const path = require('path') const {remote} = require('electron') @@ -108,6 +109,55 @@ describe('app module', function () { }) }) + describe('app.relaunch', function () { + let server = null + const socketPath = process.platform === 'win32' ? + '\\\\.\\pipe\\electron-app-relaunch' : + '/tmp/electron-app-relaunch' + + beforeEach(function (done) { + fs.unlink(socketPath, (error) => { + server = net.createServer() + server.listen(socketPath) + done() + }) + }) + + afterEach(function (done) { + server.close(() => { + if (process.platform === 'win32') { + done() + } else { + fs.unlink(socketPath, (error) => { + done() + }) + } + }) + }) + + it('relaunches the app', function (done) { + this.timeout(100000) + let state = 'none' + server.once('error', (error) => { + done(error) + }) + server.on('connection', (client) => { + client.once('data', function (data) { + if (String(data) === 'false' && state === 'none') { + state = 'first-launch' + } else if (String(data) === 'true' && state === 'first-launch') { + done() + } else { + done(`Unexpected state: ${state}`) + } + }) + }) + + const appPath = path.join(__dirname, 'fixtures', 'api', 'relaunch') + ChildProcess.spawn(remote.process.execPath, [appPath]) + }) + }) + describe('app.setUserActivity(type, userInfo)', function () { if (process.platform !== 'darwin') { return diff --git a/spec/fixtures/api/quit-app/package.json b/spec/fixtures/api/quit-app/package.json index ea5bb16..fbdee7f 100644 --- a/spec/fixtures/api/quit-app/package.json +++ b/spec/fixtures/api/quit-app/package.json @@ -1,4 +1,4 @@ { - "name": "quit-app", + "name": "electron-quit-app", "main": "main.js" } diff --git a/spec/fixtures/api/relaunch/main.js b/spec/fixtures/api/relaunch/main.js new file mode 100644 index 0000000..74cafc6 --- /dev/null +++ b/spec/fixtures/api/relaunch/main.js @@ -0,0 +1,25 @@ +const {app, dialog} = require('electron') +const net = require('net') + +const socketPath = process.platform === 'win32' ? + '\\\\.\\pipe\\electron-app-relaunch' : + '/tmp/electron-app-relaunch' + +process.on('uncaughtException', () => { + app.exit(1) +}) + +app.once('ready', () => { + let lastArg = process.argv[process.argv.length - 1] + const client = net.connect(socketPath) + client.once('connect', () => { + client.end(String(lastArg === '--second')) + }) + client.once('end', () => { + app.exit(0) + }) + + if (lastArg !== '--second') { + app.relaunch({args: process.argv.slice(1).concat('--second')}) + } +}) diff --git a/spec/fixtures/api/relaunch/package.json b/spec/fixtures/api/relaunch/package.json new file mode 100644 index 0000000..dbaabc8 --- /dev/null +++ b/spec/fixtures/api/relaunch/package.json @@ -0,0 +1,5 @@ +{ + "name": "electron-app-relaunch", + "main": "main.js" +} + diff --git a/spec/package.json b/spec/package.json index 0439f4b..5abf89f 100644 --- a/spec/package.json +++ b/spec/package.json @@ -13,7 +13,7 @@ "temp": "0.8.1", "walkdir": "0.0.7", "ws": "0.7.2", - "yargs": "^3.31.0" + "yargs": "^4.7.1" }, "optionalDependencies": { "ffi": "2.0.0", -- 2.7.4