package gotext import ( "fmt" "os" "reflect" ) func showColour() bool { return os.Getenv("NO_COLOUR") == "" } func testStart(name string) { fmt.Fprintf(os.Stderr, "%s:\n", name) } func testing(message string, body func()) { if showColour() { fmt.Fprintf( os.Stderr, "\033[0;33mtesting\033[0m: %s... ", message, ) body() fmt.Fprintf(os.Stderr, "\033[0;32mOK\033[0m.\n") } else { fmt.Fprintf(os.Stderr, "testing: %s... ", message) body() fmt.Fprintf(os.Stderr, "OK.\n") } } func assertEq(given any, expected any) { if !reflect.DeepEqual(given, expected) { if showColour() { fmt.Fprintf(os.Stderr, "\033[0;31mERR\033[0m.\n") } else { fmt.Fprintf(os.Stderr, "ERR.\n") } fmt.Fprintf(os.Stderr, "given != expected\n") fmt.Fprintf(os.Stderr, "given: %#v\n", given) fmt.Fprintf(os.Stderr, "expected: %#v\n", expected) os.Exit(1) } } func MainTest() { Init("tests", "locale/") testing("Español", func() { SetLocale(LC_MESSAGES, "es_MX.UTF-8") assertEq(Gettext("Hello, world!"), "¡Hola, mundo!") assertEq(Gettext("Good morning"), "Buenos días") assertEq(Gettext("Good bye!"), "¡Hasta luego!") assertEq(Sprintf( NGettext("An apple", "%d apples", 1), 1, "garbage", ), "Una manzana") assertEq(Sprintf( NGettext("An apple", "%d apples", 3), 3, ), "3 manzanas") }) testing("Deutsch", func() { SetLocale(LC_MESSAGES, "de_DE.UTF-8") assertEq(Gettext("Hello, world!"), "Hallo, Welt!") assertEq(Gettext("Good morning"), "Guten Morgen") assertEq(Gettext("Good bye!"), "Auf Wiedersehen!") assertEq(Sprintf( NGettext("An apple", "%d apples", 1), 1, "garbage", ), "Ein Apfel") assertEq(Sprintf( NGettext("An apple", "%d apples", 3), 3, ), "3 Äpfel") }) testing("Français", func() { SetLocale(LC_MESSAGES, "fr_FR.UTF-8") assertEq(Gettext("Hello, world!"), "Hello, world!") assertEq(Gettext("Good morning"), "Good morning") assertEq(Gettext("Good bye!"), "Good bye!") assertEq(Sprintf( NGettext("An apple", "%d apples", 1), 1, "garbage", ), "An apple") assertEq(Sprintf( NGettext("An apple", "%d apples", 3), 3, ), "3 apples") }) }