summaryrefslogtreecommitdiff
path: root/gettext-tools/tests/format-java-printf-1
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2019-08-25 19:17:21 +0200
committerBruno Haible <bruno@clisp.org>2019-08-25 19:17:21 +0200
commitc2758ebe0a99fedc2063bda6ebbea0d1df8cd934 (patch)
treef5e4013292b14a49f72cf53aff00ce04b8074055 /gettext-tools/tests/format-java-printf-1
parenta55b0194e3768fc27b8ec6f098f21759f2aa4f4e (diff)
downloadgettext-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-xgettext-tools/tests/format-java-printf-1337
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