-
Simon McVittie authored
At the moment it writes to the current working directory, and we invoke it via `bwrap ... --chdir DIRECTORY`; but we want to make it possible to use this code from inside a Flatpak runtime (at least in the case where we're using the host system's glibc), which means we won't be allowed to run bwrap and must do this some other way. Rather than using `env --chdir=...` (which isn't supported in scout anyway), let's teach this script to output to an explicitly specified directory. Signed-off-by:
Simon McVittie <smcv@collabora.com>
Simon McVittie authoredAt the moment it writes to the current working directory, and we invoke it via `bwrap ... --chdir DIRECTORY`; but we want to make it possible to use this code from inside a Flatpak runtime (at least in the case where we're using the host system's glibc), which means we won't be allowed to run bwrap and must do this some other way. Rather than using `env --chdir=...` (which isn't supported in scout anyway), let's teach this script to output to an explicitly specified directory. Signed-off-by:
Simon McVittie <smcv@collabora.com>
test-locale-gen.sh 5.61 KiB
#!/bin/sh
# Copyright © 2019 Collabora Ltd.
#
# SPDX-License-Identifier: MIT
#
# Permission is hereby granted, free of charge, to any person obtaining
# a copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish,
# distribute, sublicense, and/or sell copies of the Software, and to
# permit persons to whom the Software is furnished to do so, subject to
# the following conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
set -e
set -u
me="$0"
me="$(readlink -f "$0")"
here="${me%/*}"
me="${me##*/}"
# TAP test helper functions inspired by Perl Test::More.
test_num=0
any_failed=
skip_all () {
echo "1..0 # SKIP $*"
exit 0
}
diag () {
echo "# $*"
}
ok () {
test_num=$(( test_num + 1 ))
echo "ok $test_num - $*"
}
skip () {
test_num=$(( test_num + 1 ))
echo "ok $test_num # SKIP $*"
}
not_ok () {
test_num=$(( test_num + 1 ))
any_failed=yes
echo "not ok $test_num - $*"
}
done_testing () {
echo "1..$test_num"
if [ -n "$any_failed" ]; then
exit 1
fi
exit 0
}
if ! tmpdir="$(mktemp -d)"; then
skip_all "Unable to create a temporary directory"
fi
if [ -z "${G_TEST_SRCDIR-}" ]; then
G_TEST_SRCDIR="${here}"
fi
if [ -z "${G_TEST_BUILDDIR-}" ]; then
G_TEST_BUILDDIR="${here}"
fi
if [ -n "${PRESSURE_VESSEL_UNINSTALLED-}" ]; then
PATH="${G_TEST_BUILDDIR}/..:${G_TEST_SRCDIR}/..:${PATH}"
fi
locale_gen="pressure-vessel-locale-gen"
try_setlocale="pressure-vessel-try-setlocale"
mkdir "$tmpdir/1"
mkdir "$tmpdir/cwd"
one_missing=
# Locales used in the test below, chosen to include several that you
# probably don't have all of.
for locale in \
cs_CZ \
cy_GB.UTF-8 \
en_AU.UTF-8 \
en_DK \
en_GB.ISO-8859-15 \
en_US.UTF-8 \
hu_HU.UTF-8 \
it_IT@euro \
mn_MN \
ms_MY \
nb_NO \
nan_TW@latin \
pl_PL \
ta_IN \
ti_ER \
; do
if "$try_setlocale" "$locale" >/dev/null; then
diag "You already have $locale"
else
diag "You do not already have $locale"
one_missing=yes
break
fi
done
if [ -z "$one_missing" ]; then
skip "You have all the test locales, cannot test"
else
failed=
# Deliberately setting environment variables in subshell:
# shellcheck disable=SC2030
(
cd "$tmpdir/cwd"
export LC_CTYPE=cy_GB.utf8
export LC_COLLATE=cs_CZ
export LC_IDENTIFICATION=it_IT@euro
export LC_MEASUREMENT=mn_MN
export LC_MESSAGES=en_GB.ISO-8859-15
export LC_MONETARY=ms_MY
export LC_NUMERIC=nb_NO
export LC_NAME=nan_TW@latin
export LC_PAPER=pl_PL
export LC_TELEPHONE=ta_IN
export LC_TIME=ti_ER
export HOST_LC_ALL=hu_HU.UTF-8
export LANG=en_DK
export LC_ALL=en_AU.UTF-8
"$locale_gen" --output-dir "$tmpdir/1"
) || failed="$?"
if [ "$failed" = 72 ]; then
ok "ran $locale_gen, got status 72"
elif [ -n "$failed" ]; then
not_ok "failed to run $locale_gen"
else
not_ok "$locale_gen did not report missing locales"
fi
for locale in \
cs_CZ \
cy_GB.UTF-8 \
cy_GB.utf8 \
en_AU.UTF-8 \
en_DK \
en_GB.ISO-8859-15 \
en_US.UTF-8 \
hu_HU.UTF-8 \
it_IT@euro \
mn_MN \
ms_MY \
nb_NO \
nan_TW@latin \
pl_PL \
ta_IN \
ti_ER \
; do
if [ -e "$tmpdir/1/$locale/LC_IDENTIFICATION" ]; then
ok "$tmpdir/1/$locale/LC_IDENTIFICATION exists"
else
not_ok "$tmpdir/1/$locale/LC_IDENTIFICATION not generated"
fi
done
for x in "$tmpdir/cwd"/*; do
if [ -e "$x" ]; then
not_ok "$locale_gen generated $x in current working directory"
failed=yes
fi
done
fi
mkdir "$tmpdir/2"
if "$try_setlocale" "en_US.UTF-8" >/dev/null; then
failed=
# Deliberately setting environment variables in subshell:
# shellcheck disable=SC2031
(
cd "$tmpdir/cwd"
unset LC_CTYPE
unset LC_COLLATE
unset LC_IDENTIFICATION
unset LC_MEASUREMENT
unset LC_MESSAGES
unset LC_MONETARY
unset LC_NUMERIC
unset LC_NAME
unset LC_PAPER
unset LC_TELEPHONE
unset LC_TIME
export HOST_LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
"$locale_gen" --output-dir "$tmpdir/2"
) || failed=yes
if [ -n "$failed" ]; then
not_ok "failed to run $locale_gen"
else
ok "ran $locale_gen"
fi
failed=
for x in "$tmpdir/2"/*; do
if [ -e "$x" ]; then
not_ok "$locale_gen generated $x but should not have generated anything"
failed=yes
fi
done
if [ -z "$failed" ]; then
ok "$locale_gen did not redundantly generate en_US.UTF-8"
fi
else
skip "Cannot test with existing en_US.UTF-8 locale"
fi
rm -fr "$tmpdir"
done_testing
# vim:set sw=4 sts=4 et: