#!/bin/sh # # Copyright (c) 2010 Ævar Arnfjörð Bjarmason # global test_description := '"Gettext reencoding of our *.po/*.mo files works'" source ./lib-gettext.sh # The constants used in a tricky observation for undefined behaviour global RUNES := '"TILRAUN: ᚻᛖ ᚳᚹᚫᚦ ᚦᚫᛏ ᚻᛖ ᛒᚢᛞᛖ ᚩᚾ ᚦᚫᛗ ᛚᚪᚾᛞᛖ ᚾᚩᚱᚦᚹᛖᚪᚱᛞᚢᛗ ᚹᛁᚦ ᚦᚪ ᚹᛖᛥᚫ'" global PUNTS := '"TILRAUN: ?? ???? ??? ?? ???? ?? ??? ????? ??????????? ??? ?? ????'" global MSGKEY := '"TEST: Old English Runes'" test_expect_success GETTEXT_LOCALE 'gettext: Emitting UTF-8 from our UTF-8 *.mo files / Icelandic' ' printf "TILRAUN: Halló Heimur!" >expect && LANGUAGE=is LC_ALL="$is_IS_locale" gettext "TEST: Hello World!" >actual && test_cmp expect actual ' test_expect_success GETTEXT_LOCALE 'gettext: Emitting UTF-8 from our UTF-8 *.mo files / Runes' ' printf "%s" "$RUNES" >expect && LANGUAGE=is LC_ALL="$is_IS_locale" gettext "$MSGKEY" >actual && test_cmp expect actual ' test_expect_success GETTEXT_ISO_LOCALE 'gettext: Emitting ISO-8859-1 from our UTF-8 *.mo files / Icelandic' ' printf "TILRAUN: Halló Heimur!" | iconv -f UTF-8 -t ISO8859-1 >expect && LANGUAGE=is LC_ALL="$is_IS_iso_locale" gettext "TEST: Hello World!" >actual && test_cmp expect actual ' test_expect_success GETTEXT_ISO_LOCALE 'gettext: impossible ISO-8859-1 output' ' LANGUAGE=is LC_ALL="$is_IS_iso_locale" gettext "$MSGKEY" >runes && case "$(cat runes)" in "$MSGKEY") say "Your system gives back the key to message catalog" ;; "$PUNTS") say "Your system replaces an impossible character with ?" ;; "$RUNES") say "Your system gives back the raw message for an impossible request" ;; *) say "We never saw the error behaviour your system exhibits" false ;; esac ' test_expect_success GETTEXT_LOCALE 'gettext: Fetching a UTF-8 msgid -> UTF-8' ' printf "TILRAUN: ‚einfaldar‘ og „tvöfaldar“ gæsalappir" >expect && LANGUAGE=is LC_ALL="$is_IS_locale" gettext "TEST: ‘single’ and “double” quotes" >actual && test_cmp expect actual ' # How these quotes get transliterated depends on the gettext implementation: # # Debian: ,einfaldar' og ,,tvöfaldar" [GNU libintl] # FreeBSD: `einfaldar` og "tvöfaldar" [GNU libintl] # Solaris: ?einfaldar? og ?tvöfaldar? [Solaris libintl] # # Just make sure the contents are transliterated, and don't use grep -q # so that these differences are emitted under --verbose for curious # eyes. test_expect_success GETTEXT_ISO_LOCALE 'gettext: Fetching a UTF-8 msgid -> ISO-8859-1' ' LANGUAGE=is LC_ALL="$is_IS_iso_locale" gettext "TEST: ‘single’ and “double” quotes" >actual && grep "einfaldar" actual && grep "$(echo tvöfaldar | iconv -f UTF-8 -t ISO8859-1)" actual ' test_expect_success GETTEXT_LOCALE 'gettext.c: git init UTF-8 -> UTF-8' ' printf "Bjó til tóma Git lind" >expect && LANGUAGE=is LC_ALL="$is_IS_locale" git init repo >actual && test_when_finished "rm -rf repo" && grep "^$(cat expect) " actual ' test_expect_success GETTEXT_ISO_LOCALE 'gettext.c: git init UTF-8 -> ISO-8859-1' ' printf "Bjó til tóma Git lind" >expect && LANGUAGE=is LC_ALL="$is_IS_iso_locale" git init repo >actual && test_when_finished "rm -rf repo" && grep "^$(cat expect | iconv -f UTF-8 -t ISO8859-1) " actual ' test_done (CommandList children: [ (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:test_description) op: Equal rhs: {(DQ ("Gettext reencoding of our *.po/*.mo files works"))} spids: [13] ) ] spids: [13] ) (C {(.)} {(./lib-gettext.sh)}) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:RUNES) op: Equal rhs: { (DQ ( "TILRAUN: \u16bb\u16d6 \u16b3\u16b9\u16ab\u16a6 \u16a6\u16ab\u16cf \u16bb\u16d6 \u16d2\u16a2\u16de\u16d6 \u16a9\u16be \u16a6\u16ab\u16d7 \u16da\u16aa\u16be\u16de\u16d6 \u16be\u16a9\u16b1\u16a6\u16b9\u16d6\u16aa\u16b1\u16de\u16a2\u16d7 \u16b9\u16c1\u16a6 \u16a6\u16aa \u16b9\u16d6\u16e5\u16ab" ) ) } spids: [27] ) ] spids: [27] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:PUNTS) op: Equal rhs: {(DQ ("TILRAUN: ?? ???? ??? ?? ???? ?? ??? ????? ??????????? ??? ?? ????"))} spids: [32] ) ] spids: [32] ) (Assignment keyword: Assign_None pairs: [ (assign_pair lhs: (LhsName name:MSGKEY) op: Equal rhs: {(DQ ("TEST: Old English Runes"))} spids: [37] ) ] spids: [37] ) (C {(test_expect_success)} {(GETTEXT_LOCALE)} {(SQ <"gettext: Emitting UTF-8 from our UTF-8 *.mo files / Icelandic">)} { (SQ <"\n"> <" printf \"TILRAUN: Hall\u00f3 Heimur!\" >expect &&\n"> <" LANGUAGE=is LC_ALL=\"$is_IS_locale\" gettext \"TEST: Hello World!\" >actual &&\n"> <" test_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_LOCALE)} {(SQ <"gettext: Emitting UTF-8 from our UTF-8 *.mo files / Runes">)} { (SQ <"\n"> <" printf \"%s\" \"$RUNES\" >expect &&\n"> <" LANGUAGE=is LC_ALL=\"$is_IS_locale\" gettext \"$MSGKEY\" >actual &&\n"> <" test_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_ISO_LOCALE)} {(SQ <"gettext: Emitting ISO-8859-1 from our UTF-8 *.mo files / Icelandic">)} { (SQ <"\n"> <" printf \"TILRAUN: Hall\u00f3 Heimur!\" | iconv -f UTF-8 -t ISO8859-1 >expect &&\n"> <" LANGUAGE=is LC_ALL=\"$is_IS_iso_locale\" gettext \"TEST: Hello World!\" >actual &&\n"> <" test_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_ISO_LOCALE)} {(SQ <"gettext: impossible ISO-8859-1 output">)} { (SQ <"\n"> <"\tLANGUAGE=is LC_ALL=\"$is_IS_iso_locale\" gettext \"$MSGKEY\" >runes &&\n"> <"\tcase \"$(cat runes)\" in\n"> <"\t\"$MSGKEY\")\n"> <"\t\tsay \"Your system gives back the key to message catalog\"\n"> <"\t\t;;\n"> <"\t\"$PUNTS\")\n"> <"\t\tsay \"Your system replaces an impossible character with ?\"\n"> <"\t\t;;\n"> <"\t\"$RUNES\")\n"> <"\t\tsay \"Your system gives back the raw message for an impossible request\"\n"> <"\t\t;;\n"> <"\t*)\n"> <"\t\tsay \"We never saw the error behaviour your system exhibits\"\n"> <"\t\tfalse\n"> <"\t\t;;\n"> <"\tesac\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_LOCALE)} {(SQ <"gettext: Fetching a UTF-8 msgid -> UTF-8">)} { (SQ <"\n"> < " printf \"TILRAUN: \u201aeinfaldar\u2018 og \u201etv\u00f6faldar\u201c g\u00e6salappir\" >expect &&\n" > < " LANGUAGE=is LC_ALL=\"$is_IS_locale\" gettext \"TEST: \u2018single\u2019 and \u201cdouble\u201d quotes\" >actual &&\n" > <" test_cmp expect actual\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_ISO_LOCALE)} {(SQ <"gettext: Fetching a UTF-8 msgid -> ISO-8859-1">)} { (SQ <"\n"> < " LANGUAGE=is LC_ALL=\"$is_IS_iso_locale\" gettext \"TEST: \u2018single\u2019 and \u201cdouble\u201d quotes\" >actual &&\n" > <" grep \"einfaldar\" actual &&\n"> <" grep \"$(echo tv\u00f6faldar | iconv -f UTF-8 -t ISO8859-1)\" actual\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_LOCALE)} {(SQ <"gettext.c: git init UTF-8 -> UTF-8">)} { (SQ <"\n"> <" printf \"Bj\u00f3 til t\u00f3ma Git lind\" >expect &&\n"> <" LANGUAGE=is LC_ALL=\"$is_IS_locale\" git init repo >actual &&\n"> <" test_when_finished \"rm -rf repo\" &&\n"> <" grep \"^$(cat expect) \" actual\n"> ) } ) (C {(test_expect_success)} {(GETTEXT_ISO_LOCALE)} {(SQ <"gettext.c: git init UTF-8 -> ISO-8859-1">)} { (SQ <"\n"> <" printf \"Bj\u00f3 til t\u00f3ma Git lind\" >expect &&\n"> <" LANGUAGE=is LC_ALL=\"$is_IS_iso_locale\" git init repo >actual &&\n"> <" test_when_finished \"rm -rf repo\" &&\n"> <" grep \"^$(cat expect | iconv -f UTF-8 -t ISO8859-1) \" actual\n"> ) } ) (C {(test_done)}) ] )