Generate some tests for sh's case command from the fnmatch tests.
I'm committing the generated files because I don't like a build dependency for the sh(1) tests, and they are small and will not change much.
This commit is contained in:
parent
e9a796d715
commit
3c55249664
106
tools/regression/bin/sh/builtins/case2.0
Normal file
106
tools/regression/bin/sh/builtins/case2.0
Normal file
@ -0,0 +1,106 @@
|
||||
# Generated by ./test-fnmatch -s 1, do not edit.
|
||||
# $FreeBSD$
|
||||
failures=
|
||||
failed() { printf '%s\n' "Failed: $1 '$2' '$3'"; failures=x$failures; }
|
||||
testmatch() { eval "case \$2 in ''$1) ;; *) failed testmatch \"\$@\";; esac"; }
|
||||
testnomatch() { eval "case \$2 in ''$1) failed testnomatch \"\$@\";; esac"; }
|
||||
testmatch '' ''
|
||||
testmatch 'a' 'a'
|
||||
testnomatch 'a' 'b'
|
||||
testnomatch 'a' 'A'
|
||||
testmatch '*' 'a'
|
||||
testmatch '*' 'aa'
|
||||
testmatch '*a' 'a'
|
||||
testnomatch '*a' 'b'
|
||||
testnomatch '*a*' 'b'
|
||||
testmatch '*a*b*' 'ab'
|
||||
testmatch '*a*b*' 'qaqbq'
|
||||
testmatch '*a*bb*' 'qaqbqbbq'
|
||||
testmatch '*a*bc*' 'qaqbqbcq'
|
||||
testmatch '*a*bb*' 'qaqbqbb'
|
||||
testmatch '*a*bc*' 'qaqbqbc'
|
||||
testmatch '*a*bb' 'qaqbqbb'
|
||||
testmatch '*a*bc' 'qaqbqbc'
|
||||
testnomatch '*a*bb' 'qaqbqbbq'
|
||||
testnomatch '*a*bc' 'qaqbqbcq'
|
||||
testnomatch '*a*a*a*a*a*a*a*a*a*a*' 'aaaaaaaaa'
|
||||
testmatch '*a*a*a*a*a*a*a*a*a*a*' 'aaaaaaaaaa'
|
||||
testmatch '*a*a*a*a*a*a*a*a*a*a*' 'aaaaaaaaaaa'
|
||||
testnomatch '.*.*.*.*.*.*.*.*.*.*' '.........'
|
||||
testmatch '.*.*.*.*.*.*.*.*.*.*' '..........'
|
||||
testmatch '.*.*.*.*.*.*.*.*.*.*' '...........'
|
||||
testnomatch '*?*?*?*?*?*?*?*?*?*?*' '123456789'
|
||||
testnomatch '??????????*' '123456789'
|
||||
testnomatch '*??????????' '123456789'
|
||||
testmatch '*?*?*?*?*?*?*?*?*?*?*' '1234567890'
|
||||
testmatch '??????????*' '1234567890'
|
||||
testmatch '*??????????' '1234567890'
|
||||
testmatch '*?*?*?*?*?*?*?*?*?*?*' '12345678901'
|
||||
testmatch '??????????*' '12345678901'
|
||||
testmatch '*??????????' '12345678901'
|
||||
testmatch '[x]' 'x'
|
||||
testmatch '[*]' '*'
|
||||
testmatch '[?]' '?'
|
||||
testmatch '[' '['
|
||||
testmatch '[[]' '['
|
||||
testnomatch '[[]' 'x'
|
||||
testnomatch '[*]' ''
|
||||
testnomatch '[*]' 'x'
|
||||
testnomatch '[?]' 'x'
|
||||
testmatch '*[*]*' 'foo*foo'
|
||||
testnomatch '*[*]*' 'foo'
|
||||
testmatch '[0-9]' '0'
|
||||
testmatch '[0-9]' '5'
|
||||
testmatch '[0-9]' '9'
|
||||
testnomatch '[0-9]' '/'
|
||||
testnomatch '[0-9]' ':'
|
||||
testnomatch '[0-9]' '*'
|
||||
testnomatch '[!0-9]' '0'
|
||||
testnomatch '[!0-9]' '5'
|
||||
testnomatch '[!0-9]' '9'
|
||||
testmatch '[!0-9]' '/'
|
||||
testmatch '[!0-9]' ':'
|
||||
testmatch '[!0-9]' '*'
|
||||
testmatch '*[0-9]' 'a0'
|
||||
testmatch '*[0-9]' 'a5'
|
||||
testmatch '*[0-9]' 'a9'
|
||||
testnomatch '*[0-9]' 'a/'
|
||||
testnomatch '*[0-9]' 'a:'
|
||||
testnomatch '*[0-9]' 'a*'
|
||||
testnomatch '*[!0-9]' 'a0'
|
||||
testnomatch '*[!0-9]' 'a5'
|
||||
testnomatch '*[!0-9]' 'a9'
|
||||
testmatch '*[!0-9]' 'a/'
|
||||
testmatch '*[!0-9]' 'a:'
|
||||
testmatch '*[!0-9]' 'a*'
|
||||
testmatch '*[0-9]' 'a00'
|
||||
testmatch '*[0-9]' 'a55'
|
||||
testmatch '*[0-9]' 'a99'
|
||||
testmatch '*[0-9]' 'a0a0'
|
||||
testmatch '*[0-9]' 'a5a5'
|
||||
testmatch '*[0-9]' 'a9a9'
|
||||
testmatch '\*' '*'
|
||||
testmatch '\?' '?'
|
||||
testmatch '\[x]' '[x]'
|
||||
testmatch '\[' '['
|
||||
testmatch '\\' '\'
|
||||
testmatch '*\**' 'foo*foo'
|
||||
testnomatch '*\**' 'foo'
|
||||
testmatch '*\\*' 'foo\foo'
|
||||
testnomatch '*\\*' 'foo'
|
||||
testmatch '\(' '('
|
||||
testmatch '\a' 'a'
|
||||
testnomatch '\*' 'a'
|
||||
testnomatch '\?' 'a'
|
||||
testnomatch '\*' '\*'
|
||||
testnomatch '\?' '\?'
|
||||
testnomatch '\[x]' '\[x]'
|
||||
testnomatch '\[x]' '\x'
|
||||
testnomatch '\[' '\['
|
||||
testnomatch '\(' '\('
|
||||
testnomatch '\a' '\a'
|
||||
testmatch '.*' '.'
|
||||
testmatch '.*' '..'
|
||||
testmatch '.*' '.a'
|
||||
testmatch 'a*' 'a.'
|
||||
[ -z "$failures" ]
|
95
tools/regression/bin/sh/builtins/case3.0
Normal file
95
tools/regression/bin/sh/builtins/case3.0
Normal file
@ -0,0 +1,95 @@
|
||||
# Generated by ./test-fnmatch -s 2, do not edit.
|
||||
# $FreeBSD$
|
||||
failures=
|
||||
failed() { printf '%s\n' "Failed: $1 '$2' '$3'"; failures=x$failures; }
|
||||
# We do not treat a backslash specially in this case,
|
||||
# but this is not the case in all shells.
|
||||
netestmatch() { case $2 in $1) ;; *) failed netestmatch "$@";; esac; }
|
||||
netestnomatch() { case $2 in $1) failed netestnomatch "$@";; esac; }
|
||||
netestmatch '' ''
|
||||
netestmatch 'a' 'a'
|
||||
netestnomatch 'a' 'b'
|
||||
netestnomatch 'a' 'A'
|
||||
netestmatch '*' 'a'
|
||||
netestmatch '*' 'aa'
|
||||
netestmatch '*a' 'a'
|
||||
netestnomatch '*a' 'b'
|
||||
netestnomatch '*a*' 'b'
|
||||
netestmatch '*a*b*' 'ab'
|
||||
netestmatch '*a*b*' 'qaqbq'
|
||||
netestmatch '*a*bb*' 'qaqbqbbq'
|
||||
netestmatch '*a*bc*' 'qaqbqbcq'
|
||||
netestmatch '*a*bb*' 'qaqbqbb'
|
||||
netestmatch '*a*bc*' 'qaqbqbc'
|
||||
netestmatch '*a*bb' 'qaqbqbb'
|
||||
netestmatch '*a*bc' 'qaqbqbc'
|
||||
netestnomatch '*a*bb' 'qaqbqbbq'
|
||||
netestnomatch '*a*bc' 'qaqbqbcq'
|
||||
netestnomatch '*a*a*a*a*a*a*a*a*a*a*' 'aaaaaaaaa'
|
||||
netestmatch '*a*a*a*a*a*a*a*a*a*a*' 'aaaaaaaaaa'
|
||||
netestmatch '*a*a*a*a*a*a*a*a*a*a*' 'aaaaaaaaaaa'
|
||||
netestnomatch '.*.*.*.*.*.*.*.*.*.*' '.........'
|
||||
netestmatch '.*.*.*.*.*.*.*.*.*.*' '..........'
|
||||
netestmatch '.*.*.*.*.*.*.*.*.*.*' '...........'
|
||||
netestnomatch '*?*?*?*?*?*?*?*?*?*?*' '123456789'
|
||||
netestnomatch '??????????*' '123456789'
|
||||
netestnomatch '*??????????' '123456789'
|
||||
netestmatch '*?*?*?*?*?*?*?*?*?*?*' '1234567890'
|
||||
netestmatch '??????????*' '1234567890'
|
||||
netestmatch '*??????????' '1234567890'
|
||||
netestmatch '*?*?*?*?*?*?*?*?*?*?*' '12345678901'
|
||||
netestmatch '??????????*' '12345678901'
|
||||
netestmatch '*??????????' '12345678901'
|
||||
netestmatch '[x]' 'x'
|
||||
netestmatch '[*]' '*'
|
||||
netestmatch '[?]' '?'
|
||||
netestmatch '[' '['
|
||||
netestmatch '[[]' '['
|
||||
netestnomatch '[[]' 'x'
|
||||
netestnomatch '[*]' ''
|
||||
netestnomatch '[*]' 'x'
|
||||
netestnomatch '[?]' 'x'
|
||||
netestmatch '*[*]*' 'foo*foo'
|
||||
netestnomatch '*[*]*' 'foo'
|
||||
netestmatch '[0-9]' '0'
|
||||
netestmatch '[0-9]' '5'
|
||||
netestmatch '[0-9]' '9'
|
||||
netestnomatch '[0-9]' '/'
|
||||
netestnomatch '[0-9]' ':'
|
||||
netestnomatch '[0-9]' '*'
|
||||
netestnomatch '[!0-9]' '0'
|
||||
netestnomatch '[!0-9]' '5'
|
||||
netestnomatch '[!0-9]' '9'
|
||||
netestmatch '[!0-9]' '/'
|
||||
netestmatch '[!0-9]' ':'
|
||||
netestmatch '[!0-9]' '*'
|
||||
netestmatch '*[0-9]' 'a0'
|
||||
netestmatch '*[0-9]' 'a5'
|
||||
netestmatch '*[0-9]' 'a9'
|
||||
netestnomatch '*[0-9]' 'a/'
|
||||
netestnomatch '*[0-9]' 'a:'
|
||||
netestnomatch '*[0-9]' 'a*'
|
||||
netestnomatch '*[!0-9]' 'a0'
|
||||
netestnomatch '*[!0-9]' 'a5'
|
||||
netestnomatch '*[!0-9]' 'a9'
|
||||
netestmatch '*[!0-9]' 'a/'
|
||||
netestmatch '*[!0-9]' 'a:'
|
||||
netestmatch '*[!0-9]' 'a*'
|
||||
netestmatch '*[0-9]' 'a00'
|
||||
netestmatch '*[0-9]' 'a55'
|
||||
netestmatch '*[0-9]' 'a99'
|
||||
netestmatch '*[0-9]' 'a0a0'
|
||||
netestmatch '*[0-9]' 'a5a5'
|
||||
netestmatch '*[0-9]' 'a9a9'
|
||||
netestmatch '\*' '\*'
|
||||
netestmatch '\?' '\?'
|
||||
netestmatch '\' '\'
|
||||
netestnomatch '\\' '\'
|
||||
netestmatch '\\' '\\'
|
||||
netestmatch '*\*' 'foo\foo'
|
||||
netestnomatch '*\*' 'foo'
|
||||
netestmatch '.*' '.'
|
||||
netestmatch '.*' '..'
|
||||
netestmatch '.*' '.a'
|
||||
netestmatch 'a*' 'a.'
|
||||
[ -z "$failures" ]
|
@ -9,3 +9,7 @@ tests: ${TESTS}
|
||||
.PHONY: clean
|
||||
clean:
|
||||
-rm -f ${TESTS}
|
||||
|
||||
sh-tests: test-fnmatch
|
||||
./test-fnmatch -s 1 >../../../bin/sh/builtins/case2.0
|
||||
./test-fnmatch -s 2 >../../../bin/sh/builtins/case3.0
|
||||
|
@ -31,6 +31,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <fnmatch.h>
|
||||
|
||||
struct testcase {
|
||||
@ -210,13 +211,62 @@ flags_to_string(int flags)
|
||||
return result;
|
||||
}
|
||||
|
||||
static int
|
||||
write_sh_tests(const char *progname, int num)
|
||||
{
|
||||
size_t i, n;
|
||||
struct testcase *t;
|
||||
|
||||
printf("# Generated by %s -s %d, do not edit.\n", progname, num);
|
||||
printf("# $" "FreeBSD$\n");
|
||||
printf("failures=\n");
|
||||
printf("failed() { printf '%%s\\n' \"Failed: $1 '$2' '$3'\"; failures=x$failures; }\n");
|
||||
if (num == 1) {
|
||||
printf("testmatch() { eval \"case \\$2 in ''$1) ;; *) failed testmatch \\\"\\$@\\\";; esac\"; }\n");
|
||||
printf("testnomatch() { eval \"case \\$2 in ''$1) failed testnomatch \\\"\\$@\\\";; esac\"; }\n");
|
||||
} else if (num == 2) {
|
||||
printf("# We do not treat a backslash specially in this case,\n");
|
||||
printf("# but this is not the case in all shells.\n");
|
||||
printf("netestmatch() { case $2 in $1) ;; *) failed netestmatch \"$@\";; esac; }\n");
|
||||
printf("netestnomatch() { case $2 in $1) failed netestnomatch \"$@\";; esac; }\n");
|
||||
}
|
||||
n = sizeof(testcases) / sizeof(testcases[0]);
|
||||
for (i = 0; i < n; i++) {
|
||||
t = &testcases[i];
|
||||
if (strchr(t->pattern, '\'') != NULL ||
|
||||
strchr(t->string, '\'') != NULL)
|
||||
continue;
|
||||
if (num == 1 && t->flags == 0)
|
||||
printf("test%smatch '%s' '%s'\n",
|
||||
t->result == FNM_NOMATCH ? "no" : "",
|
||||
t->pattern, t->string);
|
||||
if (num == 2 && (t->flags == FNM_NOESCAPE ||
|
||||
(t->flags == 0 && strchr(t->pattern, '\\') == NULL)))
|
||||
printf("netest%smatch '%s' '%s'\n",
|
||||
t->result == FNM_NOMATCH ? "no" : "",
|
||||
t->pattern, t->string);
|
||||
}
|
||||
printf("[ -z \"$failures\" ]\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
size_t i, n;
|
||||
int flags, result, extra, errors;
|
||||
int opt, flags, result, extra, errors;
|
||||
struct testcase *t;
|
||||
|
||||
while ((opt = getopt(argc, argv, "s:")) != -1) {
|
||||
switch (opt) {
|
||||
case 's':
|
||||
return (write_sh_tests(argv[0], atoi(optarg)));
|
||||
default:
|
||||
fprintf(stderr, "usage: %s [-s num]\n", argv[0]);
|
||||
fprintf(stderr, "-s option writes tests for sh(1), num is 1 or 2\n");
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
n = sizeof(testcases) / sizeof(testcases[0]);
|
||||
errors = 0;
|
||||
printf("1..%zu\n", n);
|
||||
|
Loading…
x
Reference in New Issue
Block a user