Permalink
Cannot retrieve contributors at this time
73 lines (65 sloc)
4.18 KB
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
codeql-action/node_modules/arrgv/test.js
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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'); | |
}); |