use Test::More;
use utf8;
use Data::Dumper;
use I22r::Translate;
use t::Constants;
use strict;
use warnings;
use Data::Dumper;
binmode STDOUT, ':encoding(UTF-8)';
binmode STDERR, ':encoding(UTF-8)';
if (defined $DB::OUT) {
# if Perl debugger is running
binmode $DB::OUT, ':encoding(UTF-8)';
}
ok(1, 'starting test');
t::Constants::skip_remaining_tests() unless $t::Constants::CONFIGURED;
my $src = 'en';
my $dest = $ARGV[0] || 'fr';
t::Constants::basic_config();
my %INPUT = (
literal => "The Vietnamese word for person is {{người}}.",
literal2 => "My friends {{Jack Morris}} and " .
"Mrs. {{Yamaguchi}} were there.",
literal3 => "{{Alice}}, {{Bob}}, {{Charlie}}, and {{David}} " .
"did a great job.",
html1 => "This is called sedimentary rock.",
html2 => "Asia is the largest continent.",
html3 => "The " .
"Berlin Wall was very tall.",
html4 => "The three countries are Canada, " .
"the United States, and Mexico.",
both => "The capital of Russia is {{Moskva}}.",
nested => "My name is {{Michele}}, not {{Miguel}}.",
mt108 => "This page is by {{_1}} published on {{_2}}.",
mt109 => '{{_2}} was the previous entry.',
consec => '{{_1}}{{_2}}, {{_3}} @ {{_4}} : {{_5}}',
lcase => 'View all posts by {{_1}}',
regress1 => 'This entry was posted in {{_1}} on {{_3}} by {{_4}}.'
);
my %R = I22r::Translate->translate_hash(
src => $src, dest => $dest, text => \%INPUT,
# filter => [ 'HTML', 'Literal' ],
filter => [ 'Literal', 'HTML' ],
return_type => 'hash' );
$ENV{DIAG} && diag Dumper( \%R );
#local $Data::Dumper::Indent = 1;
$ENV{DIAG} && diag("translate results ", Data::Dumper::Dumper(\%INPUT, \%R));
ok(scalar keys %R == scalar keys %INPUT,
"output count equals input count");
ok(defined($R{literal}{ID}) && defined($R{literal2}{OLANG}) &&
defined($R{literal3}{LANG}) && defined($R{html1}{TEXT}) &&
defined($R{html2}{TIME}) && defined($R{html3}{SOURCE}) &&
defined($R{both}{OTEXT}),
"all fields are defined");
ok(join ("\n",map { $INPUT{$_} }sort keys %INPUT) eq
join ("\n",map { $R{$_}{OTEXT} }sort keys %R),
"original text is maintained");
ok($R{literal}{TEXT} =~ /người/ &&
$R{literal2}{TEXT} =~ /Jack Morris/ &&
$R{literal2}{TEXT} =~ /Yamaguchi/ &&
$R{literal3}{TEXT} =~ /Alice/ && $R{literal3}{TEXT} =~ /Bob/ &&
$R{literal3}{TEXT} =~ /Charlie/ && $R{literal3}{TEXT} =~ /David/ &&
$R{both}{TEXT} =~ /Moskva/,
"literal text is preserved");
ok($R{literal}{TEXT} =~ /người/, 'literal text is preserved')
or diag $R{literal}{TEXT};
ok( $R{literal2}{TEXT} =~ /Jack Morris/, 'literal text is preserved');
ok( $R{literal2}{TEXT} =~ /Yamaguchi/, 'literal text is preserved');
ok( $R{literal3}{TEXT} =~ /Alice/, 'literal text is preserved');
ok( $R{literal3}{TEXT} =~ /Bob/, 'literal text is preserved');
ok( $R{literal3}{TEXT} =~ /Charlie/ && $R{literal3}{TEXT} =~ /David/, 'literal text is preserved');
ok( $R{both}{TEXT} =~ /Moskva/, 'literal text is preserved');
ok($R{html1}{TEXT} =~ m[.*] &&
$R{html2}{TEXT} =~ m[.*.*.*] &&
$R{html3}{TEXT} =~ m[.*] &&
$R{html4}{TEXT} =~ m[.*] && $R{html4}{TEXT} =~ m[.*],
"html tags are preserved");
ok($R{nested}{TEXT} =~ m[Michele] && $R{nested}{TEXT} =~ m[Miguel] &&
$R{nested}{TEXT} =~ m[.*] && $R{nested}{TEXT} =~ m[.*],
"nested literal/html are preserved");
ok($R{mt108}{TEXT} =~ m/{{_1}}/ # <-- preferred
|| $R{mt108}{TEXT} =~ m/_1/, # <-- the least you can do
"mt108: literal 1 preserved");
ok($R{mt108}{TEXT} =~ m!\s*{{_2}}\s*! # <-- preferred
|| $R{mt108}{TEXT} =~ m!\s*_2\s*!, # <-- tolerable
"mt108: literal 2 preserved inside tags");
ok($R{mt109}{TEXT} =~ '',
"mt109: literal 1 was preserved");
ok($R{mt109}{TEXT} =~ '{*_2}*',
"mt109: literal 2 was preserved inside tags");
ok($R{consec}{TEXT} =~ /{{_1}}/ && $R{consec}{TEXT} =~ /{{_2}}/,
"consec: consecutive literal elements preserved")
or diag( "translation was: ", $R{consec}{TEXT} );
ok($R{consec}{TEXT} =~ /{{_3}}/ && $R{consec}{TEXT} =~ /{{_4}}/
&& $R{consec}{TEXT} =~ /{{_5}}/,
"consec: other literal elements preserved");
ok($R{lcase}{TEXT} =~ /{{_1}}/,
"lcase: literal element preserved");
done_testing();