From 79f0c444fd1317e397af5d889228cb911d2441e2 Mon Sep 17 00:00:00 2001 From: Milan Burda Date: Wed, 19 Jun 2019 23:34:22 +0200 Subject: [PATCH] fix: app.getAppPath() returning default-app path for files or directories without package.json (#18763) --- default_app/main.ts | 6 ++++-- spec-main/api-app-spec.ts | 22 ++++++++++++++++++++++ spec/fixtures/api/app-path/lib/index.js | 10 ++++++++++ spec/fixtures/api/app-path/package.json | 4 ++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 spec/fixtures/api/app-path/lib/index.js create mode 100644 spec/fixtures/api/app-path/package.json diff --git a/default_app/main.ts b/default_app/main.ts index 6d2ec90c04..fba9562165 100644 --- a/default_app/main.ts +++ b/default_app/main.ts @@ -85,6 +85,7 @@ function loadApplicationPackage (packagePath: string) { // 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 { @@ -102,11 +103,12 @@ function loadApplicationPackage (packagePath: string) { } else if (packageJson.name) { app.name = packageJson.name } - app._setDefaultAppPaths(packagePath) + appPath = packagePath } try { - Module._resolveFilename(packagePath, module, true) + const filePath = Module._resolveFilename(packagePath, module, true) + app._setDefaultAppPaths(appPath || path.dirname(filePath)) } catch (e) { showErrorMessage(`Unable to find Electron app at ${packagePath}\n\n${e.message}`) return diff --git a/spec-main/api-app-spec.ts b/spec-main/api-app-spec.ts index 3eae865d3a..59b686ff9b 100644 --- a/spec-main/api-app-spec.ts +++ b/spec-main/api-app-spec.ts @@ -645,6 +645,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(fixturesPath, 'api/app-path')) + }) + + it('works for directories with index.js', async () => { + const { appPath } = await runTestApp('app-path/lib') + expect(appPath).to.equal(path.resolve(fixturesPath, '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(fixturesPath, 'api/app-path/lib')) + }) + + it('works for files', async () => { + const { appPath } = await runTestApp('app-path/lib/index.js') + expect(appPath).to.equal(path.resolve(fixturesPath, 'api/app-path/lib')) + }) + }) + describe('getPath(name)', () => { it('returns paths that exist', () => { const paths = [ diff --git a/spec/fixtures/api/app-path/lib/index.js b/spec/fixtures/api/app-path/lib/index.js new file mode 100644 index 0000000000..d1a5732edc --- /dev/null +++ b/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() diff --git a/spec/fixtures/api/app-path/package.json b/spec/fixtures/api/app-path/package.json new file mode 100644 index 0000000000..8f9e09dbda --- /dev/null +++ b/spec/fixtures/api/app-path/package.json @@ -0,0 +1,4 @@ +{ + "name": "app-path", + "main": "lib/index.js" +}