File: test.pl

package info (click to toggle)
liblingua-preferred-perl 0.2.4-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny, squeeze, wheezy
  • size: 56 kB
  • ctags: 7
  • sloc: perl: 217; makefile: 40
file content (139 lines) | stat: -rw-r--r-- 7,471 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/perl -w

use strict;
my ($numtests, $loaded);

BEGIN { $numtests = 76; $| = 1; print "1..$numtests\n"; } # FIXME
END {print "not ok 1\n" unless $loaded;}
use Lingua::Preferred qw(which_lang acceptable_lang);
$loaded = 1;
print "ok 1\n";

use Data::Dumper;

my $tests_done = 1;
sub check_which_lang( $$$ ) {
    my ($want, $avail, $ans) = @_;
    my $got = Dumper(which_lang($want, $avail));
    if ($got ne Dumper($ans)) {
	warn "wanted: @$want\navailable: @$avail\nexpected: $ans\ngot: $got";
	print 'not ';
    }
    print 'ok ', ++$tests_done, "\n";
}

check_which_lang [                             ], [ 'en'                   ], 'en';
check_which_lang [                             ], [ undef                  ], undef;
check_which_lang [ 'fr'                        ], [ 'en'                   ], 'en';
check_which_lang [ 'fr'                        ], [ 'en', 'fr'             ], 'fr';
check_which_lang [ 'fr'                        ], [ 'en', 'fr_FR'          ], 'fr_FR';
check_which_lang [ 'fr'                        ], [ 'en', 'fr_FR', 'fr'    ], 'fr';
check_which_lang [ 'fr'                        ], [ undef                  ], undef;
check_which_lang [ 'fr', 'en'                  ], [ 'fr'                   ], 'fr';
check_which_lang [ 'fr', 'en'                  ], [ 'en'                   ], 'en';
check_which_lang [ 'fr', 'en'                  ], [ 'de'                   ], 'de';
check_which_lang [ 'fr', 'en'                  ], [ 'de', 'it'             ], 'de';
check_which_lang [ 'fr', 'en'                  ], [ undef                  ], undef;
check_which_lang [ 'en_GB'                     ], [ 'en'                   ], 'en';
check_which_lang [ 'en_GB'                     ], [ 'fr'                   ], 'fr';
check_which_lang [ 'en_GB'                     ], [ undef                  ], undef;
check_which_lang [ 'en_GB'                     ], [ 'en_US'                ], 'en_US';
check_which_lang [ 'en_GB'                     ], [ 'en_US', 'en_IT'       ], 'en_US';
check_which_lang [ 'en_GB'                     ], [ 'en_US', 'en'          ], 'en';
check_which_lang [ 'en_GB'                     ], [ 'en_US', 'en', 'en_GB' ], 'en_GB';
check_which_lang [ 'en', 'en_GB'               ], [ 'en_US'                ], 'en_US';
check_which_lang [ 'en', 'en_GB'               ], [ 'en_IT', 'en_GB'       ], 'en_GB';
check_which_lang [ 'en', 'en_GB'               ], [ 'en', 'en_GB'          ], 'en';
check_which_lang [ 'en_GB', 'en'               ], [ 'en', 'en_GB'          ], 'en_GB';
check_which_lang [ 'de', 'de_*', 'de_CH'       ], [ 'fr'                   ], 'fr';
check_which_lang [ 'de', 'de_*', 'de_CH'       ], [ 'de_CH'                ], 'de_CH';
check_which_lang [ 'de', 'de_*', 'de_CH'       ], [ 'de_CH', 'de_DE'       ], 'de_DE';
check_which_lang [ 'de', 'de_*', 'fr', 'de_CH' ], [ 'de_CH', 'fr'          ], 'fr';
# C matches anything, but it need not be first in the list
check_which_lang [ 'C',                        ], [ 'en'                   ], 'en';
check_which_lang [ 'C',                        ], [ undef                  ], undef;
check_which_lang [ 'en', 'C',                  ], [ 'en'                   ], 'en';
check_which_lang [ 'C', 'en',                  ], [ 'en'                   ], 'en';
check_which_lang [ 'C'                         ], [ 'en', 'fr'             ], 'en';
check_which_lang [ 'C', 'fr'                   ], [ 'en', 'fr'             ], 'en';
check_which_lang [ 'fr', 'C'                   ], [ 'en', 'fr'             ], 'fr';
# The following are probably not something you'd actually use
check_which_lang [ 'en_*'                      ], [ 'en_GB', 'fr'          ], 'en_GB';
# N.B. en_* implies en_IE, en_CA etc. but not en
check_which_lang [ 'en_*'                      ], [ 'fr', 'en'             ], 'fr';
check_which_lang [ 'en_*'                      ], [ undef                  ], undef;
check_which_lang [ 'de_*', 'de_CH'             ], [ 'de_CH', 'de', 'de_DE' ], 'de_DE';
check_which_lang [ 'de', 'fr', 'de_*', 'de_CH' ], [ 'de_CH', 'de_AT', 'fr' ], 'fr';

sub check_acceptable_lang( $$$ ) {
    my ($want, $l, $ans) = @_;
    my $got = acceptable_lang($want, $l);
    if ($got != $ans) {
	warn "wanted: @$want\nlang: $l\nexpected: $ans\ngot: $got";
	print 'not ';
    }
    print 'ok ', ++$tests_done, "\n";
}

check_acceptable_lang [                             ], 'en',    0;
check_acceptable_lang [ 'fr'                        ], 'en',    0;
check_acceptable_lang [ 'fr'                        ], 'en_ZA', 0;
check_acceptable_lang [ 'fr'                        ], 'fr',    1;
check_acceptable_lang [ 'fr'                        ], 'fr_FR', 1;
check_acceptable_lang [ 'fr', 'en'                  ], 'fr',    1;
check_acceptable_lang [ 'fr', 'en'                  ], 'en',    1;
check_acceptable_lang [ 'fr', 'en'                  ], 'de',    0;
check_acceptable_lang [ 'fr', 'en'                  ], 'fr_FR', 1;
check_acceptable_lang [ 'fr', 'en'                  ], 'en_FR', 1; # why not?
check_acceptable_lang [ 'fr', 'en'                  ], 'it_CH', 0;
check_acceptable_lang [ 'en_GB'                     ], 'en',    1;
check_acceptable_lang [ 'en_GB'                     ], 'en_GB', 1;
check_acceptable_lang [ 'en_GB'                     ], 'en_CA', 1;
check_acceptable_lang [ 'en_GB'                     ], 'nl',    0;
check_acceptable_lang [ 'en_GB'                     ], 'nl_NL', 0;
check_acceptable_lang [ 'en', 'en_GB'               ], 'en',    1;
check_acceptable_lang [ 'en', 'en_GB'               ], 'en_GB', 1;
check_acceptable_lang [ 'en', 'en_GB'               ], 'en_CA', 1;
check_acceptable_lang [ 'en', 'en_GB'               ], 'nl',    0;
check_acceptable_lang [ 'en', 'en_GB'               ], 'nl_NL', 0;
check_acceptable_lang [ 'en_IE', 'en_US'            ], 'en',    1;
check_acceptable_lang [ 'en_IE', 'en_US'            ], 'en_GB', 1;
check_acceptable_lang [ 'en_IE', 'en_US'            ], 'en_CA', 1;
check_acceptable_lang [ 'en_IE', 'en_US'            ], 'nl',    0;
check_acceptable_lang [ 'en_IE', 'en_US'            ], 'nl_NL', 0;
check_acceptable_lang [ 'de', 'de_*', 'de_CH'       ], 'fr',    0;
check_acceptable_lang [ 'de', 'de_*', 'de_CH'       ], 'de',    1;
check_acceptable_lang [ 'de', 'de_*', 'de_CH'       ], 'de_DE', 1;
check_acceptable_lang [ 'de', 'de_*', 'de_CH'       ], 'de_CH', 1;
# The following are probably not something you'd actually use
check_acceptable_lang [ 'en_*'                      ], 'en_GB', 1;
check_acceptable_lang [ 'en_*'                      ], 'it',    0;
check_acceptable_lang [ 'en_*'                      ], 'en',    1;
check_acceptable_lang [ 'de', 'fr', 'de_*', 'de_CH' ], 'fr',    1;
check_acceptable_lang [ 'de', 'fr', 'de_*', 'de_CH' ], 'nl',    0;
check_acceptable_lang [ 'de', 'fr', 'de_*', 'de_CH' ], 'de_CH', 1;

if ($tests_done != $numtests) {
    die "expected to run $numtests tests, but ran $tests_done\n";
}

__END__

# Stuff for randomly generating test cases.  I didn't really use this.
my @l = qw(en en_GB en_US de de_DE de_AT de_CH fr fr_FR fr_CA it it_IT);
my @l2 = qw(en_* fr_* de_* it_*);

sub randomize(@) {
    my @r;
    push @r, splice(@_, (rand @_), 1) while @_;
    @r;
}
sub random_prefix(@) { @_[0 .. (rand @_)] }
sub random_subset(@) { randomize (random_prefix @_) }

for (;;) {
    my @avail = random_subset @l;
    my @want = random_subset (@l, @l2);
    my $which = which_lang(\@want, \@avail);
    print "which_lang([ qw(@want) ], [ qw(@avail) ]) is $which\n\n";
}