From: Bruno Haible Date: Tue, 24 Jun 2025 09:26:42 +0000 (+0200) Subject: Python: Add another unit test. X-Git-Tag: v0.26~64 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b013095ee142caf3027b4dd5766b4287b02d44e5;p=thirdparty%2Fgettext.git Python: Add another unit test. * gettext-tools/tests/lang-python-2: New file, based on gettext-tools/tests/lang-python-1. * gettext-tools/tests/Makefile.am (TESTS): Add it. --- diff --git a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am index 51d50692f..3160ed805 100644 --- a/gettext-tools/tests/Makefile.am +++ b/gettext-tools/tests/Makefile.am @@ -234,7 +234,7 @@ TESTS = gettext-1 gettext-2 \ gettextpo-1 sentence-1 \ lang-po \ lang-c lang-c++ lang-c++20 lang-c++26 lang-objc \ - lang-python-1 \ + lang-python-1 lang-python-2 \ lang-java \ lang-csharp \ lang-javascript \ diff --git a/gettext-tools/tests/lang-python-2 b/gettext-tools/tests/lang-python-2 new file mode 100755 index 000000000..22608da43 --- /dev/null +++ b/gettext-tools/tests/lang-python-2 @@ -0,0 +1,135 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test of gettext facilities (including plural handling) in the Python +# language. + +cat <<\EOF > prog2.py +import sys +import gettext + +n = int(sys.argv[1]) + +gettext.textdomain('prog') +gettext.bindtextdomain('prog', '.') + +print(gettext.gettext("'Your command, please?', asked the waiter.")) +print(gettext.ngettext("a piece of cake","{} pieces of cake",n).format(n)) +print(gettext.gettext("{} is replaced by {}.").format("FF", "EUR")) +EOF + +: ${XGETTEXT=xgettext} +${XGETTEXT} -o prog.tmp --omit-header --no-location prog2.py || Exit 1 +LC_ALL=C tr -d '\r' < prog.tmp > prog.pot || Exit 1 + +cat <<\EOF > prog.ok +msgid "'Your command, please?', asked the waiter." +msgstr "" + +#, python-brace-format +msgid "a piece of cake" +msgid_plural "{} pieces of cake" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{} is replaced by {}." +msgstr "" +EOF + +: ${DIFF=diff} +${DIFF} prog.ok prog.pot || Exit 1 + +cat <<\EOF > fr.po +msgid "" +msgstr "" +"Content-Type: text/plain; charset=ISO-8859-1\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +msgid "'Your command, please?', asked the waiter." +msgstr "«Votre commande, s'il vous plait», dit le garçon." + +# Les gateaux allemands sont les meilleurs du monde. +#, python-brace-format +msgid "a piece of cake" +msgid_plural "{} pieces of cake" +msgstr[0] "un morceau de gateau" +msgstr[1] "{} morceaux de gateau" + +# Reverse the arguments. +#, python-brace-format +msgid "{} is replaced by {}." +msgstr "{1} remplace {0}." +EOF + +: ${MSGMERGE=msgmerge} +${MSGMERGE} -q -o fr.po.tmp fr.po prog.pot || Exit 1 +LC_ALL=C tr -d '\r' < fr.po.tmp > fr.po.new || Exit 1 + +: ${DIFF=diff} +${DIFF} fr.po fr.po.new || Exit 1 + +test -d fr || mkdir fr +test -d fr/LC_MESSAGES || mkdir fr/LC_MESSAGES + +: ${MSGFMT=msgfmt} +${MSGFMT} -o fr/LC_MESSAGES/prog.mo fr.po + +# Test for presence of python version 3.1 or newer. +if (python3 -V) >/dev/null 2>/dev/null; then + PYTHON=python3 +else + if (python -V) >/dev/null 2>/dev/null; then + PYTHON=python + else + echo "Skipping test: python not found"; Exit 77 + fi +fi +case `$PYTHON -c 'import sys; print(sys.hexversion >= 0x30100F0)'` in + True) ;; + *) echo "Skipping test: python version too old"; Exit 77;; +esac + +: ${DIFF=diff} +cat <<\EOF > prog.ok +«Votre commande, s'il vous plait», dit le garçon. +2 morceaux de gateau +EUR remplace FF. +EOF +cat <<\EOF > prog.oku +«Votre commande, s'il vous plait», dit le garçon. +2 morceaux de gateau +EUR remplace FF. +EOF + +: ${LOCALE_FR=fr_FR} +: ${LOCALE_FR_UTF8=fr_FR.UTF-8} +if test $LOCALE_FR_UTF8 != none; then + LANGUAGE= LC_ALL=$LOCALE_FR_UTF8 PYTHONIOENCODING=UTF-8 $PYTHON prog2.py 2 > prog.out || Exit 1 + ${DIFF} prog.oku prog.out || Exit 1 +fi +if test -z "$ISO8859_LOCALE_UNSUPPORTED"; then + if test $LOCALE_FR != none; then + LANGUAGE= LC_ALL=$LOCALE_FR PYTHONIOENCODING=ISO-8859-1 $PYTHON prog2.py 2 > prog.out || Exit 1 + ${DIFF} prog.ok prog.out || Exit 1 + fi + if test $LOCALE_FR = none && test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french locale is installed" + else + echo "Skipping test: no french locale is supported" + fi + Exit 77 + fi +else + if test $LOCALE_FR_UTF8 = none; then + if test -f /usr/bin/localedef; then + echo "Skipping test: no french Unicode locale is installed" + else + echo "Skipping test: no french Unicode locale is supported" + fi + Exit 77 + fi +fi + +Exit 0