2019-05-31 19:33:56 +03:00
|
|
|
const { assert } = require('chai');
|
|
|
|
const parseCommandLine = require('../../src/main-process/parse-command-line');
|
2017-09-22 00:50:41 +03:00
|
|
|
|
2018-08-24 22:00:44 +03:00
|
|
|
describe('parseCommandLine', () => {
|
|
|
|
describe('when --uri-handler is not passed', () => {
|
|
|
|
it('parses arguments as normal', () => {
|
2019-02-22 10:55:17 +03:00
|
|
|
const args = parseCommandLine([
|
|
|
|
'-d',
|
|
|
|
'--safe',
|
|
|
|
'--test',
|
|
|
|
'/some/path',
|
|
|
|
'atom://test/url',
|
|
|
|
'atom://other/url'
|
2019-05-31 19:33:56 +03:00
|
|
|
]);
|
|
|
|
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']);
|
|
|
|
});
|
2021-01-18 19:22:22 +03:00
|
|
|
|
|
|
|
// The "underscore flag" with no "non-flag argument" after it
|
|
|
|
// is the minimal reproducer for the macOS Gatekeeper startup bug.
|
|
|
|
// By default, it causes the addition of boolean "true"s into yargs' "non-flag argument" array: `argv._`
|
|
|
|
// Whereas we do string-only operations on these arguments, expecting them to be paths or URIs.
|
|
|
|
describe('and --_ or -_ are passed', () => {
|
|
|
|
it('does not attempt to parse booleans as paths or URIs', () => {
|
|
|
|
const args = parseCommandLine([
|
|
|
|
'--_',
|
|
|
|
'/some/path',
|
|
|
|
'-_',
|
|
|
|
'-_',
|
|
|
|
'some/other/path',
|
|
|
|
'atom://test/url',
|
|
|
|
'--_',
|
|
|
|
'atom://other/url',
|
|
|
|
'-_',
|
|
|
|
'./another-path.file',
|
|
|
|
'-_',
|
|
|
|
'-_',
|
|
|
|
'-_'
|
|
|
|
]);
|
|
|
|
assert.deepEqual(args.urlsToOpen, [
|
|
|
|
'atom://test/url',
|
|
|
|
'atom://other/url'
|
|
|
|
]);
|
|
|
|
assert.deepEqual(args.pathsToOpen, [
|
|
|
|
'/some/path',
|
|
|
|
'some/other/path',
|
|
|
|
'./another-path.file'
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
describe('and a non-flag number is passed as an argument', () => {
|
|
|
|
it('does not attempt to parse numbers as paths or URIs', () => {
|
|
|
|
const args = parseCommandLine([
|
|
|
|
'43',
|
|
|
|
'/some/path',
|
|
|
|
'22',
|
|
|
|
'97',
|
|
|
|
'some/other/path',
|
|
|
|
'atom://test/url',
|
|
|
|
'885',
|
|
|
|
'atom://other/url',
|
|
|
|
'42',
|
|
|
|
'./another-path.file'
|
|
|
|
]);
|
|
|
|
assert.deepEqual(args.urlsToOpen, [
|
|
|
|
'atom://test/url',
|
|
|
|
'atom://other/url'
|
|
|
|
]);
|
|
|
|
assert.deepEqual(args.pathsToOpen, [
|
|
|
|
'/some/path',
|
|
|
|
'some/other/path',
|
|
|
|
'./another-path.file'
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|
2019-05-31 19:33:56 +03:00
|
|
|
});
|
2017-09-22 00:50:41 +03:00
|
|
|
|
2018-08-24 22:00:44 +03:00
|
|
|
describe('when --uri-handler is passed', () => {
|
|
|
|
it('ignores other arguments and limits to one URL', () => {
|
2019-02-22 10:55:17 +03:00
|
|
|
const args = parseCommandLine([
|
|
|
|
'-d',
|
|
|
|
'--uri-handler',
|
|
|
|
'--safe',
|
|
|
|
'--test',
|
|
|
|
'/some/path',
|
|
|
|
'atom://test/url',
|
|
|
|
'atom://other/url'
|
2019-05-31 19:33:56 +03:00
|
|
|
]);
|
|
|
|
assert.isUndefined(args.devMode);
|
|
|
|
assert.isUndefined(args.safeMode);
|
|
|
|
assert.isUndefined(args.test);
|
|
|
|
assert.deepEqual(args.urlsToOpen, ['atom://test/url']);
|
|
|
|
assert.deepEqual(args.pathsToOpen, []);
|
|
|
|
});
|
|
|
|
});
|
2021-01-18 19:22:22 +03:00
|
|
|
|
|
|
|
describe('when evil macOS Gatekeeper flag "-psn_0_[six or seven digits here]" is passed', () => {
|
|
|
|
it('ignores any arguments starting with "-psn_"', () => {
|
|
|
|
const getPsnFlag = () => {
|
|
|
|
return `-psn_0_${Math.floor(Math.random() * 10_000_000)}`;
|
|
|
|
};
|
|
|
|
const args = parseCommandLine([
|
|
|
|
getPsnFlag(),
|
|
|
|
'/some/path',
|
|
|
|
getPsnFlag(),
|
|
|
|
getPsnFlag(),
|
|
|
|
'some/other/path',
|
|
|
|
'atom://test/url',
|
|
|
|
getPsnFlag(),
|
|
|
|
'atom://other/url',
|
|
|
|
'-psn_ Any argument starting with "-psn_" should be ignored, even this one.',
|
|
|
|
'./another-path.file'
|
|
|
|
]);
|
|
|
|
assert.deepEqual(args.urlsToOpen, [
|
|
|
|
'atom://test/url',
|
|
|
|
'atom://other/url'
|
|
|
|
]);
|
|
|
|
assert.deepEqual(args.pathsToOpen, [
|
|
|
|
'/some/path',
|
|
|
|
'some/other/path',
|
|
|
|
'./another-path.file'
|
|
|
|
]);
|
|
|
|
});
|
|
|
|
});
|
2019-05-31 19:33:56 +03:00
|
|
|
});
|