spec: Add test case for app.relaunch
authorCheng Zhao <zcbenz@gmail.com>
Fri, 3 Jun 2016 03:12:20 +0000 (12:12 +0900)
committerCheng Zhao <zcbenz@gmail.com>
Fri, 3 Jun 2016 03:12:20 +0000 (12:12 +0900)
spec/api-app-spec.js
spec/fixtures/api/quit-app/package.json
spec/fixtures/api/relaunch/main.js [new file with mode: 0644]
spec/fixtures/api/relaunch/package.json [new file with mode: 0644]
spec/package.json

index df356ec..260bdd3 100644 (file)
@@ -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
index ea5bb16..fbdee7f 100644 (file)
@@ -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 (file)
index 0000000..74cafc6
--- /dev/null
@@ -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 (file)
index 0000000..dbaabc8
--- /dev/null
@@ -0,0 +1,5 @@
+{
+  "name": "electron-app-relaunch",
+  "main": "main.js"
+}
+
index 0439f4b..5abf89f 100644 (file)
@@ -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",