first pass RT4 merge, RT#13852
[freeside.git] / rt / t / api / i18n_guess.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use RT::Test tests => 16;
7
8 use Encode qw(encode);
9
10 use constant HAS_ENCODE_GUESS => do { local $@; eval { require Encode::Guess; 1 } };
11 use constant HAS_ENCODE_DETECT => do { local $@; eval { require Encode::Detect::Detector; 1 } };
12
13 my $string = "\x{442}\x{435}\x{441}\x{442} \x{43f}\x{43e}\x{434}\x{434}\x{435}\x{440}\x{436}\x{43a}\x{430}";
14
15 sub guess {
16     local $Test::Builder::Level = $Test::Builder::Level + 1;
17     is( RT::I18N::_GuessCharset( Encode::encode($_[0], $_[1]) ), $_[2] || $_[0], "$_[0] guesses as @{[$_[2]||$_[0]]}" );
18 }
19
20 RT->Config->Set(EmailInputEncodings => qw(*));
21 SKIP: {
22     skip "No Encode::Detect", 3 unless HAS_ENCODE_DETECT;
23     guess('utf-8', $string);
24     guess('cp1251', $string);
25     guess('koi8-r', $string);
26 }
27
28 RT->Config->Set(EmailInputEncodings => qw(UTF-8 cp1251 koi8-r));
29 SKIP: {
30     skip "No Encode::Guess", 4 unless HAS_ENCODE_GUESS;
31     guess('utf-8', $string);
32     guess('cp1251', $string);
33     guess('windows-1251', $string, 'cp1251');
34     {
35         local $TODO = "Encode::Guess can't distinguish cp1251 from koi8-r";
36         guess('koi8-r', $string);
37     }
38 }
39
40 RT->Config->Set(EmailInputEncodings => qw(UTF-8 koi8-r cp1251));
41 SKIP: {
42     skip "No Encode::Guess", 3 unless HAS_ENCODE_GUESS;
43     guess('utf-8', $string);
44     guess('koi8-r', $string);
45     {
46         local $TODO = "Encode::Guess can't distinguish cp1251 from koi8-r";
47         guess('cp1251', $string);
48     }
49 }
50
51 # windows-1251 is an alias for cp1251, post load check cleanups array for us
52 RT->Config->Set(EmailInputEncodings => qw(UTF-8 windows-1251 koi8-r));
53 RT->Config->PostLoadCheck;
54 SKIP: {
55     skip "No Encode::Guess", 3 unless HAS_ENCODE_GUESS;
56     guess('utf-8', $string);
57     guess('cp1251', $string);
58     {
59         local $TODO = "Encode::Guess can't distinguish cp1251 from koi8-r";
60         guess('koi8-r', $string);
61     }
62 }
63
64 RT->Config->Set(EmailInputEncodings => qw(* UTF-8 cp1251 koi8-r));
65 SKIP: {
66     skip "No Encode::Detect", 3 unless HAS_ENCODE_DETECT;
67     guess('utf-8', $string);
68     guess('cp1251', $string);
69     guess('koi8-r', $string);
70 }
71