blob: 651cc507c94e33b570b54cd98710d05031ddbdd9 [file] [log] [blame]
/* eslint-disable quotes */
/*---------------------------------------------------------
* Copyright 2023 The Go Authors. All rights reserved.
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------*/
import assert from 'assert';
import { parseArgsString } from '../../src/utils/argsUtil';
suite('util tests', () => {
test('parseArgsString Tests', () => {
const tt = [
{
test: 'Normal',
args: ['value1 value2', ' value1 value2 ', ' value1 value2 '],
want: ['value1', 'value2']
},
{
test: 'Quoted',
args: [`'value 1' "value 2" "value3" 'value4'`],
want: ['value 1', 'value 2', 'value3', 'value4']
},
{
test: 'SingleSurroundingDoubleQuotes',
args: [`' "text" '`],
want: [' "text" ']
},
{
test: 'DoubleSurroundingSingleQuotes',
args: [`" 'text' "`],
want: [` 'text' `]
},
{
test: 'EscapedQuotes',
args: [`\\'a \\'b \\"c \\"d`],
want: [`'a`, `'b`, '"c', '"d']
},
{
test: 'EscapedQuotesInsideQuotes',
args: [`'a\\' b\\"' "\\'c \\"d"`],
want: [`a' b"`, `'c "d`]
},
{
test: 'Null',
args: [`''`, '""'],
want: ['']
},
{
test: 'Empty',
args: ['', ' ', ' '],
want: [] as string[]
},
{
test: 'NullAppendedToNull',
args: [`''`, `''""`, '""""', `''''`],
want: ['']
},
{
test: 'NullAppendedToNonNull',
args: [`-e'' word""`, `''-e ""word`, `''-e'' ""word""`, `''""-e ""''word`],
want: ['-e', 'word']
},
{
test: 'UnmatchedSingleQuotes',
args: [`something '`, `' something`],
want: `args has unmatched single quotes (')`
},
{
test: 'UnmatchedDoubleQuotes',
args: ['something "', '" something'],
want: 'args has unmatched double quotes (")'
}
];
for (const tc of tt) {
for (const arg of tc.args) {
const got = parseArgsString(arg);
if (typeof tc.want === 'string') {
// error case
if (typeof got !== 'string') {
assert.fail(`${tc.test}: expected error, but got: ` + JSON.stringify(got));
}
const errorMatched = got.includes(tc.want);
if (!errorMatched) {
assert.fail(
`${tc.test}: unmatched error, got: ${JSON.stringify(
got
)}, want error message include: ${JSON.stringify(tc.want)}`
);
}
} else {
assert.deepStrictEqual(
got,
tc.want,
`${tc.test}: parseArgsString(${JSON.stringify(arg)}), got: ${JSON.stringify(
got
)}, want: ${JSON.stringify(tc.want)}`
);
}
}
}
});
});