Koha/t/LangInstaller.t
Julian Maurice eae72c6712 Bug 15395: Add unit tests for extract_messages_from_templates
Because LangInstaller use FindBin to define some paths, the test
produces warnings about a missing directory. I'm not sure how we can
avoid that.

Test plan:
  1. prove t/LangInstaller.t

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2018-11-08 15:55:51 +00:00

108 lines
2.8 KiB
Perl

use Modern::Perl;
use FindBin '$Bin';
use lib "$Bin/../misc/translator";
use Test::More tests => 39;
use File::Temp qw(tempdir);
use File::Slurp;
use Locale::PO;
use t::lib::Mocks;
use_ok('LangInstaller');
my $installer = LangInstaller->new();
my $tempdir = tempdir(CLEANUP => 0);
t::lib::Mocks::mock_config('intranetdir', "$Bin/LangInstaller/templates");
my @files = ('simple.tt');
$installer->extract_messages_from_templates($tempdir, @files);
ok(-e "$tempdir/simple.tt", 'it has created a temporary file simple.tt');
SKIP: {
skip "simple.tt does not exist", 37 unless -e "$tempdir/simple.tt";
my $output = read_file("$tempdir/simple.tt");
my $expected_output = <<'EOF';
__('hello');
__x('hello {name}');
__n('item', 'items');
__nx('{count} item', '{count} items');
__p('context', 'hello');
__px('context', 'hello {name}');
__np('context', 'item', 'items');
__npx('context', '{count} item', '{count} items');
__npx('context', '{count} item', '{count} items');
__x('status is {status}');
__('active');
__('inactive');
__('Inside block');
EOF
is($output, $expected_output, "Output of extract_messages_from_templates is as expected");
my $xgettext_cmd = "xgettext -L Perl --from-code=UTF-8 "
. "--package-name=Koha --package-version='' "
. "-k -k__ -k__x -k__n:1,2 -k__nx:1,2 -k__xn:1,2 -k__p:1c,2 "
. "-k__px:1c,2 -k__np:1c,2,3 -k__npx:1c,2,3 "
. "-o $tempdir/Koha.pot -D $tempdir simple.tt";
system($xgettext_cmd);
my $pot = Locale::PO->load_file_asarray("$tempdir/Koha.pot");
my @expected = (
{
msgid => '"hello"',
},
{
msgid => '"hello {name}"',
},
{
msgid => '"item"',
msgid_plural => '"items"',
},
{
msgid => '"{count} item"',
msgid_plural => '"{count} items"',
},
{
msgid => '"hello"',
msgctxt => '"context"',
},
{
msgid => '"hello {name}"',
msgctxt => '"context"',
},
{
msgid => '"item"',
msgid_plural => '"items"',
msgctxt => '"context"',
},
{
msgid => '"{count} item"',
msgid_plural => '"{count} items"',
msgctxt => '"context"',
},
{
msgid => '"status is {status}"',
},
{
msgid => '"active"',
},
{
msgid => '"inactive"',
},
{
msgid => '"Inside block"',
},
);
for (my $i = 0; $i < @expected; $i++) {
for my $key (qw(msgid msgid_plural msgctxt)) {
my $expected = $expected[$i]->{$key};
my $expected_str = defined $expected ? $expected : 'not defined';
is($pot->[$i + 1]->$key, $expected, "$i: $key is $expected_str");
}
}
}