#!/bin/sh
. "${srcdir=.}/init.sh"; path_prepend_ . ../src

# More tests for C# support: string syntax

LC_ALL=C tr '%' '\015' <<\EOF > xg-cs-3.cs
class TestCase {
  public static void Main (String[] args) {
    // Test recognition of \u escapes.
    GetString ("B\u00f6se B\u00fcbchen");
    // \u escapes with more than one u are invalid.
    GetString ("Japanese: \uu65e5\uuu672c\u8A9e");
    GetString ("embedded\nnewline");
    // Spaces from end of comment are removed.    %GetString("dummy");
    // Two backslashes (unlike in Java, where this is just one backslash).
    GetString ("\u005c\u005c");
    // A 6-character string (unlike in Java, where this is just one backslash).
    GetString ("\\u005c");
    // A single backslash.
    GetString ("\\");
    // There is only one \u recognition pass.
    GetString ("\u005cu005c");
    // Octal escape sequences are not recognized, except for \0.
    GetString ("\134");
    // Escape sequences in strings.
    GetString ("t -> \t, b -> \b, n -> \n, dquote -> \", squote -> \' ...");
    // Hex escapes are recognized.
    GetString ("bel: \x07\n");
    GetString // Recognized despite comments
       ( /* Even across multiline
comment! */ "this is a single " /* now comes the concatenation! */ + // after +
         "long line");
    // Verbatim string literals are extracted.
    GetString (@"verbatim 1");
    // In verbatim string literals, no escape sequences are recognized.
    GetString (@"verbatim 2 \u005c \\ \t \b \n \'");
    // In verbatim string literals, only doubled delimiters are recognized.
    GetString (@"verbatim 3 ""test");
    // Normal and verbatim string literals can be concatenated.
    GetString ("left - \"quot" + @"ation"" - right");
    // Character literals are not extracted.
    GetString ('x');
    // Invalid concatenations are not concatenated.
    GetString ("fooba"+'r');
    // Verify that a comma inside braces is hidden.
    MyGetString (new Object[] { "don't", "fool", "me" }, "this is the second argument");
  }
}
EOF

: ${XGETTEXT=xgettext}
# delete POT-Creation-Date: line because the date depends on local time.
${XGETTEXT} --output xg-cs-3.tmp --add-location -c -kMyGetString:2 xg-cs-3.cs 2>/dev/null || Exit 1
sed -e '/\"POT-Creation-Date:.*/d' < xg-cs-3.tmp | LC_ALL=C tr -d '\r' > xg-cs-3.po || Exit 1

cat <<\EOF > xg-cs-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.
# 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=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. Test recognition of \u escapes.
#: xg-cs-3.cs:4
msgid "Böse Bübchen"
msgstr ""

#. \u escapes with more than one u are invalid.
#: xg-cs-3.cs:6
msgid "Japanese: \\uu65e5\\uuu672c語"
msgstr ""

#: xg-cs-3.cs:7
msgid ""
"embedded\n"
"newline"
msgstr ""

#. Spaces from end of comment are removed.
#: xg-cs-3.cs:8
msgid "dummy"
msgstr ""

#. Two backslashes (unlike in Java, where this is just one backslash).
#: xg-cs-3.cs:10
msgid "\\\\"
msgstr ""

#. A 6-character string (unlike in Java, where this is just one backslash).
#. There is only one \u recognition pass.
#: xg-cs-3.cs:12 xg-cs-3.cs:16
msgid "\\u005c"
msgstr ""

#. A single backslash.
#: xg-cs-3.cs:14
msgid "\\"
msgstr ""

#. Octal escape sequences are not recognized, except for \0.
#: xg-cs-3.cs:18
msgid "\\134"
msgstr ""

#. Escape sequences in strings.
#: xg-cs-3.cs:20
msgid ""
"t -> \t, b -> \b, n -> \n"
", dquote -> \", squote -> ' ..."
msgstr ""

#. Hex escapes are recognized.
#: xg-cs-3.cs:22
msgid "bel: \a\n"
msgstr ""

#. Recognized despite comments
#. Even across multiline
#. comment!
#: xg-cs-3.cs:25
msgid "this is a single long line"
msgstr ""

#. Verbatim string literals are extracted.
#: xg-cs-3.cs:28
msgid "verbatim 1"
msgstr ""

#. In verbatim string literals, no escape sequences are recognized.
#: xg-cs-3.cs:30
msgid "verbatim 2 \\u005c \\\\ \\t \\b \\n \\'"
msgstr ""

#. In verbatim string literals, only doubled delimiters are recognized.
#: xg-cs-3.cs:32
msgid "verbatim 3 \"test"
msgstr ""

#. Normal and verbatim string literals can be concatenated.
#: xg-cs-3.cs:34
msgid "left - \"quotation\" - right"
msgstr ""

#. Invalid concatenations are not concatenated.
#: xg-cs-3.cs:38
msgid "fooba"
msgstr ""

#. Verify that a comma inside braces is hidden.
#: xg-cs-3.cs:40
msgid "this is the second argument"
msgstr ""
EOF

: ${DIFF=diff}
${DIFF} xg-cs-3.ok xg-cs-3.po
result=$?

exit $result
