diff --git a/tests/virshtest.c b/tests/virshtest.c index 4b02ef3a49..fc1246a96d 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -581,77 +581,66 @@ mymain(void) ret = -1; \ } while (0); - /* It's a bit awkward listing result before argument, but that's a - * limitation of C99 vararg macros. */ -# define DO_TEST(i, result, ...) \ +# define DO_TEST_FULL(testname_, filter, result, ...) \ do { \ - const char *myargv[] = { VIRSH_DEFAULT, __VA_ARGS__, NULL }; \ + const char *testname = testname_; \ + const char *myargv[] = { __VA_ARGS__, NULL }; \ const struct testInfo info = { NULL, NULL, myargv, result }; \ - if (virTestRun("virsh echo " #i, testCompare, &info) < 0) \ + if (virTestRun(testname, testCompare, &info) < 0) \ ret = -1; \ } while (0) + /* automatically numbered test invocation */ +# define DO_TEST(result, ...) \ + DO_TEST_FULL(virTestCounterNext(), NULL, result, VIRSH_DEFAULT, __VA_ARGS__); + + /* Arg parsing quote removal tests. */ - DO_TEST(3, "a b\n", - "echo a \t b"); - DO_TEST(4, "a \t b\n", - "echo \"a \t b\""); - DO_TEST(5, "a \t b\n", - "echo 'a \t b'"); - DO_TEST(6, "a \t b\n", - "echo a\\ \\\t\\ b"); - DO_TEST(9, "' \" \\;echo\ta\n", - "echo", "'", "\"", "\\;echo\ta"); - DO_TEST(10, "' \" ;echo a\n", - "echo \\' \\\" \\;echo\ta"); - DO_TEST(11, "' \" \\\na\n", - "echo \\' \\\" \\\\;echo\ta"); - DO_TEST(12, "' \" \\\\\n", - "echo \"'\" '\"' '\\'\"\\\\\""); + virTestCounterReset("echo-quote-removal-"); + DO_TEST("a b\n", "echo a \t b"); + DO_TEST("a \t b\n", "echo \"a \t b\""); + DO_TEST("a \t b\n", "echo 'a \t b'"); + DO_TEST("a \t b\n", "echo a\\ \\\t\\ b"); + DO_TEST("' \" \\;echo\ta\n", "echo", "'", "\"", "\\;echo\ta"); + DO_TEST("' \" ;echo a\n", "echo \\' \\\" \\;echo\ta"); + DO_TEST("' \" \\\na\n", "echo \\' \\\" \\\\;echo\ta"); + DO_TEST("' \" \\\\\n", "echo \"'\" '\"' '\\'\"\\\\\""); /* Tests of echo flags. */ DO_TEST_SCRIPT("echo-escaping", NULL, VIRSH_DEFAULT); - DO_TEST(13, "a A 0 + * ; . ' \" / ? = \n < > &\n", - "echo", "a", "A", "0", "+", "*", ";", ".", "'", "\"", "/", "?", - "=", " ", "\n", "<", ">", "&"); - DO_TEST(14, "a A 0 + '*' ';' . ''\\''' '\"' / '?' = ' ' '\n' '<' '>' '&'\n", - "echo", "--shell", "a", "A", "0", "+", "*", ";", ".", "'", "\"", - "/", "?", "=", " ", "\n", "<", ">", "&"); - DO_TEST(15, "a A 0 + * ; . ' " / ? = \n < > &\n", - "echo", "--xml", "a", "A", "0", "+", "*", ";", ".", "'", "\"", - "/", "?", "=", " ", "\n", "<", ">", "&"); + + virTestCounterReset("echo-escaping-"); + DO_TEST("a A 0 + * ; . ' \" / ? = \n < > &\n", "echo", "a", "A", "0", "+", "*", ";", ".", "'", "\"", "/", "?", "=", " ", "\n", "<", ">", "&"); + DO_TEST("a A 0 + '*' ';' . ''\\''' '\"' / '?' = ' ' '\n' '<' '>' '&'\n", "echo", "--shell", "a", "A", "0", "+", "*", ";", ".", "'", "\"", "/", "?", "=", " ", "\n", "<", ">", "&"); + DO_TEST("a A 0 + * ; . ' " / ? = \n < > &\n", "echo", "--xml", "a", "A", "0", "+", "*", ";", ".", "'", "\"", "/", "?", "=", " ", "\n", "<", ">", "&"); /* Tests of -- handling. */ - DO_TEST(25, "a\n", - "--", "echo", "--shell", "a"); - DO_TEST(26, "a\n", - "--", "echo", "a", "--shell"); - DO_TEST(27, "a --shell\n", - "--", "echo", "--", "a", "--shell"); - DO_TEST(28, "-- --shell a\n", - "echo", "--", "--", "--shell", "a"); - DO_TEST(29, "a\n", - "echo --s\\h'e'\"l\"l -- a"); - DO_TEST(30, "--shell a\n", - "echo \t '-'\"-\" \t --shell \t a"); + virTestCounterReset("dash-dash-argument-"); + DO_TEST("a\n", "--", "echo", "--shell", "a"); + DO_TEST("a\n", "--", "echo", "a", "--shell"); + DO_TEST("a --shell\n", "--", "echo", "--", "a", "--shell"); + DO_TEST("-- --shell a\n", "echo", "--", "--", "--shell", "a"); + DO_TEST("a\n", "echo --s\\h'e'\"l\"l -- a"); + DO_TEST("--shell a\n", "echo \t '-'\"-\" \t --shell \t a"); /* Tests of alias handling. */ DO_TEST_SCRIPT("echo-alias", NULL, VIRSH_DEFAULT); - DO_TEST(33, "hello\n", "echo", "--str", "hello"); + DO_TEST_FULL("echo-alias-argv", NULL, "hello\n", VIRSH_DEFAULT, "echo", "--str", "hello"); /* Tests of multiple commands. */ - DO_TEST(36, "a\nb\n", " echo a; echo b;"); - DO_TEST(37, "a\nb\n", "\necho a\n echo b\n"); - DO_TEST(38, "a\nb\n", "ec\\\nho a\n echo \\\n b;"); - DO_TEST(39, "a\n b\n", "\"ec\\\nho\" a\n echo \"\\\n b\";"); - DO_TEST(40, "a\n\\\n b\n", "ec\\\nho a\n echo '\\\n b';"); - DO_TEST(41, "a\n", "echo a # b"); - DO_TEST(42, "a\nc\n", "echo a #b\necho c"); - DO_TEST(43, "a\nc\n", "echo a # b\\\necho c"); - DO_TEST(44, "a # b\n", "echo a '#' b"); - DO_TEST(45, "a # b\n", "echo a \\# b"); - DO_TEST(46, "a\n", "#unbalanced; 'quotes\"\necho a # b"); - DO_TEST(47, "a\n", "\\# ignored;echo a\n'#also' ignored"); + virTestCounterReset("multiple-commands-"); + DO_TEST("a\nb\n", " echo a; echo b;"); + DO_TEST("a\nb\n", "\necho a\n echo b\n"); + DO_TEST("a\nb\n", "ec\\\nho a\n echo \\\n b;"); + DO_TEST("a\n b\n", "\"ec\\\nho\" a\n echo \"\\\n b\";"); + DO_TEST("a\n\\\n b\n", "ec\\\nho a\n echo '\\\n b';"); + DO_TEST("a\n", "echo a # b"); + DO_TEST("a\nc\n", "echo a #b\necho c"); + DO_TEST("a\nc\n", "echo a # b\\\necho c"); + DO_TEST("a # b\n", "echo a '#' b"); + DO_TEST("a # b\n", "echo a \\# b"); + DO_TEST("a\n", "#unbalanced; 'quotes\"\necho a # b"); + DO_TEST("a\n", "\\# ignored;echo a\n'#also' ignored"); /* test of splitting in vshStringToArray */ DO_TEST_SCRIPT("echo-split", NULL, VIRSH_DEFAULT, "-q");