1*946379e7Schristos#!/bin/sh 2*946379e7Schristos 3*946379e7Schristos# More tests for C# support: string syntax 4*946379e7Schristos 5*946379e7Schristostmpfiles="" 6*946379e7Schristostrap 'rm -fr $tmpfiles' 1 2 3 15 7*946379e7Schristos 8*946379e7Schristostmpfiles="$tmpfiles xg-cs-3.cs" 9*946379e7Schristostr '%' '\015' <<\EOF > xg-cs-3.cs 10*946379e7Schristosclass TestCase { 11*946379e7Schristos public static void Main (String[] args) { 12*946379e7Schristos // Test recognition of \u escapes. 13*946379e7Schristos GetString ("B\u00f6se B\u00fcbchen"); 14*946379e7Schristos // \u escapes with more than one u are invalid. 15*946379e7Schristos GetString ("Japanese: \uu65e5\uuu672c\u8A9e"); 16*946379e7Schristos GetString ("embedded\nnewline"); 17*946379e7Schristos // Spaces from end of comment are removed. %GetString("dummy"); 18*946379e7Schristos // Two backslashes (unlike in Java, where this is just one backslash). 19*946379e7Schristos GetString ("\u005c\u005c"); 20*946379e7Schristos // A 6-character string (unlike in Java, where this is just one backslash). 21*946379e7Schristos GetString ("\\u005c"); 22*946379e7Schristos // A single backslash. 23*946379e7Schristos GetString ("\\"); 24*946379e7Schristos // There is only one \u recognition pass. 25*946379e7Schristos GetString ("\u005cu005c"); 26*946379e7Schristos // Octal escape sequences are not recognized, except for \0. 27*946379e7Schristos GetString ("\134"); 28*946379e7Schristos // Escape sequences in strings. 29*946379e7Schristos GetString ("t -> \t, b -> \b, n -> \n, dquote -> \", squote -> \' ..."); 30*946379e7Schristos // Hex escapes are recognized. 31*946379e7Schristos GetString ("bel: \x07\n"); 32*946379e7Schristos GetString // Recognized despite comments 33*946379e7Schristos ( /* Even across multiline 34*946379e7Schristoscomment! */ "this is a single " /* now comes the concatenation! */ + // after + 35*946379e7Schristos "long line"); 36*946379e7Schristos // Verbatim string literals are extracted. 37*946379e7Schristos GetString (@"verbatim 1"); 38*946379e7Schristos // In verbatim string literals, no escape sequences are recognized. 39*946379e7Schristos GetString (@"verbatim 2 \u005c \\ \t \b \n \'"); 40*946379e7Schristos // In verbatim string literals, only doubled delimiters are recognized. 41*946379e7Schristos GetString (@"verbatim 3 ""test"); 42*946379e7Schristos // Normal and verbatim string literals can be concatenated. 43*946379e7Schristos GetString ("left - \"quot" + @"ation"" - right"); 44*946379e7Schristos // Character literals are not extracted. 45*946379e7Schristos GetString ('x'); 46*946379e7Schristos // Invalid concatenations are not concatenated. 47*946379e7Schristos GetString ("fooba"+'r'); 48*946379e7Schristos // Verify that a comma inside braces is hidden. 49*946379e7Schristos MyGetString (new Object[] { "don't", "fool", "me" }, "this is the second argument"); 50*946379e7Schristos } 51*946379e7Schristos} 52*946379e7SchristosEOF 53*946379e7Schristos 54*946379e7Schristostmpfiles="$tmpfiles xg-cs-3.po" 55*946379e7Schristos: ${XGETTEXT=xgettext} 56*946379e7Schristos# delete POT-Creation-Date: line because the date depends on local time. 57*946379e7Schristos${XGETTEXT} --output - --add-location -c -kMyGetString:2 xg-cs-3.cs 2>/dev/null \ 58*946379e7Schristos | sed '/\"POT-Creation-Date:.*/d' > xg-cs-3.po 59*946379e7Schristostest $? = 0 || { rm -fr $tmpfiles; exit 1; } 60*946379e7Schristos 61*946379e7Schristostmpfiles="$tmpfiles xg-cs-3.ok" 62*946379e7Schristoscat <<\EOF > xg-cs-3.ok 63*946379e7Schristos# SOME DESCRIPTIVE TITLE. 64*946379e7Schristos# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 65*946379e7Schristos# This file is distributed under the same license as the PACKAGE package. 66*946379e7Schristos# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. 67*946379e7Schristos# 68*946379e7Schristos#, fuzzy 69*946379e7Schristosmsgid "" 70*946379e7Schristosmsgstr "" 71*946379e7Schristos"Project-Id-Version: PACKAGE VERSION\n" 72*946379e7Schristos"Report-Msgid-Bugs-To: \n" 73*946379e7Schristos"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 74*946379e7Schristos"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 75*946379e7Schristos"Language-Team: LANGUAGE <LL@li.org>\n" 76*946379e7Schristos"MIME-Version: 1.0\n" 77*946379e7Schristos"Content-Type: text/plain; charset=UTF-8\n" 78*946379e7Schristos"Content-Transfer-Encoding: 8bit\n" 79*946379e7Schristos 80*946379e7Schristos#. Test recognition of \u escapes. 81*946379e7Schristos#: xg-cs-3.cs:4 82*946379e7Schristosmsgid "Böse Bübchen" 83*946379e7Schristosmsgstr "" 84*946379e7Schristos 85*946379e7Schristos#. \u escapes with more than one u are invalid. 86*946379e7Schristos#: xg-cs-3.cs:6 87*946379e7Schristosmsgid "Japanese: \\uu65e5\\uuu672c語" 88*946379e7Schristosmsgstr "" 89*946379e7Schristos 90*946379e7Schristos#: xg-cs-3.cs:7 91*946379e7Schristosmsgid "" 92*946379e7Schristos"embedded\n" 93*946379e7Schristos"newline" 94*946379e7Schristosmsgstr "" 95*946379e7Schristos 96*946379e7Schristos#. Spaces from end of comment are removed. 97*946379e7Schristos#: xg-cs-3.cs:8 98*946379e7Schristosmsgid "dummy" 99*946379e7Schristosmsgstr "" 100*946379e7Schristos 101*946379e7Schristos#. Two backslashes (unlike in Java, where this is just one backslash). 102*946379e7Schristos#: xg-cs-3.cs:10 103*946379e7Schristosmsgid "\\\\" 104*946379e7Schristosmsgstr "" 105*946379e7Schristos 106*946379e7Schristos#. A 6-character string (unlike in Java, where this is just one backslash). 107*946379e7Schristos#. There is only one \u recognition pass. 108*946379e7Schristos#: xg-cs-3.cs:12 xg-cs-3.cs:16 109*946379e7Schristosmsgid "\\u005c" 110*946379e7Schristosmsgstr "" 111*946379e7Schristos 112*946379e7Schristos#. A single backslash. 113*946379e7Schristos#: xg-cs-3.cs:14 114*946379e7Schristosmsgid "\\" 115*946379e7Schristosmsgstr "" 116*946379e7Schristos 117*946379e7Schristos#. Octal escape sequences are not recognized, except for \0. 118*946379e7Schristos#: xg-cs-3.cs:18 119*946379e7Schristosmsgid "\\134" 120*946379e7Schristosmsgstr "" 121*946379e7Schristos 122*946379e7Schristos#. Escape sequences in strings. 123*946379e7Schristos#: xg-cs-3.cs:20 124*946379e7Schristosmsgid "" 125*946379e7Schristos"t -> \t, b -> \b, n -> \n" 126*946379e7Schristos", dquote -> \", squote -> ' ..." 127*946379e7Schristosmsgstr "" 128*946379e7Schristos 129*946379e7Schristos#. Hex escapes are recognized. 130*946379e7Schristos#: xg-cs-3.cs:22 131*946379e7Schristosmsgid "bel: \a\n" 132*946379e7Schristosmsgstr "" 133*946379e7Schristos 134*946379e7Schristos#. Recognized despite comments 135*946379e7Schristos#. Even across multiline 136*946379e7Schristos#. comment! 137*946379e7Schristos#: xg-cs-3.cs:25 138*946379e7Schristosmsgid "this is a single long line" 139*946379e7Schristosmsgstr "" 140*946379e7Schristos 141*946379e7Schristos#. Verbatim string literals are extracted. 142*946379e7Schristos#: xg-cs-3.cs:28 143*946379e7Schristosmsgid "verbatim 1" 144*946379e7Schristosmsgstr "" 145*946379e7Schristos 146*946379e7Schristos#. In verbatim string literals, no escape sequences are recognized. 147*946379e7Schristos#: xg-cs-3.cs:30 148*946379e7Schristosmsgid "verbatim 2 \\u005c \\\\ \\t \\b \\n \\'" 149*946379e7Schristosmsgstr "" 150*946379e7Schristos 151*946379e7Schristos#. In verbatim string literals, only doubled delimiters are recognized. 152*946379e7Schristos#: xg-cs-3.cs:32 153*946379e7Schristosmsgid "verbatim 3 \"test" 154*946379e7Schristosmsgstr "" 155*946379e7Schristos 156*946379e7Schristos#. Normal and verbatim string literals can be concatenated. 157*946379e7Schristos#: xg-cs-3.cs:34 158*946379e7Schristosmsgid "left - \"quotation\" - right" 159*946379e7Schristosmsgstr "" 160*946379e7Schristos 161*946379e7Schristos#. Invalid concatenations are not concatenated. 162*946379e7Schristos#: xg-cs-3.cs:38 163*946379e7Schristosmsgid "fooba" 164*946379e7Schristosmsgstr "" 165*946379e7Schristos 166*946379e7Schristos#. Verify that a comma inside braces is hidden. 167*946379e7Schristos#: xg-cs-3.cs:40 168*946379e7Schristosmsgid "this is the second argument" 169*946379e7Schristosmsgstr "" 170*946379e7SchristosEOF 171*946379e7Schristos 172*946379e7Schristos: ${DIFF=diff} 173*946379e7Schristos${DIFF} xg-cs-3.ok xg-cs-3.po 174*946379e7Schristosresult=$? 175*946379e7Schristos 176*946379e7Schristosrm -fr $tmpfiles 177*946379e7Schristos 178*946379e7Schristosexit $result 179