]>
Commit | Line | Data |
---|---|---|
3f62b69a | 1 | #include <stdlib.h> |
28f540f4 RM |
2 | #include <stdio.h> |
3 | #include "fnmatch.h" | |
4 | ||
3f62b69a UD |
5 | struct { |
6 | const char *name; | |
7 | const char *pattern; | |
8 | int flags; | |
9 | int expected; | |
10 | } tests[] = { | |
11 | { "lib", "*LIB*", FNM_PERIOD, FNM_NOMATCH }, | |
12 | { "lib", "*LIB*", FNM_CASEFOLD|FNM_PERIOD, 0 }, | |
13 | { "a/b", "a[/]b", 0, 0 }, | |
14 | { "a/b", "a[/]b", FNM_PATHNAME, FNM_NOMATCH }, | |
15 | { "a/b", "[a-z]/[a-z]", 0, 0 }, | |
47924894 UD |
16 | { "a/b", "*", FNM_PATHNAME, FNM_NOMATCH }, |
17 | { "a/b", "*[/]b", FNM_PATHNAME, FNM_NOMATCH }, | |
18 | { "a/b", "*[b]", FNM_PATHNAME, FNM_NOMATCH }, | |
d8aaef00 UD |
19 | { "a/b", "[*]/b", 0, FNM_NOMATCH }, |
20 | { "*/b", "[*]/b", 0, 0 }, | |
21 | { "a/b", "[?]/b", 0, FNM_NOMATCH }, | |
22 | { "?/b", "[?]/b", 0, 0 }, | |
23 | { "a/b", "[[a]/b", 0, 0 }, | |
24 | { "[/b", "[[a]/b", 0, 0 }, | |
25 | { "a/b", "\\*/b", 0, FNM_NOMATCH }, | |
26 | { "*/b", "\\*/b", 0, 0 }, | |
27 | { "a/b", "\\?/b", 0, FNM_NOMATCH }, | |
28 | { "?/b", "\\?/b", 0, 0 }, | |
794c3ad3 | 29 | { "[/b", "[/b", 0, 0 }, |
d8aaef00 | 30 | { "[/b", "\\[/b", 0, 0 }, |
c7e41631 UD |
31 | { "aa/b", "?""?/b", 0, 0 }, |
32 | { "aa/b", "?""?""?b", 0, 0 }, | |
33 | { "aa/b", "?""?""?b", FNM_PATHNAME, FNM_NOMATCH }, | |
d8aaef00 UD |
34 | { ".a/b", "?a/b", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, |
35 | { "a/.b", "a/?b", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, | |
36 | { ".a/b", "*a/b", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, | |
37 | { "a/.b", "a/*b", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, | |
38 | { ".a/b", "[.]a/b", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, | |
39 | { "a/.b", "a/[.]b", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, | |
40 | { "a/b", "*/?", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
41 | { "a/b", "?/*", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
42 | { ".a/b", ".*/?", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
43 | { "a/.b", "*/.?", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
44 | { "a/.b", "*/*", FNM_PATHNAME|FNM_PERIOD, FNM_NOMATCH }, | |
45 | { "a/.b", "*?*/*", FNM_PERIOD, 0 }, | |
46 | { "a./b", "*[.]/b", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
47 | { "a/b", "*[[:alpha:]]/*[[:alnum:]]", FNM_PATHNAME, 0 }, | |
48 | { "a/b", "*[![:digit:]]*/[![:d-d]", FNM_PATHNAME, 0 }, | |
b6a7609d | 49 | { "a/[", "*[![:digit:]]*/[[:d-d]", FNM_PATHNAME, 0 }, |
d8aaef00 | 50 | { "a/[", "*[![:digit:]]*/[![:d-d]", FNM_PATHNAME, FNM_NOMATCH }, |
66f93c2d UD |
51 | { "a.b", "a?b", FNM_PATHNAME|FNM_PERIOD, 0 }, |
52 | { "a.b", "a*b", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
53 | { "a.b", "a[.]b", FNM_PATHNAME|FNM_PERIOD, 0 }, | |
47924894 UD |
54 | { "a/b", "*a*", FNM_PATHNAME|FNM_LEADING_DIR, 0 }, |
55 | { "ab/c", "*a?", FNM_PATHNAME|FNM_LEADING_DIR, 0 }, | |
56 | { "ab/c", "a?", FNM_PATHNAME|FNM_LEADING_DIR, 0 }, | |
955994e1 UD |
57 | { "a/b", "?*/?", FNM_PATHNAME, 0 }, |
58 | { "/b", "*/?", FNM_PATHNAME, 0 }, | |
59 | { "/b", "**/?", FNM_PATHNAME, 0 }, | |
3f62b69a UD |
60 | }; |
61 | ||
28f540f4 | 62 | int |
3f62b69a | 63 | main (void) |
28f540f4 | 64 | { |
3f62b69a UD |
65 | size_t i; |
66 | int errors = 0; | |
67 | ||
68 | for (i = 0; i < sizeof (tests) / sizeof (*tests); i++) | |
69 | { | |
70 | int match; | |
71 | ||
72 | match = fnmatch (tests[i].pattern, tests[i].name, tests[i].flags); | |
47924894 UD |
73 | |
74 | printf ("[%2zd] %s %s %s -> %s\n", i, tests[i].pattern, | |
75 | match == 0 ? "matches" : "does not match", | |
76 | tests[i].name, | |
77 | match != tests[i].expected ? "FAIL" : "OK"); | |
78 | ||
3f62b69a | 79 | if (match != tests[i].expected) |
47924894 | 80 | ++errors ; |
3f62b69a UD |
81 | } |
82 | ||
bf4de8f3 | 83 | return errors != 0; |
28f540f4 | 84 | } |