Imported from ../bash-1.14.7.tar.gz.
[platform/upstream/bash.git] / tests / glob-test
1 #
2 # test the shell globbing
3 #
4 expect()
5 {
6         echo expect "$@"
7 }
8
9 TESTDIR=/tmp/glob-test
10 rm -rf $TESTDIR
11 mkdir $TESTDIR
12 builtin cd $TESTDIR
13
14 touch a b c d abc abd abe bb bcd ca cb dd de
15 mkdir bdir
16
17 # see if `regular' globbing works right
18 expect '<a> <abc> <abd> <abe> <X*>'
19 recho a* X*
20
21 expect '<a> <abc> <abd> <abe>'
22 recho \a*
23
24 # see if null glob expansion works
25 allow_null_glob_expansion=
26
27 expect '<a> <abc> <abd> <abe>'
28 recho a* X*
29
30 unset allow_null_glob_expansion
31
32 # see if the code that expands directories only works
33 expect '<bdir/>'
34 recho b*/
35
36 # Test quoted and unquoted globbing characters
37 expect '<*>'
38 recho \*
39
40 expect '<a*>'
41 recho 'a*'
42
43 expect '<a*>'
44 recho a\*
45
46 expect '<c> <ca> <cb> <a*> <*q*>'
47 recho c* a\* *q*
48
49 expect '<**>'
50 recho "*"*
51
52 expect '<**>'
53 recho \**
54
55 expect '<\.\./*/>'
56 recho "\.\./*/"
57
58 expect '<s/\..*//>'
59 recho 's/\..*//'
60
61 # Pattern from Larry Wall's Configure that caused bash to blow up
62 expect '</^root:/{s/^[^:]*:[^:]*:\([^:]*\).*$/\1/>'
63 recho "/^root:/{s/^[^:]*:[^:]*:\([^:]*\).*"'$'"/\1/"
64
65 # Make sure character classes work properly
66
67 expect '<abc> <abd> <abe> <bb> <cb>'
68 recho [a-c]b*
69
70 expect '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>'
71 recho [a-y]*[^c]
72
73 expect '<abd> <abe>'
74 recho a*[^c]
75
76 touch a-b aXb
77 expect '<a-b> <aXb>'
78 recho a[X-]b
79
80 touch .x .y
81 expect '<d> <dd> <de>'
82 recho [^a-c]*
83
84 # Make sure that filenames with embedded globbing characters are handled
85 # properly
86 mkdir a\*b
87 > a\*b/ooo
88
89 expect '<a*b/ooo>'
90 recho a\*b/*
91
92 expect '<a*b/ooo>'
93 recho a\*?/*
94
95 expect '<no match>'
96 cmd='echo !7'
97 case "$cmd" in
98 *\\!*) echo match ;;
99 *) echo no match ;;
100 esac
101
102 expect '<not there>'
103 file='r.*'
104 case $file in
105 *.\*) echo not there ;;
106 *) echo there ;;
107 esac
108
109 # examples from the Posix.2 spec (d11.2, p. 243)
110 expect '<abc>'
111 recho a[b]c
112
113 expect '<abc>'
114 recho a["b"]c
115
116 expect '<abc>'
117 recho a[\b]c
118
119 expect '<abc>'
120 recho a?c
121
122 expect '<match>'
123 case abc in
124 a"b"c)  echo match
125         ;;
126 *)      echo BAD
127         ;;
128 esac
129
130 expect '<match>'
131 case abc in
132 a*c)    echo match
133         ;;
134 *)      echo BAD
135         ;;
136 esac
137
138 expect '<ok>'
139 case abc in
140 "a?c")  echo bad
141         ;;
142 *)      echo ok
143         ;;
144 esac
145
146 expect '<ok>'
147 case abc in
148 a\*c)   echo bad
149         ;;
150 *)      echo ok
151         ;;
152 esac
153
154 expect '<ok>'
155 case abc in
156 a\[b]c) echo bad
157         ;;
158 *)      echo ok
159         ;;
160 esac
161
162 expect '<ok>'
163 case "$nosuchvar" in
164 "")     echo ok ;;
165 *)      echo bad ;;
166 esac
167
168 # This is very odd, but sh and ksh seem to agree
169 expect '<ok>'
170 case abc in
171 a["\b"]c) echo ok
172         ;;
173 *)      echo bad
174         ;;
175 esac
176
177 builtin cd /
178 rm -rf $TESTDIR
179 exit 0