Locale-Maketext-Gettext/t/10-f-switching.t

417 lines
11 KiB
Perl
Raw Permalink Normal View History

#! /usr/bin/perl -w
# Test suite on the functional interface for switching between different settings
# Copyright (c) 2003-2008 imacat. All rights reserved. This program is free
# software; you can redistribute it and/or modify it under the same terms
# as Perl itself.
use 5.008;
use strict;
use warnings;
use Test;
BEGIN { plan tests => 63 }
use FindBin;
use File::Spec::Functions qw(catdir catfile);
use lib $FindBin::Bin;
use vars qw($LOCALEDIR $r);
$LOCALEDIR = catdir($FindBin::Bin, "locale");
delete $ENV{$_}
foreach qw(LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES LC_NUMERIC
LC_MONETARY LC_TIME LANG);
# Switching between different settings
use File::Copy qw(copy);
use vars qw($dir1 $dir2 $dir3 $f1 $f11 $f12 $f2 $f21 $f3 $f31 $class);
# dmaketext in the middle
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
get_handle("en");
bindtextdomain("test", $LOCALEDIR);
bindtextdomain("test2", $LOCALEDIR);
textdomain("test");
$_[0] = __("Hello, world!");
$_[1] = pmaketext("Menu|File|", "Hello, world!");
$_[2] = __("Every story has a happy ending.");
$_[3] = pmaketext("Menu|File|", "Every story has a happy ending.");
$_[4] = dmaketext("test2", "Hello, world!");
$_[5] = dpmaketext("test2", "Menu|File|", "Hello, world!");
$_[6] = dmaketext("test2", "Every story has a happy ending.");
$_[7] = dpmaketext("test2", "Menu|File|", "Every story has a happy ending.");
$_[8] = __("Hello, world!");
$_[9] = pmaketext("Menu|File|", "Hello, world!");
$_[10] = __("Every story has a happy ending.");
$_[11] = pmaketext("Menu|File|", "Every story has a happy ending.");
return 1;
};
# 1
ok($r, 1);
# 2
ok($_[0], "Hiya :)");
# 3
ok($_[1], "Hiya :) under the File menu");
# 4
ok($_[2], "Every story has a happy ending.");
# 5
ok($_[3], "Every story has a happy ending.");
# 6
ok($_[4], "Hello, world!");
# 6
ok($_[5], "Hello, world!");
# 8
ok($_[6], "Pray it.");
# 9
ok($_[7], "Pray it under the File menu");
# 10
ok($_[8], "Hiya :)");
# 11
ok($_[9], "Hiya :) under the File menu");
# 12
ok($_[10], "Every story has a happy ending.");
# 13
ok($_[11], "Every story has a happy ending.");
# Switch between domains
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
bindtextdomain("test", $LOCALEDIR);
bindtextdomain("test2", $LOCALEDIR);
get_handle("en");
textdomain("test");
$_[0] = __("Hello, world!");
$_[1] = __("Every story has a happy ending.");
textdomain("test2");
$_[2] = __("Hello, world!");
$_[3] = __("Every story has a happy ending.");
textdomain("test");
$_[4] = __("Hello, world!");
$_[5] = __("Every story has a happy ending.");
return 1;
};
# 14
ok($r, 1);
# 15
ok($_[0], "Hiya :)");
# 16
ok($_[1], "Every story has a happy ending.");
# 17
ok($_[2], "Hello, world!");
# 18
ok($_[3], "Pray it.");
# 19
ok($_[4], "Hiya :)");
# 20
ok($_[5], "Every story has a happy ending.");
# Switch between languages
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
bindtextdomain("test", $LOCALEDIR);
textdomain("test");
get_handle("en");
$_[0] = __("Hello, world!");
get_handle("zh-tw");
$_[1] = __("Hello, world!");
get_handle("zh-cn");
$_[2] = __("Hello, world!");
return 1;
};
# 21
ok($r, 1);
# 22
ok($_[0], "Hiya :)");
# 23
ok($_[1], "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
# 24
ok($_[2], "<22><><EFBFBD>Һá<D2BA>");
# Switch between languages - by environment
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
bindtextdomain("test", $LOCALEDIR);
textdomain("test");
$ENV{"LANG"} = "en";
get_handle();
$_[0] = __("Hello, world!");
$ENV{"LANG"} = "zh-tw";
get_handle();
$_[1] = __("Hello, world!");
$ENV{"LANG"} = "zh-cn";
get_handle();
$_[2] = __("Hello, world!");
return 1;
};
# 25
ok($r, 1);
# 26
ok($_[0], "Hiya :)");
# 27
ok($_[1], "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
# 28
ok($_[2], "<22><><EFBFBD>Һá<D2BA>");
# Switch between different language methods
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
bindtextdomain("test", $LOCALEDIR);
textdomain("test");
get_handle("en");
$_[0] = __("Hello, world!");
$ENV{"LANG"} = "zh-tw";
get_handle();
$_[1] = __("Hello, world!");
get_handle("zh-cn");
$_[2] = __("Hello, world!");
$ENV{"LANG"} = "en";
get_handle();
$_[3] = __("Hello, world!");
return 1;
};
# 29
ok($r, 1);
# 30
ok($_[0], "Hiya :)");
# 31
ok($_[1], "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
# 32
ok($_[2], "<22><><EFBFBD>Һá<D2BA>");
# 33
ok($_[3], "Hiya :)");
# Reuse of a same text domain class
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
$ENV{"LANG"} = "en";
bindtextdomain("test", $LOCALEDIR);
textdomain("test");
get_handle();
$_[0] = __("Hello, world!");
$_[1] = __("Every story has a happy ending.");
$_[2] = ref($Locale::Maketext::Gettext::Functions::LH);
$_[2] =~ s/^(.+)::.*?$/$1/;
bindtextdomain("test2", $LOCALEDIR);
textdomain("test2");
get_handle("zh-tw");
$_[3] = __("Hello, world!");
$_[4] = __("Every story has a happy ending.");
bindtextdomain("test", "/dev/null");
textdomain("test");
get_handle("en");
$_[5] = __("Hello, world!");
$_[6] = __("Every story has a happy ending.");
bindtextdomain("test", $LOCALEDIR);
textdomain("test");
get_handle("zh-cn");
$_[7] = __("Hello, world!");
$_[8] = __("Every story has a happy ending.");
$_[9] = ref($Locale::Maketext::Gettext::Functions::LH);
$_[9] =~ s/^(.+)::.*?$/$1/;
return 1;
};
# 34
ok($r, 1);
# 35
ok($_[0], "Hiya :)");
# 36
ok($_[1], "Every story has a happy ending.");
# 37
ok($_[3], "Hello, world!");
# 38
ok($_[4], "<22>G<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C");
# 39
ok($_[5], "Hello, world!");
# 40
ok($_[6], "Every story has a happy ending.");
# 41
ok($_[7], "<22><><EFBFBD>Һá<D2BA>");
# 42
ok($_[8], "Every story has a happy ending.");
# 43
ok($_[2], $_[9]);
# Language addition/removal
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
$dir1 = catdir($LOCALEDIR, "en", "LC_MESSAGES");
$dir2 = catdir($LOCALEDIR, "zh_TW", "LC_MESSAGES");
$dir3 = catdir($LOCALEDIR, "zh_CN", "LC_MESSAGES");
$f1 = catfile($dir1, "test_dyn.mo");
$f11 = catfile($dir1, "test.mo");
$f2 = catfile($dir2, "test_dyn.mo");
$f21 = catfile($dir2, "test.mo");
$f3 = catfile($dir3, "test_dyn.mo");
$f31 = catfile($dir3, "test.mo");
unlink $f1;
unlink $f2;
unlink $f3;
bindtextdomain("test_dyn", $LOCALEDIR);
textdomain("test_dyn");
get_handle("zh-tw");
$_[0] = __("Hello, world!");
get_handle("zh-cn");
$_[1] = __("Hello, world!");
copy $f21, $f2 or die "ERROR: $f21 $f2: $!";
textdomain("test_dyn");
get_handle("zh-tw");
$_[2] = __("Hello, world!");
get_handle("zh-cn");
$_[3] = __("Hello, world!");
unlink $f2;
copy $f31, $f3 or die "ERROR: $f31 $f3: $!";
textdomain("test_dyn");
get_handle("zh-tw");
$_[4] = __("Hello, world!");
get_handle("zh-cn");
$_[5] = __("Hello, world!");
copy $f21, $f2 or die "ERROR: $f21 $f2: $!";
textdomain("test_dyn");
get_handle("zh-tw");
$_[6] = __("Hello, world!");
get_handle("zh-cn");
$_[7] = __("Hello, world!");
unlink $f2;
unlink $f3;
textdomain("test_dyn");
get_handle("zh-tw");
$_[8] = __("Hello, world!");
get_handle("zh-cn");
$_[9] = __("Hello, world!");
unlink $f1;
unlink $f2;
unlink $f3;
return 1;
};
# 44
ok($r, 1);
# 45
ok($_[0], "Hello, world!");
# 46
ok($_[1], "Hello, world!");
# 47
ok($_[2], "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
# 48
ok($_[3], "Hello, world!");
# 49
ok($_[4], "Hello, world!");
# 50
ok($_[5], "<22><><EFBFBD>Һá<D2BA>");
# 51
ok($_[6], "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
# 52
ok($_[7], "<22><><EFBFBD>Һá<D2BA>");
# 53
ok($_[8], "Hello, world!");
# 54
ok($_[9], "Hello, world!");
# Garbage collection - drop abandoned language handles
$r = eval {
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
$dir1 = catdir($LOCALEDIR, "en", "LC_MESSAGES");
$dir2 = catdir($LOCALEDIR, "zh_TW", "LC_MESSAGES");
$dir3 = catdir($LOCALEDIR, "zh_CN", "LC_MESSAGES");
$f1 = catfile($dir1, "test_dyn.mo");
$f11 = catfile($dir1, "test.mo");
$f2 = catfile($dir2, "test_dyn.mo");
$f21 = catfile($dir2, "test.mo");
$f3 = catfile($dir3, "test_dyn.mo");
$f31 = catfile($dir3, "test.mo");
unlink $f1;
unlink $f2;
unlink $f3;
copy $f11, $f1 or die "ERROR: $f11 $f1: $!";
copy $f21, $f2 or die "ERROR: $f21 $f2: $!";
textdomain("test_dyn");
get_handle("en");
get_handle("zh-tw");
get_handle("zh-cn");
$class = ref($Locale::Maketext::Gettext::Functions::LH);
$class =~ s/^(.+)::.*?$/$1/;
unlink $f2;
copy $f31, $f3 or die "ERROR: $f31 $f3: $!";
textdomain("test_dyn");
get_handle("en");
get_handle("zh-tw");
get_handle("zh-cn");
@_ = grep /^$class/, keys %Locale::Maketext::Gettext::Functions::LHS;
return 1;
};
# 55
ok($r, 1);
# 56
ok(scalar(@_), 0);
# Reload the text
$r = eval {
$dir1 = catdir($LOCALEDIR, "en", "LC_MESSAGES");
$f1 = catfile($dir1, "test_reload.mo");
$f11 = catfile($dir1, "test.mo");
$f12 = catfile($dir1, "test2.mo");
unlink $f1;
copy $f11, $f1 or die "ERROR: $f11 $f1: $!";
use Locale::Maketext::Gettext::Functions;
Locale::Maketext::Gettext::Functions::_reset();
@_ = qw();
bindtextdomain("test_reload", $LOCALEDIR);
textdomain("test_reload");
get_handle("en");
$_[0] = __("Hello, world!");
$_[1] = __("Every story has a happy ending.");
unlink $f1;
copy $f12, $f1 or die "ERROR: $f12 $f1: $!";
$_[2] = __("Hello, world!");
$_[3] = __("Every story has a happy ending.");
reload_text;
$_[4] = __("Hello, world!");
$_[5] = __("Every story has a happy ending.");
unlink $f1;
return 1;
};
# 57
ok($r, 1);
# 58
ok($_[0], "Hiya :)");
# 59
ok($_[1], "Every story has a happy ending.");
# 60
ok($_[2], "Hiya :)");
# 61
ok($_[3], "Every story has a happy ending.");
# 62
ok($_[4], "Hello, world!");
# 63
ok($_[5], "Pray it.");
# Garbage collection
unlink catfile($LOCALEDIR, "en", "LC_MESSAGES", "test_dyn.mo");
unlink catfile($LOCALEDIR, "zh_TW", "LC_MESSAGES", "test_dyn.mo");
unlink catfile($LOCALEDIR, "zh_CN", "LC_MESSAGES", "test_dyn.mo");
unlink catfile($LOCALEDIR, "en", "LC_MESSAGES", "test_reload.mo");