| # 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/>. |
| # |
| : ${TMPDIR:=/var/tmp} |
| |
| TESTDIR=${TMPDIR}/glob-test-$$ |
| mkdir ${TESTDIR} |
| cd $TESTDIR || { |
| echo "$TESTDIR: cannot cd" >&2 |
| exit 1 |
| } |
| |
| matchfunc() |
| { |
| echo == LANG=$LANG == |
| |
| touch a p |
| echo [[:alpha:] |
| rm a p |
| |
| case l in |
| [[:alpha:]) echo bad 1;; |
| *) echo ok 1;; |
| esac |
| |
| touch '[a' '[x' |
| echo [[:alpha:] |
| rm '[a' |
| echo [[:alpha:] |
| rm '[x' |
| |
| case [a in |
| [[:alpha:]) echo ok 2;; |
| *) echo bad 2;; |
| esac |
| |
| case x in |
| [[:aeioux:]) echo bad 2.1 ;; |
| *) echo ok 2.1 ;; |
| esac |
| |
| case [x in |
| [[:alpha:]) echo bad 3;; |
| *) echo ok 3;; |
| esac |
| |
| # unclosed bracket char class expression just matches against ":alpha" |
| case a in |
| [[:alpha]) echo ok 4;; |
| *) echo bad 4;; |
| esac |
| } |
| |
| echo invalid bracket expression |
| export LANG=C |
| matchfunc |
| |
| export LANG=en_US.UTF-8 |
| matchfunc |
| |
| unset -f matchfunc |
| |
| matchfunc() |
| { |
| echo == LANG=$LANG == |
| |
| touch p |
| # quoted character classes work as if they were unquoted now |
| echo [[:alpha:]] |
| echo [[:"alpha":]] |
| rm -f p |
| |
| case a] in |
| [[:aleph:]]) echo bad 1;; |
| *) echo ok 1;; |
| esac |
| |
| case a in |
| [[:aleph:]]) echo bad 2;; |
| *) echo ok 2;; |
| esac |
| |
| case a] in |
| [[:"alpha":]]) echo bad 3;; |
| *) echo ok 3;; |
| esac |
| |
| # Posix says quoted character class names work now |
| case x in |
| [[:"alpha":]]) echo ok 4;; |
| *) echo bad 4;; |
| esac |
| |
| case a in |
| [abc[:foo:]]) echo ok 5;; |
| *) echo bad 5 ;; |
| esac |
| |
| case a in |
| [[:foo:]abc]) echo ok 6;; |
| *) echo bad 6 ;; |
| esac |
| } |
| |
| echo invalid character class |
| export LANG=C |
| matchfunc |
| |
| export LANG=en_US.UTF-8 |
| matchfunc |
| |
| unset -f matchfunc |
| |
| matchfunc() |
| { |
| echo == LANG=$LANG == |
| |
| case h in |
| [[.hyphen.]) echo bad 1;; |
| *) echo ok 1;; |
| esac |
| |
| case - in |
| [[.hyphen.]]) echo ok 2;; |
| *) echo bad 2;; |
| esac |
| |
| case slash in |
| [[.slash.]]) echo bad 3;; |
| *) echo ok 3;; |
| esac |
| |
| case a in |
| [abc[.nonsense.]]) echo ok 4;; |
| *) echo bad 4 ;; |
| esac |
| |
| case a in |
| [[.nonsense.]abc]) echo ok 5;; |
| *) echo bad 5 ;; |
| esac |
| } |
| |
| echo invalid collating symbols |
| |
| export LANG=C |
| matchfunc |
| |
| export LANG=en_US.UTF-8 |
| matchfunc |
| |
| cd $OLDPWD |
| rm -rf $TESTDIR |