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
|
.PHONY: clean
|
||||||
clean:
|
clean:
|
||||||
-rm -f ${TESTS}
|
-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 <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <fnmatch.h>
|
#include <fnmatch.h>
|
||||||
|
|
||||||
struct testcase {
|
struct testcase {
|
||||||
@ -210,13 +211,62 @@ flags_to_string(int flags)
|
|||||||
return result;
|
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
|
int
|
||||||
main(int argc, char *argv[])
|
main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
size_t i, n;
|
size_t i, n;
|
||||||
int flags, result, extra, errors;
|
int opt, flags, result, extra, errors;
|
||||||
struct testcase *t;
|
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]);
|
n = sizeof(testcases) / sizeof(testcases[0]);
|
||||||
errors = 0;
|
errors = 0;
|
||||||
printf("1..%zu\n", n);
|
printf("1..%zu\n", n);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user