]> git.kernelconcepts.de Git - karo-tx-redboot.git/blob - packages/io/fileio/v2_0/tests/fnmatch.c
Initial revision
[karo-tx-redboot.git] / packages / io / fileio / v2_0 / tests / fnmatch.c
1 //==========================================================================
2 //
3 //      fnmatch.c
4 //
5 //      Test fnmatch function
6 //
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 2007 Andrew Lunn <andrew.lunn@ascom.ch>
12 //
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
16 //
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
20 // for more details.
21 //
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
25 //
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
32 //
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
35 // -------------------------------------------
36 //####ECOSGPLCOPYRIGHTEND####
37 //==========================================================================
38 //#####DESCRIPTIONBEGIN####
39 //
40 // Author(s):           asl
41 // Contributors:        asl
42 // Date:                2007-01-27
43 // Purpose:             Test fnmatch function.
44 // Description:         //              
45 //
46 //####DESCRIPTIONEND####
47 //
48 //==========================================================================
49
50 #include <pkgconf/io_fileio.h>
51
52 #ifndef CYGPKG_FILEIO_FNMATCH
53 # define NA_MSG "FNMATCH function not available"
54 #endif
55
56 #include <cyg/infra/testcase.h>
57
58 #ifndef NA_MSG
59 #include <cyg/infra/cyg_type.h>
60 #include <cyg/infra/diag.h>
61
62 #include <fnmatch.h>
63
64 //==========================================================================
65 // main
66
67 int main( int argc, char **argv )
68 {
69   int i;
70   cyg_bool failed = false;
71   
72   struct 
73   {
74     const int result;
75     const int flags;
76     const char * string;
77     const char * pattern;
78   } test_case[] = {
79     { 0,           0, "abc", "abc" },               /*  0 */
80     { FNM_NOMATCH, 0, "cba", "abc" },
81     { 0,           0, "abc", "a*"  },
82     { FNM_NOMATCH, 0, "abc", "b*"  },
83     { 0,           0, "abc", "[abc]*" },
84     { FNM_NOMATCH, 0, "abc", "[def]*" },
85     { FNM_NOMATCH, 0, "abc", "*[def]*" },
86     { 0,           0, "a/b", "a/b" },
87     { FNM_NOMATCH, 0, "a/b", "a/a" },
88     { FNM_NOMATCH, 0, "a/b", "b/b" },
89
90     { 0,           0,            "a b", "a\\ b"},  /* 10 */
91     { FNM_NOMATCH, FNM_NOESCAPE, "a b", "a\\ b"},
92
93     { 0,           0,            "a/b", "a*b" },
94     { 0,           0,            "a/b", "a?b" },
95     { 0,           0,            "a/b", "a[/]b" },
96     { FNM_NOMATCH, FNM_PATHNAME, "a/b", "a*b"},
97     { FNM_NOMATCH, FNM_PATHNAME, "a/b", "a?b"},
98     { FNM_NOMATCH, FNM_PATHNAME, "a/b", "a[/]b"},
99     { 0,           FNM_PATHNAME, "a/b", "a/b"},
100
101     { 0,           0,          ".abc", "?abc" },
102     { 0,           0,          ".abc", "*abc" },  /* 20 */
103     { 0,           0,          ".abc", "[.]abc" },
104     { 0,           0,          ".abc", ".abc" },
105     { FNM_NOMATCH, FNM_PERIOD, ".abc", "?abc" },
106     { FNM_NOMATCH, FNM_PERIOD, ".abc", "*abc" },
107     { 0,           FNM_PERIOD, ".abc", "[.]abc" },       
108     { 0,           FNM_PERIOD, ".abc", ".abc" },
109
110     { 0,           0,                       "/.abc", "/?abc" },
111     { 0,           0,                       "/.abc", "/*abc" },
112     { 0,           0,                       "/.abc", "/[.]abc" },
113     { 0,           0,                       "/.abc", "/.abc" },  /* 30 */
114     { FNM_NOMATCH, FNM_PERIOD|FNM_PATHNAME, "/.abc", "/?abc" },
115     { FNM_NOMATCH, FNM_PERIOD|FNM_PATHNAME, "/.abc", "/*abc" },
116     { 0,           FNM_PERIOD|FNM_PATHNAME, "/.abc", "/[.]abc" },       
117     { 0,           FNM_PERIOD|FNM_PATHNAME, "/.abc", "/.abc" }
118   };
119   
120   for (i=0; i < CYG_NELEM(test_case); i++) {
121     if (test_case[i].result != 
122         fnmatch(test_case[i].pattern,
123                 test_case[i].string,
124                 test_case[i].flags)) {
125       diag_printf("<INFO>: test number %d failed\n", i);
126       failed = true;
127     }
128   }
129   
130   if (failed) {
131     CYG_TEST_FAIL_FINISH("fnmatch failed");
132   } else {
133     CYG_TEST_PASS_FINISH("fnmatch passed");
134   }
135 }
136
137 #else 
138
139 //==========================================================================
140 // main
141
142 int main( int argc, char **argv )
143 {
144     CYG_TEST_INIT();
145
146     CYG_TEST_NA(NA_MSG);
147 }
148
149 #endif
150
151 // -------------------------------------------------------------------------
152 // EOF fnmatch.c