mirror of
https://https.git.savannah.gnu.org/git/gettext.git
synced 2026-01-27 01:44:30 +00:00
Rust: Add lang-rust unit test.
* gettext-tools/tests/init.cfg (this_test_is_longrunning_): New function. * gettext-tools/tests/lang-rust: New file. * gettext-tools/tests/Makefile.am (TESTS): Add it. * HACKING: Reorder. Document prerequisites for Rust unit test.
This commit is contained in:
parent
e12c0558ad
commit
0f8cfe26fe
154
HACKING
154
HACKING
@ -171,36 +171,6 @@ are skipped. To this effect, you need to install also:
|
||||
- On Red Hat distributions: python3.
|
||||
- Other: https://repology.org/project/python/versions
|
||||
|
||||
* GNU clisp
|
||||
+ Homepage: http://clisp.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: clisp, clisp-doc,
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/clisp/versions
|
||||
|
||||
* librep
|
||||
+ Homepage: http://librep.sourceforge.net/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: rep, rep-doc,
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/librep/versions
|
||||
|
||||
* GNU guile
|
||||
+ Homepage: https://www.gnu.org/software/guile/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: guile-2.2, guile-2.2-doc,
|
||||
or: guile-3.0, guile-3.0-doc,
|
||||
- On Red Hat distributions: guile.
|
||||
- Other: https://repology.org/project/guile/versions
|
||||
|
||||
* GNU smalltalk
|
||||
+ Homepage: http://smalltalk.gnu.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: gnu-smalltalk, gnu-smalltalk-doc
|
||||
(only up to Debian 11),
|
||||
- On Red Hat distributions: gnu-smalltalk (EPEL).
|
||||
- Other: https://repology.org/project/smalltalk/versions
|
||||
|
||||
* A Java compiler
|
||||
+ Homepage: http://openjdk.java.net/
|
||||
+ Pre-built package name:
|
||||
@ -227,6 +197,56 @@ are skipped. To this effect, you need to install also:
|
||||
- On Red Hat distributions: dotnet7.0 or dotnet8.0.
|
||||
- Other: https://repology.org/project/dotnet/versions
|
||||
|
||||
* The GNOME/Mozilla JavaScript interpreter
|
||||
+ Homepage: https://wiki.gnome.org/Projects/Gjs
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: gjs, gir1.2-gtk-3.0,
|
||||
- On Red Hat distributions: gjs.
|
||||
- Other: https://repology.org/project/gjs/versions
|
||||
|
||||
* GNU guile
|
||||
+ Homepage: https://www.gnu.org/software/guile/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: guile-2.2, guile-2.2-doc,
|
||||
or: guile-3.0, guile-3.0-doc,
|
||||
- On Red Hat distributions: guile.
|
||||
- Other: https://repology.org/project/guile/versions
|
||||
|
||||
* GNU clisp
|
||||
+ Homepage: http://clisp.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: clisp, clisp-doc,
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/clisp/versions
|
||||
|
||||
* librep
|
||||
+ Homepage: http://librep.sourceforge.net/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: rep, rep-doc,
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/librep/versions
|
||||
|
||||
* Rust
|
||||
+ Homepage: https://www.rust-lang.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: rustc, cargo,
|
||||
- On Red Hat distributions: rust, rust-cargo.
|
||||
- Other: https://repology.org/project/rust/versions
|
||||
https://repology.org/project/cargo/versions
|
||||
|
||||
* Ruby
|
||||
+ Homepage: https://www.ruby-lang.org/en/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: ruby,
|
||||
- On Red Hat distributions: ruby.
|
||||
- Other: https://repology.org/project/ruby/versions
|
||||
* The ruby-gettext package
|
||||
+ Homepage: https://ruby-gettext.github.io/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: ruby-gettext,
|
||||
- On Red Hat distributions: ruby-gettext.
|
||||
- Other: https://repology.org/project/ruby:gettext/versions
|
||||
|
||||
* GNU awk
|
||||
+ Homepage: https://www.gnu.org/software/gawk/
|
||||
+ Pre-built package name:
|
||||
@ -234,6 +254,22 @@ are skipped. To this effect, you need to install also:
|
||||
- On Red Hat distributions: gawk.
|
||||
- Other: https://repology.org/project/gawk/versions
|
||||
|
||||
* lua
|
||||
+ Homepage: https://www.lua.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: lua5.4 or lua5.3 or lua5.2 or lua5.1,
|
||||
- On Red Hat distributions: lua.
|
||||
- Other: https://repology.org/project/lua/versions
|
||||
* The lua-gettext package
|
||||
+ Homepage: https://gitlab.com/sukhichev/lua-gettext/blob/master/README.us.md
|
||||
+ Debian and Ubuntu packages:
|
||||
Download (following the hyperlinks in the homepage), then install through
|
||||
$ sudo dpkg -i lua-gettext_0.0+nmu1_amd64.deb
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: --,
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/lua:gettext/versions
|
||||
|
||||
* The Free Pascal compiler ppc386 or ppcx64
|
||||
+ Homepage: https://www.freepascal.org/
|
||||
+ Pre-built package name:
|
||||
@ -247,6 +283,21 @@ are skipped. To this effect, you need to install also:
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/fpc/versions
|
||||
|
||||
* GNU smalltalk
|
||||
+ Homepage: http://smalltalk.gnu.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: gnu-smalltalk, gnu-smalltalk-doc
|
||||
(only up to Debian 11),
|
||||
- On Red Hat distributions: gnu-smalltalk (EPEL).
|
||||
- Other: https://repology.org/project/smalltalk/versions
|
||||
|
||||
* The GNOME Vala compiler
|
||||
+ Homepage: https://wiki.gnome.org/Projects/Vala
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: valac,
|
||||
- On Red Hat distributions: vala.
|
||||
- Other: https://repology.org/project/vala/versions
|
||||
|
||||
* Tcl
|
||||
+ Homepage: https://www.tcl.tk/
|
||||
+ Pre-built package name:
|
||||
@ -274,49 +325,6 @@ are skipped. To this effect, you need to install also:
|
||||
- On Red Hat distributions: php.
|
||||
- Other: https://repology.org/project/php/versions
|
||||
|
||||
* Ruby
|
||||
+ Homepage: https://www.ruby-lang.org/en/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: ruby,
|
||||
- On Red Hat distributions: ruby.
|
||||
- Other: https://repology.org/project/ruby/versions
|
||||
* The ruby-gettext package
|
||||
+ Homepage: https://ruby-gettext.github.io/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: ruby-gettext,
|
||||
- On Red Hat distributions: ruby-gettext.
|
||||
- Other: https://repology.org/project/ruby:gettext/versions
|
||||
|
||||
* lua
|
||||
+ Homepage: https://www.lua.org/
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: lua5.4 or lua5.3 or lua5.2 or lua5.1,
|
||||
- On Red Hat distributions: lua.
|
||||
- Other: https://repology.org/project/lua/versions
|
||||
* The lua-gettext package
|
||||
+ Homepage: https://gitlab.com/sukhichev/lua-gettext/blob/master/README.us.md
|
||||
+ Debian and Ubuntu packages:
|
||||
Download (following the hyperlinks in the homepage), then install through
|
||||
$ sudo dpkg -i lua-gettext_0.0+nmu1_amd64.deb
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: --,
|
||||
- On Red Hat distributions: --.
|
||||
- Other: https://repology.org/project/lua:gettext/versions
|
||||
|
||||
* The GNOME/Mozilla JavaScript interpreter
|
||||
+ Homepage: https://wiki.gnome.org/Projects/Gjs
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: gjs, gir1.2-gtk-3.0,
|
||||
- On Red Hat distributions: gjs.
|
||||
- Other: https://repology.org/project/gjs/versions
|
||||
|
||||
* The GNOME Vala compiler
|
||||
+ Homepage: https://wiki.gnome.org/Projects/Vala
|
||||
+ Pre-built package name:
|
||||
- On Debian and Debian-based systems: valac,
|
||||
- On Red Hat distributions: vala.
|
||||
- Other: https://repology.org/project/vala/versions
|
||||
|
||||
If you want to exercise the sample programs in gettext-tools/examples/, you
|
||||
also need to install:
|
||||
|
||||
|
||||
@ -223,6 +223,7 @@ TESTS = gettext-1 gettext-2 \
|
||||
lang-csharp \
|
||||
lang-javascript \
|
||||
lang-guile lang-clisp lang-elisp lang-librep \
|
||||
lang-rust \
|
||||
lang-ruby \
|
||||
lang-sh lang-bash \
|
||||
lang-gawk \
|
||||
|
||||
@ -57,3 +57,17 @@ func_filter_POT_Creation_Date ()
|
||||
|| Exit 1
|
||||
LC_ALL=C tr -d '\r' < "$1".tmq > "$2" || Exit 1
|
||||
}
|
||||
|
||||
# Skip the rest of this test if execution of long-running tests is undesired.
|
||||
this_test_is_longrunning_ ()
|
||||
{
|
||||
if test "$RUN_LONGRUNNING_TESTS" != yes; then
|
||||
echo 'This is a longrunning test, disabled by default,
|
||||
To run it anyway, rerun "make check" with the RUN_LONGRUNNING_TESTS
|
||||
environment variable set to yes. E.g.,
|
||||
|
||||
env RUN_LONGRUNNING_TESTS=yes make check
|
||||
' 1>&2
|
||||
Exit 77
|
||||
fi
|
||||
}
|
||||
|
||||
161
gettext-tools/tests/lang-rust
Executable file
161
gettext-tools/tests/lang-rust
Executable file
@ -0,0 +1,161 @@
|
||||
#! /bin/sh
|
||||
. "${srcdir=.}/init.sh"; path_prepend_ . ../src
|
||||
|
||||
# Test of gettext facilities in the Rust language.
|
||||
# Assumes an fr_FR locale is installed.
|
||||
# Assumes the following packages are installed: rustc, cargo,
|
||||
# and the following Rust packages ("crates"): gettext-rs, formatx.
|
||||
|
||||
# Test whether we can build and run Rust programs.
|
||||
: ${CARGO=cargo}
|
||||
(${CARGO} --version) >/dev/null 2>/dev/null \
|
||||
|| { echo "Skipping test: cargo not found"; Exit 77; }
|
||||
|
||||
cat <<\EOF > Cargo.toml
|
||||
[package]
|
||||
name = "gettext-lang-rust"
|
||||
version = "0.0.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
gettext-rs = "0.7.2"
|
||||
formatx = "0.2.3"
|
||||
EOF
|
||||
|
||||
mkdir src
|
||||
cat <<\EOF > src/main.rs
|
||||
use std::env;
|
||||
use std::process;
|
||||
use gettextrs::*;
|
||||
use formatx::*;
|
||||
|
||||
fn main() {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
let n: u32 = args[1].parse().unwrap_or_else(|_| { process::exit (1); });
|
||||
|
||||
setlocale (LocaleCategory::LcAll, "");
|
||||
|
||||
textdomain ("prog").expect ("textdomain failed");
|
||||
bindtextdomain ("prog", ".").expect ("bindtextdomain failed");
|
||||
/* gettext-rs requires UTF-8 encoding. */
|
||||
bind_textdomain_codeset ("prog", "UTF-8").expect ("bind_textdomain_codeset failed");
|
||||
|
||||
println! ("{}", gettext ("'Your command, please?', asked the waiter."));
|
||||
println! ("{}", formatx! (ngettext ("a piece of cake", "{} pieces of cake", n), n).unwrap());
|
||||
println! ("{}", formatx! (gettext ("{} is replaced by {}."), "FF", "EUR").unwrap());
|
||||
}
|
||||
EOF
|
||||
|
||||
: ${XGETTEXT=xgettext}
|
||||
${XGETTEXT} -o prog.tmp --omit-header --no-location src/main.rs || 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 ""
|
||||
|
||||
#, rust-format
|
||||
msgid "a piece of cake"
|
||||
msgid_plural "{} pieces of cake"
|
||||
msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#, rust-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=UTF-8\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.
|
||||
#, rust-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.
|
||||
#, rust-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
|
||||
|
||||
this_test_is_longrunning_
|
||||
|
||||
: ${CARGO=cargo}
|
||||
# This takes between 2.5 minutes (on a fast machine) and 5 minutes,
|
||||
# most of it in "Compiling locale_config v0.3.0". Sigh.
|
||||
${CARGO} build || Exit 1
|
||||
|
||||
# Test which of the fr_FR locales are installed.
|
||||
: ${LOCALE_FR=fr_FR}
|
||||
: ${LOCALE_FR_UTF8=fr_FR.UTF-8}
|
||||
if test $LOCALE_FR != none; then
|
||||
LC_ALL=$LOCALE_FR ../testlocale
|
||||
case $? in
|
||||
0) ;;
|
||||
77) LOCALE_FR=none;;
|
||||
*) Exit 1;;
|
||||
esac
|
||||
fi
|
||||
if test $LOCALE_FR_UTF8 != none; then
|
||||
LC_ALL=$LOCALE_FR_UTF8 ../testlocale
|
||||
case $? in
|
||||
0) ;;
|
||||
77) LOCALE_FR_UTF8=none;;
|
||||
*) Exit 1;;
|
||||
esac
|
||||
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
|
||||
|
||||
: ${DIFF=diff}
|
||||
cat <<\EOF > prog.ok
|
||||
«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 != none; then
|
||||
prepare_locale_ fr $LOCALE_FR
|
||||
LANGUAGE= LC_ALL=$LOCALE_FR target/debug/gettext-lang-rust 2 > prog.out1 || Exit 1
|
||||
${DIFF} prog.ok prog.out1 || Exit 1
|
||||
fi
|
||||
if test $LOCALE_FR_UTF8 != none; then
|
||||
prepare_locale_ fr $LOCALE_FR_UTF8
|
||||
LANGUAGE= LC_ALL=$LOCALE_FR_UTF8 target/debug/gettext-lang-rust 2 > prog.out2 || Exit 1
|
||||
${DIFF} prog.ok prog.out2 || Exit 1
|
||||
fi
|
||||
|
||||
Exit 0
|
||||
Loading…
x
Reference in New Issue
Block a user