]> git.ipfire.org Git - thirdparty/glibc.git/blame - posix/tst-fnmatch.input
Update copyright dates with scripts/update-copyrights
[thirdparty/glibc.git] / posix / tst-fnmatch.input
CommitLineData
83b1b6d8 1# Tests for fnmatch.
2b778ceb 2# Copyright (C) 2000-2021 Free Software Foundation, Inc.
83b1b6d8
UD
3# This file is part of the GNU C Library.
4# Contributes by Ulrich Drepper <drepper@redhat.com>.
5#
41bdb6e2 6
83b1b6d8 7# The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
8# modify it under the terms of the GNU Lesser General Public
9# License as published by the Free Software Foundation; either
10# version 2.1 of the License, or (at your option) any later version.
11
83b1b6d8
UD
12# The GNU C Library is distributed in the hope that it will be useful,
13# but WITHOUT ANY WARRANTY; without even the implied warranty of
14# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2
AJ
15# Lesser General Public License for more details.
16
17# You should have received a copy of the GNU Lesser General Public
59ba27a6 18# License along with the GNU C Library; if not, see
5a82c748 19# <https://www.gnu.org/licenses/>.
83b1b6d8
UD
20
21
22# Derived from the IEEE 2003.2 text. The standard only contains some
23# wording describing the situations to be tested. It does not specify
24# any specific tests. I.e., the tests below are in no case sufficient.
25# They are hopefully necessary, though.
7cd7d36f
CD
26#
27# See:
28#
29# http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap09.html
30#
31# > RE Bracket Expression
32# >
33# > Range expressions are, historically, an integral part of REs.
34# > However, the requirements of "natural language behavior" and
35# > portability do conflict. In the POSIX locale, ranges must be treated
36# > according to the collating sequence and include such characters that
37# > fall within the range based on that collating sequence, regardless
38# > of character values. In other locales, ranges have unspecified behavior.
39# > ...
40# > The current standard leaves unspecified the behavior of a range
41# > expression outside the POSIX locale. This makes it clearer that
42# > conforming applications should avoid range expressions outside the
43# > POSIX locale, and it allows implementations and compatible user-mode
44# > matchers to interpret range expressions using native order, CEO,
45# > collation sequence, or other, more advanced techniques. The concerns
46# > which led to this change were raised in IEEE PASC interpretation
47# > 1003.2 #43 and others, and related to ambiguities in the
48# > specification of how multi-character collating elements should be
49# > handled in range expressions. These ambiguities had led to multiple
50# > interpretations of the specification, in conflicting ways, which led
51# > to varying implementations. As noted above, efforts were made to
52# > resolve the differences, but no solution has been found that would
53# > be specific enough to allow for portable software while not
54# > invalidating existing implementations.
55#
56# Therefore, using [a-z] does not make much sense except in the C/POSIX locale.
57# The new iso14651_t1_common lists upper case and lower case Latin characters
58# in a different order than the old one which causes surprising results
59# for example in the de_DE locale: [a-z] now includes A because A comes
60# after a in iso14651_t1_common but does not include Z because that comes
61# after z in iso14651_t1_common.
62#
63# This lead to several bugs and problems with user scripts that do not
64# expect [a-z] to match uppercase characters.
65#
66# See the following bugs:
67# https://sourceware.org/bugzilla/show_bug.cgi?id=23393
68# https://sourceware.org/bugzilla/show_bug.cgi?id=23420
69#
70# No consensus exists on how best to handle the changes so the
71# iso14651_t1_common collation element order (CEO) has been changed to
72# deinterlace the a-z and A-Z regions.
73#
74# With the deinterlacing commit ac3a3b4b0d561d776b60317d6a926050c8541655
75# could be reverted to re-test the correct non-interleaved expectations.
76#
77# Please note that despite the region being deinterlaced, the ordering
78# of collation remains the same. In glibc we implement CEO and because of
79# that we can reorder the elements to reorder ranges without impacting
80# collation which depends on weights. The collation element ordering
81# could have been changed to include just a-z, A-Z, and 0-9 in three
82# distinct blocks, but this needs more discussion by the community.
83b1b6d8
UD
83
84# B.6 004(C)
85C "!#%+,-./01234567889" "!#%+,-./01234567889" 0
86C ":;=@ABCDEFGHIJKLMNO" ":;=@ABCDEFGHIJKLMNO" 0
87C "PQRSTUVWXYZ]abcdefg" "PQRSTUVWXYZ]abcdefg" 0
88C "hijklmnopqrstuvwxyz" "hijklmnopqrstuvwxyz" 0
89C "^_{}~" "^_{}~" 0
90
91# B.6 005(C)
92C "\"$&'()" "\\\"\\$\\&\\'\\(\\)" 0
93C "*?[\\`|" "\\*\\?\\[\\\\\\`\\|" 0
94C "<>" "\\<\\>" 0
95
96# B.6 006(C)
97C "?*[" "[?*[][?*[][?*[]" 0
98C "a/b" "?/b" 0
99
100# B.6 007(C)
101C "a/b" "a?b" 0
102C "a/b" "a/?" 0
83b1b6d8
UD
103C "aa/b" "?/b" NOMATCH
104C "aa/b" "a?b" NOMATCH
105C "a/bb" "a/?" NOMATCH
106
107# B.6 009(C)
108C "abc" "[abc]" NOMATCH
109C "x" "[abc]" NOMATCH
110C "a" "[abc]" 0
111C "[" "[[abc]" 0
112C "a" "[][abc]" 0
113C "a]" "[]a]]" 0
114
115# B.6 010(C)
ab9afc21 116C "xyz" "[!abc]" NOMATCH
83b1b6d8
UD
117C "x" "[!abc]" 0
118C "a" "[!abc]" NOMATCH
119
120# B.6 011(C)
121C "]" "[][abc]" 0
122C "abc]" "[][abc]" NOMATCH
123C "[]abc" "[][]abc" NOMATCH
794c3ad3 124C "]" "[!]]" NOMATCH
83b1b6d8 125C "aa]" "[!]a]" NOMATCH
794c3ad3
UD
126C "]" "[!a]" 0
127C "]]" "[!a]]" 0
83b1b6d8
UD
128
129# B.6 012(C)
f3e29a1a
UD
130C "a" "[[.a.]]" 0
131C "-" "[[.-.]]" 0
132C "-" "[[.-.][.].]]" 0
133C "-" "[[.].][.-.]]" 0
134C "-" "[[.-.][=u=]]" 0
135C "-" "[[.-.][:alpha:]]" 0
136C "a" "[![.a.]]" NOMATCH
83b1b6d8
UD
137
138# B.6 013(C)
f3e29a1a
UD
139C "a" "[[.b.]]" NOMATCH
140C "a" "[[.b.][.c.]]" NOMATCH
141C "a" "[[.b.][=b=]]" NOMATCH
83b1b6d8 142
83b1b6d8
UD
143
144# B.6 015(C)
ecce00a9
UD
145C "a" "[[=a=]]" 0
146C "b" "[[=a=]b]" 0
147C "b" "[[=a=][=b=]]" 0
f3e29a1a
UD
148C "a" "[[=a=][=b=]]" 0
149C "a" "[[=a=][.b.]]" 0
150C "a" "[[=a=][:digit:]]" 0
83b1b6d8
UD
151
152# B.6 016(C)
ecce00a9
UD
153C "=" "[[=a=]b]" NOMATCH
154C "]" "[[=a=]b]" NOMATCH
f3e29a1a
UD
155C "a" "[[=b=][=c=]]" NOMATCH
156C "a" "[[=b=][.].]]" NOMATCH
157C "a" "[[=b=][:digit:]]" NOMATCH
83b1b6d8
UD
158
159# B.6 017(C)
ab9afc21
UD
160C "a" "[[:alnum:]]" 0
161C "a" "[![:alnum:]]" NOMATCH
162C "-" "[[:alnum:]]" NOMATCH
163C "a]a" "[[:alnum:]]a" NOMATCH
164C "-" "[[:alnum:]-]" 0
165C "aa" "[[:alnum:]]a" 0
166C "-" "[![:alnum:]]" 0
167C "]" "[!][:alnum:]]" NOMATCH
168C "[" "[![:alnum:][]" NOMATCH
169C "a" "[[:alnum:]]" 0
170C "b" "[[:alnum:]]" 0
171C "c" "[[:alnum:]]" 0
172C "d" "[[:alnum:]]" 0
173C "e" "[[:alnum:]]" 0
174C "f" "[[:alnum:]]" 0
175C "g" "[[:alnum:]]" 0
176C "h" "[[:alnum:]]" 0
177C "i" "[[:alnum:]]" 0
178C "j" "[[:alnum:]]" 0
179C "k" "[[:alnum:]]" 0
180C "l" "[[:alnum:]]" 0
181C "m" "[[:alnum:]]" 0
182C "n" "[[:alnum:]]" 0
183C "o" "[[:alnum:]]" 0
184C "p" "[[:alnum:]]" 0
185C "q" "[[:alnum:]]" 0
186C "r" "[[:alnum:]]" 0
187C "s" "[[:alnum:]]" 0
188C "t" "[[:alnum:]]" 0
189C "u" "[[:alnum:]]" 0
190C "v" "[[:alnum:]]" 0
191C "w" "[[:alnum:]]" 0
192C "x" "[[:alnum:]]" 0
193C "y" "[[:alnum:]]" 0
194C "z" "[[:alnum:]]" 0
195C "A" "[[:alnum:]]" 0
196C "B" "[[:alnum:]]" 0
197C "C" "[[:alnum:]]" 0
198C "D" "[[:alnum:]]" 0
199C "E" "[[:alnum:]]" 0
200C "F" "[[:alnum:]]" 0
201C "G" "[[:alnum:]]" 0
202C "H" "[[:alnum:]]" 0
203C "I" "[[:alnum:]]" 0
204C "J" "[[:alnum:]]" 0
205C "K" "[[:alnum:]]" 0
206C "L" "[[:alnum:]]" 0
207C "M" "[[:alnum:]]" 0
208C "N" "[[:alnum:]]" 0
209C "O" "[[:alnum:]]" 0
210C "P" "[[:alnum:]]" 0
211C "Q" "[[:alnum:]]" 0
212C "R" "[[:alnum:]]" 0
213C "S" "[[:alnum:]]" 0
214C "T" "[[:alnum:]]" 0
215C "U" "[[:alnum:]]" 0
216C "V" "[[:alnum:]]" 0
217C "W" "[[:alnum:]]" 0
218C "X" "[[:alnum:]]" 0
219C "Y" "[[:alnum:]]" 0
220C "Z" "[[:alnum:]]" 0
221C "0" "[[:alnum:]]" 0
222C "1" "[[:alnum:]]" 0
223C "2" "[[:alnum:]]" 0
224C "3" "[[:alnum:]]" 0
225C "4" "[[:alnum:]]" 0
226C "5" "[[:alnum:]]" 0
227C "6" "[[:alnum:]]" 0
228C "7" "[[:alnum:]]" 0
229C "8" "[[:alnum:]]" 0
230C "9" "[[:alnum:]]" 0
231C "!" "[[:alnum:]]" NOMATCH
232C "#" "[[:alnum:]]" NOMATCH
233C "%" "[[:alnum:]]" NOMATCH
234C "+" "[[:alnum:]]" NOMATCH
235C "," "[[:alnum:]]" NOMATCH
236C "-" "[[:alnum:]]" NOMATCH
237C "." "[[:alnum:]]" NOMATCH
238C "/" "[[:alnum:]]" NOMATCH
239C ":" "[[:alnum:]]" NOMATCH
240C ";" "[[:alnum:]]" NOMATCH
241C "=" "[[:alnum:]]" NOMATCH
242C "@" "[[:alnum:]]" NOMATCH
243C "[" "[[:alnum:]]" NOMATCH
244C "\\" "[[:alnum:]]" NOMATCH
245C "]" "[[:alnum:]]" NOMATCH
246C "^" "[[:alnum:]]" NOMATCH
247C "_" "[[:alnum:]]" NOMATCH
248C "{" "[[:alnum:]]" NOMATCH
249C "}" "[[:alnum:]]" NOMATCH
250C "~" "[[:alnum:]]" NOMATCH
251C "\"" "[[:alnum:]]" NOMATCH
252C "$" "[[:alnum:]]" NOMATCH
253C "&" "[[:alnum:]]" NOMATCH
254C "'" "[[:alnum:]]" NOMATCH
255C "(" "[[:alnum:]]" NOMATCH
256C ")" "[[:alnum:]]" NOMATCH
257C "*" "[[:alnum:]]" NOMATCH
258C "?" "[[:alnum:]]" NOMATCH
259C "`" "[[:alnum:]]" NOMATCH
260C "|" "[[:alnum:]]" NOMATCH
261C "<" "[[:alnum:]]" NOMATCH
262C ">" "[[:alnum:]]" NOMATCH
263C "\t" "[[:cntrl:]]" 0
264C "t" "[[:cntrl:]]" NOMATCH
265C "t" "[[:lower:]]" 0
266C "\t" "[[:lower:]]" NOMATCH
267C "T" "[[:lower:]]" NOMATCH
268C "\t" "[[:space:]]" 0
269C "t" "[[:space:]]" NOMATCH
270C "t" "[[:alpha:]]" 0
271C "\t" "[[:alpha:]]" NOMATCH
272C "0" "[[:digit:]]" 0
273C "\t" "[[:digit:]]" NOMATCH
274C "t" "[[:digit:]]" NOMATCH
275C "\t" "[[:print:]]" NOMATCH
276C "t" "[[:print:]]" 0
277C "T" "[[:upper:]]" 0
278C "\t" "[[:upper:]]" NOMATCH
279C "t" "[[:upper:]]" NOMATCH
280C "\t" "[[:blank:]]" 0
281C "t" "[[:blank:]]" NOMATCH
282C "\t" "[[:graph:]]" NOMATCH
283C "t" "[[:graph:]]" 0
284C "." "[[:punct:]]" 0
285C "t" "[[:punct:]]" NOMATCH
286C "\t" "[[:punct:]]" NOMATCH
287C "0" "[[:xdigit:]]" 0
288C "\t" "[[:xdigit:]]" NOMATCH
289C "a" "[[:xdigit:]]" 0
290C "A" "[[:xdigit:]]" 0
291C "t" "[[:xdigit:]]" NOMATCH
292C "a" "[[alpha]]" NOMATCH
293C "a" "[[alpha:]]" NOMATCH
294C "a]" "[[alpha]]" 0
295C "a]" "[[alpha:]]" 0
f3e29a1a
UD
296C "a" "[[:alpha:][.b.]]" 0
297C "a" "[[:alpha:][=b=]]" 0
298C "a" "[[:alpha:][:digit:]]" 0
299C "a" "[[:digit:][:alpha:]]" 0
83b1b6d8
UD
300
301# B.6 018(C)
ab9afc21
UD
302C "a" "[a-c]" 0
303C "b" "[a-c]" 0
304C "c" "[a-c]" 0
305C "a" "[b-c]" NOMATCH
306C "d" "[b-c]" NOMATCH
307C "B" "[a-c]" NOMATCH
308C "b" "[A-C]" NOMATCH
309C "" "[a-c]" NOMATCH
310C "as" "[a-ca-z]" NOMATCH
f3e29a1a
UD
311C "a" "[[.a.]-c]" 0
312C "a" "[a-[.c.]]" 0
313C "a" "[[.a.]-[.c.]]" 0
314C "b" "[[.a.]-c]" 0
315C "b" "[a-[.c.]]" 0
316C "b" "[[.a.]-[.c.]]" 0
317C "c" "[[.a.]-c]" 0
318C "c" "[a-[.c.]]" 0
319C "c" "[[.a.]-[.c.]]" 0
320C "d" "[[.a.]-c]" NOMATCH
321C "d" "[a-[.c.]]" NOMATCH
322C "d" "[[.a.]-[.c.]]" NOMATCH
83b1b6d8
UD
323
324# B.6 019(C)
f3e29a1a
UD
325C "a" "[c-a]" NOMATCH
326C "a" "[[.c.]-a]" NOMATCH
327C "a" "[c-[.a.]]" NOMATCH
328C "a" "[[.c.]-[.a.]]" NOMATCH
329C "c" "[c-a]" NOMATCH
330C "c" "[[.c.]-a]" NOMATCH
331C "c" "[c-[.a.]]" NOMATCH
332C "c" "[[.c.]-[.a.]]" NOMATCH
83b1b6d8
UD
333
334# B.6 020(C)
ab9afc21
UD
335C "a" "[a-c0-9]" 0
336C "d" "[a-c0-9]" NOMATCH
337C "B" "[a-c0-9]" NOMATCH
83b1b6d8
UD
338
339# B.6 021(C)
ab9afc21
UD
340C "-" "[-a]" 0
341C "a" "[-b]" NOMATCH
342C "-" "[!-a]" NOMATCH
343C "a" "[!-b]" 0
344C "-" "[a-c-0-9]" 0
345C "b" "[a-c-0-9]" 0
346C "a:" "a[0-9-a]" NOMATCH
347C "a:" "a[09-a]" 0
83b1b6d8
UD
348
349# B.6 024(C)
ab9afc21
UD
350C "" "*" 0
351C "asd/sdf" "*" 0
83b1b6d8
UD
352
353# B.6 025(C)
ab9afc21
UD
354C "as" "[a-c][a-z]" 0
355C "as" "??" 0
83b1b6d8
UD
356
357# B.6 026(C)
ab9afc21
UD
358C "asd/sdf" "as*df" 0
359C "asd/sdf" "as*" 0
360C "asd/sdf" "*df" 0
361C "asd/sdf" "as*dg" NOMATCH
362C "asdf" "as*df" 0
363C "asdf" "as*df?" NOMATCH
364C "asdf" "as*??" 0
365C "asdf" "a*???" 0
366C "asdf" "*????" 0
367C "asdf" "????*" 0
368C "asdf" "??*?" 0
83b1b6d8
UD
369
370# B.6 027(C)
ab9afc21
UD
371C "/" "/" 0
372C "/" "/*" 0
373C "/" "*/" 0
374C "/" "/?" NOMATCH
375C "/" "?/" NOMATCH
376C "/" "?" 0
377C "." "?" 0
378C "/." "??" 0
379C "/" "[!a-c]" 0
380C "." "[!a-c]" 0
f5c68a01
UD
381
382# B.6 029(C)
ab9afc21
UD
383C "/" "/" 0 PATHNAME
384C "//" "//" 0 PATHNAME
385C "/.a" "/*" 0 PATHNAME
386C "/.a" "/?a" 0 PATHNAME
387C "/.a" "/[!a-z]a" 0 PATHNAME
388C "/.a/.b" "/*/?b" 0 PATHNAME
f5c68a01
UD
389
390# B.6 030(C)
ab9afc21
UD
391C "/" "?" NOMATCH PATHNAME
392C "/" "*" NOMATCH PATHNAME
f5c68a01 393C "a/b" "a?b" NOMATCH PATHNAME
ab9afc21 394C "/.a/.b" "/*b" NOMATCH PATHNAME
f5c68a01
UD
395
396# B.6 031(C)
ab9afc21
UD
397C "/$" "\\/\\$" 0
398C "/[" "\\/\\[" 0
794c3ad3
UD
399C "/[" "\\/[" 0
400C "/[]" "\\/\\[]" 0
f5c68a01
UD
401
402# B.6 032(C)
ab9afc21
UD
403C "/$" "\\/\\$" NOMATCH NOESCAPE
404C "/\\$" "\\/\\$" NOMATCH NOESCAPE
405C "\\/\\$" "\\/\\$" 0 NOESCAPE
f5c68a01
UD
406
407# B.6 033(C)
ab9afc21 408C ".asd" ".*" 0 PERIOD
955994e1 409C "/.asd" "*" 0 PERIOD
ab9afc21
UD
410C "/as/.df" "*/?*f" 0 PERIOD
411C "..asd" ".[!a-z]*" 0 PERIOD
f5c68a01
UD
412
413# B.6 034(C)
ab9afc21
UD
414C ".asd" "*" NOMATCH PERIOD
415C ".asd" "?asd" NOMATCH PERIOD
416C ".asd" "[!a-z]*" NOMATCH PERIOD
f5c68a01
UD
417
418# B.6 035(C)
ab9afc21
UD
419C "/." "/." 0 PATHNAME|PERIOD
420C "/.a./.b." "/.*/.*" 0 PATHNAME|PERIOD
421C "/.a./.b." "/.??/.??" 0 PATHNAME|PERIOD
f5c68a01
UD
422
423# B.6 036(C)
ab9afc21
UD
424C "/." "*" NOMATCH PATHNAME|PERIOD
425C "/." "/*" NOMATCH PATHNAME|PERIOD
426C "/." "/?" NOMATCH PATHNAME|PERIOD
427C "/." "/[!a-z]" NOMATCH PATHNAME|PERIOD
428C "/a./.b." "/*/*" NOMATCH PATHNAME|PERIOD
429C "/a./.b." "/??/???" NOMATCH PATHNAME|PERIOD
430
955994e1
UD
431# Some home-grown tests.
432C "foobar" "foo*[abc]z" NOMATCH
433C "foobaz" "foo*[abc][xyz]" 0
434C "foobaz" "foo?*[abc][xyz]" 0
435C "foobaz" "foo?*[abc][x/yz]" 0
436C "foobaz" "foo?*[abc]/[xyz]" NOMATCH PATHNAME
437C "a" "a/" NOMATCH PATHNAME
438C "a/" "a" NOMATCH PATHNAME
439C "//a" "/a" NOMATCH PATHNAME
440C "/a" "//a" NOMATCH PATHNAME
95eaff64
UD
441C "az" "[a-]z" 0
442C "bz" "[ab-]z" 0
443C "cz" "[ab-]z" NOMATCH
444C "-z" "[ab-]z" 0
445C "az" "[-a]z" 0
446C "bz" "[-ab]z" 0
447C "cz" "[-ab]z" NOMATCH
448C "-z" "[-ab]z" 0
aae95a1b
UD
449C "\\" "[\\\\-a]" 0
450C "_" "[\\\\-a]" 0
451C "a" "[\\\\-a]" 0
452C "-" "[\\\\-a]" NOMATCH
453C "\\" "[\\]-a]" NOMATCH
454C "_" "[\\]-a]" 0
455C "a" "[\\]-a]" 0
456C "]" "[\\]-a]" 0
457C "-" "[\\]-a]" NOMATCH
458C "\\" "[!\\\\-a]" NOMATCH
459C "_" "[!\\\\-a]" NOMATCH
460C "a" "[!\\\\-a]" NOMATCH
461C "-" "[!\\\\-a]" 0
462C "!" "[\\!-]" 0
463C "-" "[\\!-]" 0
464C "\\" "[\\!-]" NOMATCH
465C "Z" "[Z-\\\\]" 0
466C "[" "[Z-\\\\]" 0
467C "\\" "[Z-\\\\]" 0
468C "-" "[Z-\\\\]" NOMATCH
469C "Z" "[Z-\\]]" 0
470C "[" "[Z-\\]]" 0
471C "\\" "[Z-\\]]" 0
472C "]" "[Z-\\]]" 0
473C "-" "[Z-\\]]" NOMATCH
955994e1 474
ab9afc21
UD
475# Following are tests outside the scope of IEEE 2003.2 since they are using
476# locales other than the C locale. The main focus of the tests is on the
477# handling of ranges and the recognition of character (vs bytes).
478de_DE.ISO-8859-1 "a" "[a-z]" 0
479de_DE.ISO-8859-1 "z" "[a-z]" 0
480