Limit argument parsing when --url-handler is set

This commit is contained in:
Michelle Tilley
2017-09-21 14:50:41 -07:00
parent 7ac071d622
commit c52d517d13
2 changed files with 48 additions and 3 deletions

View File

@@ -0,0 +1,27 @@
/** @babel */
import parseCommandLine from '../../src/main-process/parse-command-line'
describe('parseCommandLine', function () {
describe('when --url-handler is not passed', function () {
it('parses arguments as normal', function () {
const args = parseCommandLine(['-d', '--safe', '--test', 'atom://test/url', 'atom://other/url', '/some/path'])
assert.isTrue(args.devMode)
assert.isTrue(args.safeMode)
assert.isTrue(args.test)
assert.deepEqual(args.urlsToOpen, ['atom://test/url', 'atom://other/url'])
assert.deepEqual(args.pathsToOpen, ['/some/path'])
})
})
describe('when --url-handler is passed', function () {
it('ignores other arguments and limits to one URL', function () {
const args = parseCommandLine(['-d', '--url-handler', '--safe', '--test', 'atom://test/url', 'atom://other/url', '/some/path'])
assert.isUndefined(args.devMode)
assert.isUndefined(args.safeMode)
assert.isUndefined(args.test)
assert.deepEqual(args.urlsToOpen, ['atom://test/url'])
assert.deepEqual(args.pathsToOpen, [])
})
})
})

View File

@@ -58,8 +58,18 @@ module.exports = function parseCommandLine (processArgs) {
options.string('user-data-dir')
options.boolean('clear-window-state').describe('clear-window-state', 'Delete all Atom environment state.')
options.boolean('enable-electron-logging').describe('enable-electron-logging', 'Enable low-level logging messages from Electron.')
options.boolean('url-handler')
const args = options.argv
let args = options.argv
// If --url-handler is set, then we parse NOTHING else
if (args.urlHandler) {
args = {
urlHandler: true,
'url-handler': true,
_: args._
}
}
if (args.help) {
process.stdout.write(options.help())
@@ -101,8 +111,8 @@ module.exports = function parseCommandLine (processArgs) {
const userDataDir = args['user-data-dir']
const profileStartup = args['profile-startup']
const clearWindowState = args['clear-window-state']
const pathsToOpen = []
const urlsToOpen = []
let pathsToOpen = []
let urlsToOpen = []
let devMode = args['dev']
let devResourcePath = process.env.ATOM_DEV_RESOURCE_PATH || path.join(app.getPath('home'), 'github', 'atom')
let resourcePath = null
@@ -115,6 +125,14 @@ module.exports = function parseCommandLine (processArgs) {
}
}
// When performing as a URL handler, only accept one URL and no paths
if (args.urlHandler) {
pathsToOpen = []
if (urlsToOpen.length > 1) {
urlsToOpen.length = 1
}
}
if (args['resource-path']) {
devMode = true
devResourcePath = args['resource-path']