diff options
| author | Bruno Haible <bruno@clisp.org> | 2019-08-25 19:17:21 +0200 |
|---|---|---|
| committer | Bruno Haible <bruno@clisp.org> | 2019-08-25 19:17:21 +0200 |
| commit | c2758ebe0a99fedc2063bda6ebbea0d1df8cd934 (patch) | |
| tree | f5e4013292b14a49f72cf53aff00ce04b8074055 /gettext-tools/tests/format-java-printf-1 | |
| parent | a55b0194e3768fc27b8ec6f098f21759f2aa4f4e (diff) | |
| download | gettext-c2758ebe0a99fedc2063bda6ebbea0d1df8cd934.tar.gz | |
Add support for Java format strings in the Formatter syntax.
* gettext-tools/src/message.h (format_type): Add format_java_printf.
(NFORMATS): Increment.
* gettext-tools/src/message.c (format_language, format_language_pretty): Add
entry for format_java_printf.
* gettext-tools/src/format.h (formatstring_java_printf): New declaration.
* gettext-tools/src/format-java.c: Update comments.
* gettext-tools/src/format-java-printf.c: New file.
* gettext-tools/src/format.c (formatstring_parsers): Add entry for
format_java_printf.
* gettext-tools/src/x-java.h (SCANNERS_JAVA): Use formatstring_java_printf.
* gettext-tools/src/x-java.c (init_flag_table_java): Add entries relevant to
format strings in Formatter syntax.
* gettext-tools/src/xgettext.c (xgettext_record_flag): Add support for
format_java_printf.
* gettext-tools/src/FILES: Add format-java-printf.c.
* gettext-tools/src/Makefile.am (FORMAT_SOURCE): Add format-java-printf.c.
* gettext-tools/woe32dll/gettextsrc-exports.c: Export formatstring_java_printf.
* gettext-tools/libgettextpo/Makefile.am (libgettextpo_la_AUXSOURCES): Likewise.
* gettext-tools/tests/xgettext-6 (xg-test6.java): Add test for recognition of
format strings in Formatter syntax.
* gettext-tools/tests/format-java-printf-1: New file.
* gettext-tools/tests/format-java-printf-2: New file.
* gettext-tools/tests/Makefile.am (TESTS): Add them.
* gettext-tools/tests/lang-java: Add two uses of String.format to the program.
* gettext-tools/doc/gettext.texi (PO Files): Document java-printf-format and
no-java-printf-format.
(java-format): Describe both kinds of format strings. Update URLs.
(Java): Mention the second kind of format string as well.
* NEWS: Mention the improvement.
Diffstat (limited to 'gettext-tools/tests/format-java-printf-1')
| -rwxr-xr-x | gettext-tools/tests/format-java-printf-1 | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/gettext-tools/tests/format-java-printf-1 b/gettext-tools/tests/format-java-printf-1 new file mode 100755 index 000000000..37d4d0d16 --- /dev/null +++ b/gettext-tools/tests/format-java-printf-1 @@ -0,0 +1,337 @@ +#! /bin/sh +. "${srcdir=.}/init.sh"; path_prepend_ . ../src + +# Test recognition of Java printf format strings. + +cat <<\EOF > f-jp-1.data +# Valid: no argument +"abc%%" +# Valid: one general argument +"abc%b" +# Valid: one general argument +"abc%B" +# Valid: one general argument +"abc%h" +# Valid: one general argument +"abc%H" +# Valid: one general argument +"abc%s" +# Valid: one general argument +"abc%S" +# Valid: one character argument +"abc%c" +# Valid: one character argument +"abc%C" +# Valid: one integer argument +"abc%d" +# Valid: one integer argument +"abc%o" +# Valid: one integer argument +"abc%x" +# Valid: one integer argument +"abc%X" +# Valid: one floating-point argument +"abc%e" +# Valid: one floating-point argument +"abc%E" +# Valid: one floating-point argument +"abc%f" +# Valid: one floating-point argument +"abc%g" +# Valid: one floating-point argument +"abc%G" +# Valid: one floating-point argument +"abc%a" +# Valid: one floating-point argument +"abc%A" +# Valid: one argument with flags +"abc%0#g" +# Valid: one argument with width +"abc%2g" +# Invalid: variable width +"abc%*g" +# Valid: one argument with precision +"abc%.4g" +# Invalid: missing precision +"abc%.g" +# Invalid: variable precision +"abc%.*g" +# Valid: one argument with width and precision +"abc%14.4g" +# Invalid: unterminated +"abc%" +# Invalid: unterminated +"abc%t" +# Invalid: unknown format specifier +"abc%y" +# Invalid: flags after width +"abc%2#d" +# Invalid: twice precision +"abc%.4.2g" +# Valid: three arguments +"abc%d%x%x" +# Valid: a numbered argument +"abc%1$d" +# Invalid: zero +"abc%0$d" +# Valid: two-digit numbered arguments +"abc%11$def%10$dgh%9$dij%8$dkl%7$dmn%6$dop%5$dqr%4$dst%3$duv%2$dwx%1$dyz" +# Invalid: unterminated number +"abc%1" +# Invalid: flags before number +"abc%#1$g" +# Valid: three arguments, two with same number +"abc%1$4x,%2$c,%1$X" +# Invalid: argument with conflicting types +"abc%1$4x,%2$c,%1$s" +# Valid: no conflict +"abc%1$4x,%2$c,%1$d" +# Valid: mixing of numbered and unnumbered arguments +"abc%d%2$x" +# Valid: mixing of numbered and unnumbered arguments +"abc%5$d%x" +# Valid: mixing of numbered and unnumbered arguments, no type conflict +"abc%2$c%x%c%g" +# Invalid: mixing of numbered and unnumbered arguments, argument with conflicting types +"abc%2$c%x%g%c" +# Valid: numbered argument with width +"abc%2$#5g" +# Valid: numbered argument with precision +"abc%1$.9g" +# Valid: numbered argument with width and precision +"abc%3$5.2g" +# Valid: missing non-final argument +"abc%2$x%3$s" +# Valid: permutation +"abc%2$ddef%1$d" +# Valid: multiple uses of same argument +"abc%2$xdef%1$Sghi%2$x" +# Valid: reference to last argument +"abc%x%<o" +# Valid: reference to last argument +"abc%2$x%<o" +# Invalid: reference to last argument when there was none +"abc%%%<d" +# Invalid: last argument refers to argument 3, conflicting types +"abc%x%3$g%<d" +# Invalid: last argument refers to argument 1, conflicting types +"abc%3$g%x%<g" +# Invalid: conflicting types +"abc%s%<c" +# Invalid: conflicting types +"abc%s%<d" +# Invalid: conflicting types +"abc%s%<f" +# Invalid: conflicting types +"abc%s%<tF" +# Invalid: conflicting types +"abc%c%<d" +# Invalid: conflicting types +"abc%c%<f" +# Invalid: conflicting types +"abc%c%<tF" +# Invalid: conflicting types +"abc%d%<f" +# Invalid: conflicting types +"abc%d%<tF" +# Invalid: conflicting types +"abc%f%<tF" +# Valid: combination of flag and conversion +"abc%-%" +# Invalid: combination of flag and conversion +"abc%#%" +# Invalid: combination of flag and conversion +"abc%+%" +# Invalid: combination of flag and conversion +"abc% %" +# Invalid: combination of flag and conversion +"abc%0%" +# Invalid: combination of flag and conversion +"abc%,%" +# Invalid: combination of flag and conversion +"abc%(%" +# Valid: combination of width and conversion +"abc%5%" +# Invalid: combination of precision and conversion +"abc%.2%" +# Invalid: combination of flag and conversion +"abc%-n" +# Invalid: combination of flag and conversion +"abc%#n" +# Invalid: combination of flag and conversion +"abc%+n" +# Invalid: combination of flag and conversion +"abc% n" +# Invalid: combination of flag and conversion +"abc%0n" +# Invalid: combination of flag and conversion +"abc%,n" +# Invalid: combination of flag and conversion +"abc%(n" +# Invalid: combination of width and conversion +"abc%5n" +# Invalid: combination of precision and conversion +"abc%.2n" +# Valid: combination of flag and conversion +"abc%-s" +# Valid: combination of flag and conversion +"abc%#s" +# Invalid: combination of flag and conversion +"abc%+s" +# Invalid: combination of flag and conversion +"abc% s" +# Invalid: combination of flag and conversion +"abc%0s" +# Invalid: combination of flag and conversion +"abc%,s" +# Invalid: combination of flag and conversion +"abc%(s" +# Valid: combination of width and conversion +"abc%5s" +# Valid: combination of precision and conversion +"abc%.2s" +# Valid: combination of flag and conversion +"abc%-c" +# Invalid: combination of flag and conversion +"abc%#c" +# Invalid: combination of flag and conversion +"abc%+c" +# Invalid: combination of flag and conversion +"abc% c" +# Invalid: combination of flag and conversion +"abc%0c" +# Invalid: combination of flag and conversion +"abc%,c" +# Invalid: combination of flag and conversion +"abc%(c" +# Valid: combination of width and conversion +"abc%5c" +# Invalid: combination of precision and conversion +"abc%.2c" +# Valid: combination of flag and conversion +"abc%-d" +# Invalid: combination of flag and conversion +"abc%#d" +# Valid: combination of flag and conversion +"abc%+d" +# Valid: combination of flag and conversion +"abc% d" +# Valid: combination of flag and conversion +"abc%0d" +# Valid: combination of flag and conversion +"abc%,d" +# Valid: combination of flag and conversion +"abc%(d" +# Valid: combination of width and conversion +"abc%5d" +# Invalid: combination of precision and conversion +"abc%.2d" +# Valid: combination of flag and conversion +"abc%-o" +# Valid: combination of flag and conversion +"abc%#o" +# Valid: combination of flag and conversion +"abc%+o" +# Valid: combination of flag and conversion +"abc% o" +# Valid: combination of flag and conversion +"abc%0o" +# Invalid: combination of flag and conversion +"abc%,o" +# Valid: combination of flag and conversion +"abc%(o" +# Valid: combination of width and conversion +"abc%5o" +# Invalid: combination of precision and conversion +"abc%.2o" +# Valid: combination of flag and conversion +"abc%-e" +# Valid: combination of flag and conversion +"abc%#e" +# Valid: combination of flag and conversion +"abc%+e" +# Valid: combination of flag and conversion +"abc% e" +# Valid: combination of flag and conversion +"abc%0e" +# Valid: combination of flag and conversion +"abc%,e" +# Valid: combination of flag and conversion +"abc%(e" +# Valid: combination of width and conversion +"abc%5e" +# Valid: combination of precision and conversion +"abc%.2e" +# Valid: combination of flag and conversion +"abc%-a" +# Valid: combination of flag and conversion +"abc%#a" +# Valid: combination of flag and conversion +"abc%+a" +# Valid: combination of flag and conversion +"abc% a" +# Valid: combination of flag and conversion +"abc%0a" +# Invalid: combination of flag and conversion +"abc%,a" +# Invalid: combination of flag and conversion +"abc%(a" +# Valid: combination of width and conversion +"abc%5a" +# Valid: combination of precision and conversion +"abc%.2a" +# Valid: combination of flag and conversion +"abc%-tF" +# Invalid: combination of flag and conversion +"abc%#tF" +# Invalid: combination of flag and conversion +"abc%+tF" +# Invalid: combination of flag and conversion +"abc% tF" +# Invalid: combination of flag and conversion +"abc%0tF" +# Invalid: combination of flag and conversion +"abc%,tF" +# Invalid: combination of flag and conversion +"abc%(tF" +# Valid: combination of width and conversion +"abc%5tF" +# Invalid: combination of precision and conversion +"abc%.2tF" +EOF + +: ${XGETTEXT=xgettext} +n=0 +while read comment; do + read string + n=`expr $n + 1` + cat <<EOF > f-jp-1-$n.in +gettext(${string}); +EOF + ${XGETTEXT} -L Java -o f-jp-1-$n.po f-jp-1-$n.in || Exit 1 + test -f f-jp-1-$n.po || Exit 1 + fail= + if echo "$comment" | grep 'Valid:' > /dev/null; then + if grep java-printf-format f-jp-1-$n.po > /dev/null; then + : + else + fail=yes + fi + else + if grep java-printf-format f-jp-1-$n.po > /dev/null; then + fail=yes + else + : + fi + fi + if test -n "$fail"; then + echo "Format string recognition error:" 1>&2 + cat f-jp-1-$n.in 1>&2 + echo "Got:" 1>&2 + cat f-jp-1-$n.po 1>&2 + Exit 1 + fi + rm -f f-jp-1-$n.in f-jp-1-$n.po +done < f-jp-1.data + +Exit 0 |
