+2013-05-12 Andreas Stricker <astricker@futurelab.ch>
+
+ Improve JavaScript scanner tests.
+ * xgettext-javascript-2: Add tests for backslash escapes and
+ _(...) call in regular expressions.
+ * xgettext-javascript-3: Use distinct temporary file names.
+ * xgettext-javascript-4: Likewise.
+ * xgettext-javascript-5: Add tests for unbalanced double-quotes in
+ regular expressions and strings.
+ * Makefile.am (TESTS): Add xgettext-javascript-5.
+
2013-05-02 Daiki Ueno <ueno@gnu.org>
* format-python-brace-2: Fix test for added argument.
xgettext-ycp-1 xgettext-ycp-2 xgettext-ycp-3 xgettext-ycp-4 \
xgettext-lua-1 xgettext-lua-2 \
xgettext-javascript-1 xgettext-javascript-2 xgettext-javascript-3 \
- xgettext-javascript-4 \
+ xgettext-javascript-4 xgettext-javascript-5 \
format-awk-1 format-awk-2 \
format-boost-1 format-boost-2 \
format-c-1 format-c-2 format-c-3 format-c-4 format-c-5 \
/foo/.match(_("RegExp test string #12"));
else
/foo/.match(_("RegExp test string #13"));
+var s7 = /a\/\f\r\n\t\v\0\b\s\S\w\W\d\D\b\Bb/.test(_("RegExp test string #14"));
+var s8 = /(?=(a+))a*b\1/.exec(_("RegExp test string #15"));
+var s9 = /_("a+")/.exec(_("RegExp test string #16"));
EOF
tmpfiles="$tmpfiles xg-js-2.err xg-js-2.tmp xg-js-2.pot"
msgid "RegExp test string #13"
msgstr ""
+
+msgid "RegExp test string #14"
+msgstr ""
+
+msgid "RegExp test string #15"
+msgstr ""
+
+msgid "RegExp test string #16"
+msgstr ""
EOF
: ${DIFF=diff}
tmpfiles=""
trap 'rm -fr $tmpfiles' 1 2 3 15
-tmpfiles="$tmpfiles xg-js-2.js"
-cat <<\EOF > xg-js-2.js
+tmpfiles="$tmpfiles xg-js-3.js"
+cat <<\EOF > xg-js-3.js
// The usual way to concatenate strings is the plus '+' sign
var s1 = _("Concatenation #1 " + "- String part added");
var s2 = _('Concatenation #2 ' + '- String part added');
' should' + " be " + 'extracted');
EOF
-tmpfiles="$tmpfiles xg-js-2.err xg-js-2.tmp xg-js-2.pot"
+tmpfiles="$tmpfiles xg-js-3.err xg-js-3.tmp xg-js-3.pot"
: ${XGETTEXT=xgettext}
-${XGETTEXT} --add-comments --no-location -o xg-js-2.tmp xg-js-2.js 2>xg-js-2.err
-test $? = 0 || { cat xg-js-2.err; rm -fr $tmpfiles; exit 1; }
-# Don't simplify this to "grep ... < xg-js-2.tmp", otherwise OpenBSD 4.0 grep
+${XGETTEXT} --add-comments --no-location -o xg-js-3.tmp xg-js-3.js 2>xg-js-3.err
+test $? = 0 || { cat xg-js-3.err; rm -fr $tmpfiles; exit 1; }
+# Don't simplify this to "grep ... < xg-js-3.tmp", otherwise OpenBSD 4.0 grep
# only outputs "Binary file (standard input) matches".
-cat xg-js-2.tmp | grep -v 'POT-Creation-Date' | LC_ALL=C tr -d '\r' > xg-js-2.pot
+cat xg-js-3.tmp | grep -v 'POT-Creation-Date' | LC_ALL=C tr -d '\r' > xg-js-3.pot
-tmpfiles="$tmpfiles xg-js-2.ok"
-cat <<\EOF > xg-js-2.ok
+tmpfiles="$tmpfiles xg-js-3.ok"
+cat <<\EOF > xg-js-3.ok
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
EOF
: ${DIFF=diff}
-${DIFF} xg-js-2.ok xg-js-2.pot
+${DIFF} xg-js-3.ok xg-js-3.pot
result=$?
rm -fr $tmpfiles
tmpfiles=""
trap 'rm -fr $tmpfiles' 1 2 3 15
-tmpfiles="$tmpfiles xg-js-1.js"
-cat <<\EOF > xg-js-1.js
+tmpfiles="$tmpfiles xg-js-4.js"
+cat <<\EOF > xg-js-4.js
var s1 = _("Unicode escape \u3042");
var s2 = _("Surrogate pair \uD835\uDC9C");
EOF
-tmpfiles="$tmpfiles xg-js-1.err xg-js-1.tmp xg-js-1.pot"
+tmpfiles="$tmpfiles xg-js-4.err xg-js-4.tmp xg-js-4.pot"
: ${XGETTEXT=xgettext}
-${XGETTEXT} --add-comments --no-location -o xg-js-1.tmp xg-js-1.js 2>xg-js-1.err
-test $? = 0 || { cat xg-js-1.err; rm -fr $tmpfiles; exit 1; }
-# Don't simplify this to "grep ... < xg-js-1.tmp", otherwise OpenBSD 4.0 grep
+${XGETTEXT} --add-comments --no-location -o xg-js-4.tmp xg-js-4.js 2>xg-js-4.err
+test $? = 0 || { cat xg-js-4.err; rm -fr $tmpfiles; exit 1; }
+# Don't simplify this to "grep ... < xg-js-4.tmp", otherwise OpenBSD 4.0 grep
# only outputs "Binary file (standard input) matches".
-cat xg-js-1.tmp | grep -v 'POT-Creation-Date' | LC_ALL=C tr -d '\r' > xg-js-1.pot
+cat xg-js-4.tmp | grep -v 'POT-Creation-Date' | LC_ALL=C tr -d '\r' > xg-js-4.pot
-tmpfiles="$tmpfiles xg-js-1.ok"
-cat <<\EOF > xg-js-1.ok
+tmpfiles="$tmpfiles xg-js-4.ok"
+cat <<\EOF > xg-js-4.ok
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
EOF
: ${DIFF=diff}
-${DIFF} xg-js-1.ok xg-js-1.pot
+${DIFF} xg-js-4.ok xg-js-4.pot
result=$?
rm -fr $tmpfiles
--- /dev/null
+#!/bin/sh
+
+# Test of JavaScript Unicode support.
+
+tmpfiles=""
+trap 'rm -fr $tmpfiles' 1 2 3 15
+
+tmpfiles="$tmpfiles xg-js-5.js"
+cat <<\EOF > xg-js-5.js
+// the following except is stolen from json2.js
+var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
+ gap,
+ txt1 = _("Expected translation string #1"),
+ indent,
+ meta = { // table of character substitutions
+ '\b': '\\b',
+ '\t': '\\t',
+ '\n': '\\n',
+ '\f': '\\f',
+ '\r': '\\r',
+ '"' : '\\"',
+ '\\': '\\\\' + _("Expected translation string #2")
+ },
+ txt2 = _("Expected translation string #3"),
+ rep;
+var matched = curnodepath.match('^\\'+path+'\\/([\\w\\s]+)') \
+ + _("Expected translation string #4");
+EOF
+
+tmpfiles="$tmpfiles xg-js-5.err xg-js-5.tmp xg-js-5.pot"
+: ${XGETTEXT=xgettext}
+${XGETTEXT} --add-comments --no-location -o xg-js-5.tmp xg-js-5.js 2>xg-js-5.err
+test $? = 0 || { cat xg-js-5.err; rm -fr $tmpfiles; exit 1; }
+# Don't simplify this to "grep ... < xg-js-5.tmp", otherwise OpenBSD 4.0 grep
+# only outputs "Binary file (standard input) matches".
+cat xg-js-5.tmp | grep -v 'POT-Creation-Date' | LC_ALL=C tr -d '\r' > xg-js-5.pot
+
+tmpfiles="$tmpfiles xg-js-5.ok"
+cat <<\EOF > xg-js-5.ok
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Expected translation string #1"
+msgstr ""
+
+msgid "Expected translation string #2"
+msgstr ""
+
+msgid "Expected translation string #3"
+msgstr ""
+
+msgid "Expected translation string #4"
+msgstr ""
+EOF
+
+: ${DIFF=diff}
+${DIFF} xg-js-5.ok xg-js-5.pot
+result=$?
+
+rm -fr $tmpfiles
+
+exit $result