@@ -39,6 +39,166 @@ static void normalize_argv_string(const char **var, const char *input)
39
39
die ("Bad value: %s\n" , input );
40
40
}
41
41
42
+ struct test_data {
43
+ const char * from ; /* input: transform from this ... */
44
+ const char * to ; /* output: ... to this. */
45
+ };
46
+
47
+ static int test_function (struct test_data * data , char * (* func )(char * input ),
48
+ const char * funcname )
49
+ {
50
+ int failed = 0 , i ;
51
+ char buffer [1024 ];
52
+ char * to ;
53
+
54
+ for (i = 0 ; data [i ].to ; i ++ ) {
55
+ if (!data [i ].from )
56
+ to = func (NULL );
57
+ else {
58
+ strcpy (buffer , data [i ].from );
59
+ to = func (buffer );
60
+ }
61
+ if (strcmp (to , data [i ].to )) {
62
+ error ("FAIL: %s(%s) => '%s' != '%s'\n" ,
63
+ funcname , data [i ].from , to , data [i ].to );
64
+ failed = 1 ;
65
+ }
66
+ }
67
+ return failed ;
68
+ }
69
+
70
+ static struct test_data basename_data [] = {
71
+ /* --- POSIX type paths --- */
72
+ { NULL , "." },
73
+ { "" , "." },
74
+ { "." , "." },
75
+ { ".." , ".." },
76
+ { "/" , "/" },
77
+ #if defined(__CYGWIN__ ) && !defined (NO_LIBGEN_H )
78
+ { "//" , "//" },
79
+ { "///" , "//" },
80
+ { "////" , "//" },
81
+ #else
82
+ { "//" , "/" },
83
+ { "///" , "/" },
84
+ { "////" , "/" },
85
+ #endif
86
+ { "usr" , "usr" },
87
+ { "/usr" , "usr" },
88
+ { "/usr/" , "usr" },
89
+ { "/usr//" , "usr" },
90
+ { "/usr/lib" , "lib" },
91
+ { "usr/lib" , "lib" },
92
+ { "usr/lib///" , "lib" },
93
+
94
+ #if defined(__MINGW32__ ) || defined (_MSC_VER )
95
+
96
+ /* --- win32 type paths --- */
97
+ { "\\usr" , "usr" },
98
+ { "\\usr\\" , "usr" },
99
+ { "\\usr\\\\" , "usr" },
100
+ { "\\usr\\lib" , "lib" },
101
+ { "usr\\lib" , "lib" },
102
+ { "usr\\lib\\\\\\" , "lib" },
103
+ { "C:/usr" , "usr" },
104
+ { "C:/usr" , "usr" },
105
+ { "C:/usr/" , "usr" },
106
+ { "C:/usr//" , "usr" },
107
+ { "C:/usr/lib" , "lib" },
108
+ { "C:usr/lib" , "lib" },
109
+ { "C:usr/lib///" , "lib" },
110
+ { "C:" , "." },
111
+ { "C:a" , "a" },
112
+ { "C:/" , "/" },
113
+ { "C:///" , "/" },
114
+ #if defined(NO_LIBGEN_H )
115
+ { "\\" , "\\" },
116
+ { "\\\\" , "\\" },
117
+ { "\\\\\\" , "\\" },
118
+ #else
119
+
120
+ /* win32 platform variations: */
121
+ #if defined(__MINGW32__ )
122
+ { "\\" , "/" },
123
+ { "\\\\" , "/" },
124
+ { "\\\\\\" , "/" },
125
+ #endif
126
+
127
+ #if defined(_MSC_VER )
128
+ { "\\" , "\\" },
129
+ { "\\\\" , "\\" },
130
+ { "\\\\\\" , "\\" },
131
+ #endif
132
+
133
+ #endif
134
+ #endif
135
+ { NULL , NULL }
136
+ };
137
+
138
+ static struct test_data dirname_data [] = {
139
+ /* --- POSIX type paths --- */
140
+ { NULL , "." },
141
+ { "" , "." },
142
+ { "." , "." },
143
+ { ".." , "." },
144
+ { "/" , "/" },
145
+ { "//" , "//" },
146
+ #if defined(__CYGWIN__ ) && !defined (NO_LIBGEN_H )
147
+ { "///" , "//" },
148
+ { "////" , "//" },
149
+ #else
150
+ { "///" , "/" },
151
+ { "////" , "/" },
152
+ #endif
153
+ { "usr" , "." },
154
+ { "/usr" , "/" },
155
+ { "/usr/" , "/" },
156
+ { "/usr//" , "/" },
157
+ { "/usr/lib" , "/usr" },
158
+ { "usr/lib" , "usr" },
159
+ { "usr/lib///" , "usr" },
160
+
161
+ #if defined(__MINGW32__ ) || defined (_MSC_VER )
162
+
163
+ /* --- win32 type paths --- */
164
+ { "\\" , "\\" },
165
+ { "\\\\" , "\\\\" },
166
+ { "\\usr" , "\\" },
167
+ { "\\usr\\" , "\\" },
168
+ { "\\usr\\\\" , "\\" },
169
+ { "\\usr\\lib" , "\\usr" },
170
+ { "usr\\lib" , "usr" },
171
+ { "usr\\lib\\\\\\" , "usr" },
172
+ { "C:a" , "C:." },
173
+ { "C:/" , "C:/" },
174
+ { "C:///" , "C:/" },
175
+ { "C:/usr" , "C:/" },
176
+ { "C:/usr/" , "C:/" },
177
+ { "C:/usr//" , "C:/" },
178
+ { "C:/usr/lib" , "C:/usr" },
179
+ { "C:usr/lib" , "C:usr" },
180
+ { "C:usr/lib///" , "C:usr" },
181
+ { "\\\\\\" , "\\" },
182
+ { "\\\\\\\\" , "\\" },
183
+ #if defined(NO_LIBGEN_H )
184
+ { "C:" , "C:." },
185
+ #else
186
+
187
+ /* win32 platform variations: */
188
+ #if defined(__MINGW32__ )
189
+ /* the following is clearly wrong ... */
190
+ { "C:" , "." },
191
+ #endif
192
+
193
+ #if defined(_MSC_VER )
194
+ { "C:" , "C:." },
195
+ #endif
196
+
197
+ #endif
198
+ #endif
199
+ { NULL , NULL }
200
+ };
201
+
42
202
int main (int argc , char * * argv )
43
203
{
44
204
if (argc == 3 && !strcmp (argv [1 ], "normalize_path_copy" )) {
@@ -133,6 +293,12 @@ int main(int argc, char **argv)
133
293
return 0 ;
134
294
}
135
295
296
+ if (argc == 2 && !strcmp (argv [1 ], "basename" ))
297
+ return test_function (basename_data , basename , argv [1 ]);
298
+
299
+ if (argc == 2 && !strcmp (argv [1 ], "dirname" ))
300
+ return test_function (dirname_data , dirname , argv [1 ]);
301
+
136
302
fprintf (stderr , "%s: unknown function name: %s\n" , argv [0 ],
137
303
argv [1 ] ? argv [1 ] : "(there was none)" );
138
304
return 1 ;
0 commit comments