mirror of https://github.com/n-hys/bash.git
104 lines
3.2 KiB
Plaintext
104 lines
3.2 KiB
Plaintext
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
#
|
|
# More ksh-like extended globbing tests, cribbed from zsh-3.1.5
|
|
#
|
|
shopt -s extglob
|
|
|
|
failed=0
|
|
while read res str pat; do
|
|
[[ $res = '#' ]] && continue
|
|
[[ $str = ${pat} ]]
|
|
ts=$?
|
|
[[ $1 = -q ]] || echo "$ts: [[ $str = $pat ]]"
|
|
if [[ ( $ts -gt 0 && $res = t) || ($ts -eq 0 && $res = f) ]]; then
|
|
echo "Test failed: [[ $str = $pat ]]"
|
|
(( failed += 1 ))
|
|
fi
|
|
done <<EOT
|
|
t fofo *(f*(o))
|
|
t ffo *(f*(o))
|
|
t foooofo *(f*(o))
|
|
t foooofof *(f*(o))
|
|
t fooofoofofooo *(f*(o))
|
|
f foooofof *(f+(o))
|
|
f xfoooofof *(f*(o))
|
|
f foooofofx *(f*(o))
|
|
t ofxoofxo *(*(of*(o)x)o)
|
|
f ofooofoofofooo *(f*(o))
|
|
t foooxfooxfoxfooox *(f*(o)x)
|
|
f foooxfooxofoxfooox *(f*(o)x)
|
|
t foooxfooxfxfooox *(f*(o)x)
|
|
t ofxoofxo *(*(of*(o)x)o)
|
|
t ofoooxoofxo *(*(of*(o)x)o)
|
|
t ofoooxoofxoofoooxoofxo *(*(of*(o)x)o)
|
|
t ofoooxoofxoofoooxoofxoo *(*(of*(o)x)o)
|
|
f ofoooxoofxoofoooxoofxofo *(*(of*(o)x)o)
|
|
t ofoooxoofxoofoooxoofxooofxofxo *(*(of*(o)x)o)
|
|
t aac *(@(a))a@(c)
|
|
t ac *(@(a))a@(c)
|
|
f c *(@(a))a@(c)
|
|
t aaac *(@(a))a@(c)
|
|
f baaac *(@(a))a@(c)
|
|
t abcd ?@(a|b)*@(c)d
|
|
t abcd @(ab|a*@(b))*(c)d
|
|
t acd @(ab|a*(b))*(c)d
|
|
t abbcd @(ab|a*(b))*(c)d
|
|
t effgz @(b+(c)d|e*(f)g?|?(h)i@(j|k))
|
|
t efgz @(b+(c)d|e*(f)g?|?(h)i@(j|k))
|
|
t egz @(b+(c)d|e*(f)g?|?(h)i@(j|k))
|
|
t egzefffgzbcdij *(b+(c)d|e*(f)g?|?(h)i@(j|k))
|
|
f egz @(b+(c)d|e+(f)g?|?(h)i@(j|k))
|
|
t ofoofo *(of+(o))
|
|
t oxfoxoxfox *(oxf+(ox))
|
|
f oxfoxfox *(oxf+(ox))
|
|
t ofoofo *(of+(o)|f)
|
|
# The following is supposed to match only as fo+ofo+ofo
|
|
t foofoofo @(foo|f|fo)*(f|of+(o))
|
|
t oofooofo *(of|oof+(o))
|
|
t fffooofoooooffoofffooofff *(*(f)*(o))
|
|
# The following tests backtracking in alternation matches
|
|
t fofoofoofofoo *(fo|foo)
|
|
# Exclusion
|
|
t foo !(x)
|
|
t foo !(x)*
|
|
f foo !(foo)
|
|
t foo !(foo)*
|
|
t foobar !(foo)
|
|
t foobar !(foo)*
|
|
t moo.cow !(*.*).!(*.*)
|
|
f mad.moo.cow !(*.*).!(*.*)
|
|
f mucca.pazza mu!(*(c))?.pa!(*(z))?
|
|
t fff !(f)
|
|
t fff *(!(f))
|
|
t fff +(!(f))
|
|
t ooo !(f)
|
|
t ooo *(!(f))
|
|
t ooo +(!(f))
|
|
t foo !(f)
|
|
t foo *(!(f))
|
|
t foo +(!(f))
|
|
f f !(f)
|
|
f f *(!(f))
|
|
f f +(!(f))
|
|
t foot @(!(z*)|*x)
|
|
f zoot @(!(z*)|*x)
|
|
t foox @(!(z*)|*x)
|
|
t zoox @(!(z*)|*x)
|
|
t foo *(!(foo))
|
|
f foob !(foo)b*
|
|
t foobb !(foo)b*
|
|
EOT
|
|
echo "$failed tests failed."
|