#   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
