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();