318 lines
6.2 KiB
Perl
318 lines
6.2 KiB
Perl
|
#! /usr/bin/perl -w
|
|||
|
# Test suite for the hybrid racing condition
|
|||
|
# Copyright (c) 2003-2007 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 => 42 }
|
|||
|
|
|||
|
use FindBin;
|
|||
|
use File::Spec::Functions qw(catdir catfile);
|
|||
|
use lib $FindBin::Bin;
|
|||
|
use vars qw($LOCALEDIR $r $LOOKUP_FAILURE);
|
|||
|
$LOCALEDIR = catdir($FindBin::Bin, "locale");
|
|||
|
|
|||
|
# Hybrid racing conditionr
|
|||
|
use vars qw($lh1 $lh2);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
require T_L10N;
|
|||
|
|
|||
|
$lh1 = T_L10N->get_handle("zh-tw");
|
|||
|
$lh1->fail_with(sub { $LOOKUP_FAILURE = 1; die; });
|
|||
|
$lh1->bindtextdomain("test", $LOCALEDIR);
|
|||
|
$lh1->textdomain("test");
|
|||
|
$lh1->encoding("Big5");
|
|||
|
$lh1->die_for_lookup_failures(0);
|
|||
|
|
|||
|
$lh2 = T_L10N->get_handle("zh-tw");
|
|||
|
$lh2->fail_with(sub { $LOOKUP_FAILURE = 1; die; });
|
|||
|
$lh2->bindtextdomain("test2", $LOCALEDIR);
|
|||
|
$lh2->textdomain("test2");
|
|||
|
$lh2->encoding("UTF-8");
|
|||
|
$lh2->die_for_lookup_failures(1);
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 1
|
|||
|
ok($r, 1);
|
|||
|
|
|||
|
# Once
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 2
|
|||
|
ok($_, "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 3
|
|||
|
ok($_, "Every story has a happy ending.");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 4
|
|||
|
ok($r, undef);
|
|||
|
# 5
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 6
|
|||
|
ok($_, "故事都有美麗的結局。");
|
|||
|
|
|||
|
# Again
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 7
|
|||
|
ok($_, "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 8
|
|||
|
ok($_, "Every story has a happy ending.");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 9
|
|||
|
ok($r, undef);
|
|||
|
# 10
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 11
|
|||
|
ok($_, "故事都有美麗的結局。");
|
|||
|
|
|||
|
# Exchange everything!
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$lh1->bindtextdomain("test2", $LOCALEDIR);
|
|||
|
$lh1->textdomain("test2");
|
|||
|
$lh1->encoding("UTF-8");
|
|||
|
$lh1->die_for_lookup_failures(1);
|
|||
|
|
|||
|
$lh2->bindtextdomain("test", $LOCALEDIR);
|
|||
|
$lh2->textdomain("test");
|
|||
|
$lh2->encoding("Big5");
|
|||
|
$lh2->die_for_lookup_failures(0);
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 12
|
|||
|
ok($r, 1);
|
|||
|
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 13
|
|||
|
ok($r, undef);
|
|||
|
# 14
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 15
|
|||
|
ok($_, "故事都有美麗的結局。");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 16
|
|||
|
ok($_, "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 17
|
|||
|
ok($_, "Every story has a happy ending.");
|
|||
|
|
|||
|
# Exchange the text domains
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$lh1->textdomain("test");
|
|||
|
$lh2->textdomain("test2");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 18
|
|||
|
ok($r, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 19
|
|||
|
ok($_, "大家好。");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 20
|
|||
|
ok($r, undef);
|
|||
|
# 21
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 22
|
|||
|
ok($_, "Hello, world!");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 23
|
|||
|
ok($_, "<22>G<EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>R<EFBFBD><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>C");
|
|||
|
|
|||
|
# Exchange encodings
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$lh1->encoding("Big5");
|
|||
|
$lh2->encoding("UTF-8");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 24
|
|||
|
ok($r, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 25
|
|||
|
ok($_, "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 26
|
|||
|
ok($r, undef);
|
|||
|
# 27
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 28
|
|||
|
ok($_, "Hello, world!");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 29
|
|||
|
ok($_, "故事都有美麗的結局。");
|
|||
|
|
|||
|
# Exchange lookup-failure behaviors
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$lh1->die_for_lookup_failures(0);
|
|||
|
$lh2->die_for_lookup_failures(1);
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 30
|
|||
|
ok($r, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 31
|
|||
|
ok($_, "<22>j<EFBFBD>a<EFBFBD>n<EFBFBD>C");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 32
|
|||
|
ok($_, "Every story has a happy ending.");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
|
|||
|
# 33
|
|||
|
ok($r, undef);
|
|||
|
# 34
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 35
|
|||
|
ok($_, "故事都有美麗的結局。");
|
|||
|
|
|||
|
# Switch to an non-existing domain
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$lh1->textdomain("Big5");
|
|||
|
$lh2->textdomain("GB2312");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 36
|
|||
|
ok($r, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 37
|
|||
|
ok($_, "Hello, world!");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh1->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 38
|
|||
|
ok($_, "Every story has a happy ending.");
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Hello, world!");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 39
|
|||
|
ok($r, undef);
|
|||
|
# 40
|
|||
|
ok($LOOKUP_FAILURE, 1);
|
|||
|
$r = eval {
|
|||
|
undef $LOOKUP_FAILURE;
|
|||
|
$_ = $lh2->maketext("Every story has a happy ending.");
|
|||
|
return 1;
|
|||
|
};
|
|||
|
# 41
|
|||
|
ok($r, undef);
|
|||
|
# 42
|
|||
|
ok($LOOKUP_FAILURE, 1);
|