pulsar/spec/main-process/parse-command-line.test.js

133 lines
3.8 KiB
JavaScript
Raw Normal View History

2019-05-31 19:33:56 +03:00
const { assert } = require('chai');
const parseCommandLine = require('../../src/main-process/parse-command-line');
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']);
});
// 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
});
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, []);
});
});
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
});