mirror of
https://github.com/github/codeql-action.git
synced 2025-12-26 17:20:10 +08:00
74 lines
4.2 KiB
JavaScript
74 lines
4.2 KiB
JavaScript
const test = require('ava');
|
|
const arrgv = require('.');
|
|
|
|
test('return array', t => {
|
|
t.true(Array.isArray(arrgv()), 'array must be returned when no args');
|
|
t.true(Array.isArray(arrgv('')), 'array must be returned on enpty string');
|
|
t.true(Array.isArray(arrgv(1)), 'array must be returned on number');
|
|
t.true(Array.isArray(arrgv([])), 'array must be returned on array');
|
|
t.true(Array.isArray(arrgv({})), 'array must be returned on object');
|
|
t.true(Array.isArray(arrgv(true)), 'array must be returned on true');
|
|
t.true(Array.isArray(arrgv(false)), 'array must be returned on false');
|
|
t.true(Array.isArray(arrgv(null)), 'array must be returned on null');
|
|
t.true(Array.isArray(arrgv(undefined)), 'array must be returned when on undefined');
|
|
});
|
|
|
|
test('split', t => {
|
|
t.deepEqual(arrgv('aaa bbb ccc'), ['aaa', 'bbb', 'ccc'], 'splits easy args by space');
|
|
t.deepEqual(arrgv(' aaa bbb ccc '), ['aaa', 'bbb', 'ccc'], 'trailing and leading spaces do not counts');
|
|
t.deepEqual(arrgv('aaa bbb ccc'), ['aaa', 'bbb', 'ccc'], 'multi space works as single');
|
|
});
|
|
|
|
test('double quotes', t => {
|
|
t.deepEqual(arrgv('aaa "bbb" ccc'), ['aaa', 'bbb', 'ccc'], 'no double quotes in string args');
|
|
t.deepEqual(arrgv('aaa "b\'bb" ccc'), ['aaa', 'b\'bb', 'ccc'], 'single quote saved in double quotes');
|
|
t.deepEqual(arrgv('aaa "bb"b ccc'), ['aaa', 'bbb', 'ccc'], 'no double quotes inside words');
|
|
t.deepEqual(arrgv('aaa "bbb ccc" ddd'), ['aaa', 'bbb ccc', 'ddd'], 'multi word args in double quotes');
|
|
t.deepEqual(arrgv('aaa bbb" "ccc ddd'), ['aaa', 'bbb ccc', 'ddd'], 'multi word args with double quoted space');
|
|
t.deepEqual(arrgv('aaa b"bb cc"c ddd'), ['aaa', 'bbb ccc', 'ddd'], 'double quotes in words make string arg');
|
|
t.deepEqual(arrgv('aaa "" bbb'), ['aaa', '', 'bbb'], 'empty string in double quotes');
|
|
t.deepEqual(arrgv('aaa ""'), ['aaa', ''], 'empty string in double quotes on last position');
|
|
});
|
|
|
|
test('single quotes', t => {
|
|
t.deepEqual(arrgv(`aaa 'bbb' ccc`), ['aaa', 'bbb', 'ccc'], 'no single quotes in string args');
|
|
t.deepEqual(arrgv(`aaa 'b"bb' ccc`), ['aaa', 'b"bb', 'ccc'], 'double quote saved in single quotes');
|
|
t.deepEqual(arrgv(`aaa 'bb'b ccc`), ['aaa', 'bbb', 'ccc'], 'no single quotes inside words');
|
|
t.deepEqual(arrgv(`aaa 'bbb ccc' ddd`), ['aaa', 'bbb ccc', 'ddd'], 'multi word args in single quotes');
|
|
t.deepEqual(arrgv(`aaa bbb' 'ccc ddd`), ['aaa', 'bbb ccc', 'ddd'], 'multi word args with single quoted space');
|
|
t.deepEqual(arrgv(`aaa b'bb cc'c ddd`), ['aaa', 'bbb ccc', 'ddd'], 'single quotes in words make string arg');
|
|
t.deepEqual(arrgv(`aaa '' bbb`), ['aaa', '', 'bbb'], 'empty string in single quotes');
|
|
t.deepEqual(arrgv(`aaa ''`), ['aaa', ''], 'empty string in single quotes on last position');
|
|
});
|
|
|
|
test('spaces', t => {
|
|
t.deepEqual(arrgv(`aaa\nbbb`), ['aaa', 'bbb'], '\\n is delimiter');
|
|
t.deepEqual(arrgv(`aaa\bbbb`), ['aaa', 'bbb'], '\\b is delimiter');
|
|
t.deepEqual(arrgv(`aaa\rbbb`), ['aaa', 'bbb'], '\\r is delimiter');
|
|
t.deepEqual(arrgv(`aaa\tbbb`), ['aaa', 'bbb'], '\\t is delimiter');
|
|
t.deepEqual(arrgv(`aaa\fbbb`), ['aaa', 'bbb'], '\\f is delimiter');
|
|
});
|
|
|
|
test('slashes', t => {
|
|
t.deepEqual(arrgv('aaa \\"bbb c\\"cc ddd'), ['aaa', '"bbb', 'c"cc', 'ddd'], 'slashed double quotes is usual char');
|
|
t.deepEqual(arrgv(`aaa \\'bbb c\\'cc ddd`), ['aaa', `'bbb`, `c'cc`, 'ddd'], 'slashed single quotes is usual char');
|
|
t.deepEqual(arrgv('\\$\\`\\"\\h aaa'), ['$`"h', 'aaa'], 'no slashes outside quotes');
|
|
t.deepEqual(arrgv('"\\$\\`\\"\\h aaa"'), ['$`"\\h aaa'], 'slashes saved in double quotes except $`"');
|
|
t.deepEqual(arrgv('\'\\$\\`\\h aaa\''), ['\\$\\`\\h aaa'], 'slashes saved in single quotes');
|
|
t.deepEqual(arrgv('"\\\\"'), ['\\'], 'slashes need escaping in double quotes');
|
|
t.deepEqual(arrgv('\'\\\\\''), ['\\\\'], 'slashes saved as is in single quotes');
|
|
});
|
|
|
|
test('errors', t => {
|
|
t.throws(() => {
|
|
arrgv('aaa"bbb');
|
|
}, SyntaxError, 'double quotes must be closed');
|
|
t.throws(() => {
|
|
arrgv('aaa\'bbb');
|
|
}, SyntaxError, 'single quotes must be closed');
|
|
t.throws(() => {
|
|
arrgv('aaa\\');
|
|
}, SyntaxError, 'end of string must not to be escaped');
|
|
});
|
|
|