Skip to content

Commit

Permalink
fix: app.getAppPath() returning default-app path for files or directo…
Browse files Browse the repository at this point in the history
…ries without package.json (#18763) (#18895)
  • Loading branch information
miniak authored and codebytere committed Jun 24, 2019
1 parent 65c53cc commit a568e13
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 2 deletions.
6 changes: 4 additions & 2 deletions default_app/main.js
Expand Up @@ -86,6 +86,7 @@ function loadApplicationPackage (packagePath) {
// Override app name and version.
packagePath = path.resolve(packagePath)
const packageJsonPath = path.join(packagePath, 'package.json')
let appPath
if (fs.existsSync(packageJsonPath)) {
let packageJson
try {
Expand All @@ -105,11 +106,12 @@ function loadApplicationPackage (packagePath) {
}
app.setPath('userData', path.join(app.getPath('appData'), app.getName()))
app.setPath('userCache', path.join(app.getPath('cache'), app.getName()))
app.setAppPath(packagePath)
appPath = packagePath
}

try {
Module._resolveFilename(packagePath, module, true)
const filePath = Module._resolveFilename(packagePath, module, true)
app.setAppPath(appPath || path.dirname(filePath))
} catch (e) {
showErrorMessage(`Unable to find Electron app at ${packagePath}\n\n${e.message}`)
return
Expand Down
36 changes: 36 additions & 0 deletions spec/api-app-spec.js
Expand Up @@ -6,6 +6,7 @@ const https = require('https')
const net = require('net')
const fs = require('fs')
const path = require('path')
const cp = require('child_process')
const { ipcRenderer, remote } = require('electron')
const { emittedOnce } = require('./events-helpers')
const { closeWindow } = require('./window-helpers')
Expand Down Expand Up @@ -556,6 +557,28 @@ describe('app module', () => {
})
})

describe('getAppPath', () => {
it('works for directories with package.json', async () => {
const { appPath } = await runTestApp('app-path')
expect(appPath).to.equal(path.resolve(__dirname, 'fixtures/api/app-path'))
})

it('works for directories with index.js', async () => {
const { appPath } = await runTestApp('app-path/lib')
expect(appPath).to.equal(path.resolve(__dirname, 'fixtures/api/app-path/lib'))
})

it('works for files without extension', async () => {
const { appPath } = await runTestApp('app-path/lib/index')
expect(appPath).to.equal(path.resolve(__dirname, 'fixtures/api/app-path/lib'))
})

it('works for files', async () => {
const { appPath } = await runTestApp('app-path/lib/index.js')
expect(appPath).to.equal(path.resolve(__dirname, 'fixtures/api/app-path/lib'))
})
})

describe('getPath(name)', () => {
it('returns paths that exist', () => {
const paths = [
Expand Down Expand Up @@ -1125,3 +1148,16 @@ describe('app module', () => {
})
})
})

async function runTestApp (name, ...args) {
const appPath = path.join(__dirname, 'fixtures', 'api', name)
const electronPath = remote.getGlobal('process').execPath
const appProcess = cp.spawn(electronPath, [appPath, ...args])

let output = ''
appProcess.stdout.on('data', (data) => { output += data })

await emittedOnce(appProcess.stdout, 'end')

return JSON.parse(output)
}
10 changes: 10 additions & 0 deletions spec/fixtures/api/app-path/lib/index.js
@@ -0,0 +1,10 @@
const { app } = require('electron')

const payload = {
appPath: app.getAppPath()
}

process.stdout.write(JSON.stringify(payload))
process.stdout.end()

process.exit()
4 changes: 4 additions & 0 deletions spec/fixtures/api/app-path/package.json
@@ -0,0 +1,4 @@
{
"name": "app-path",
"main": "lib/index.js"
}

0 comments on commit a568e13

Please sign in to comment.