417 lines
11 KiB
Perl
417 lines
11 KiB
Perl
|
#! /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");
|