#!perl -T
use strict;
use warnings;
use Carp qw(confess);
use English qw(-no_match_vars $OS_ERROR);
require IO::File;
use Test::More tests => 8;
use Test::NoWarnings;
use Test::Exception;
use Test::Differences;
BEGIN {
require_ok 'Locale::MO::File';
}
my $filename = '02_exceptions.mo';
throws_ok
sub {
Locale::MO::File->new->write_file;
},
qr{\QFilename not set}xms,
'write without parameters set';
my $file_handle = IO::File->new($filename, '> :raw')
or confess "Can not write $filename\n$OS_ERROR";
throws_ok
sub {
my $mo = Locale::MO::File->new;
$mo->set_file_handle($file_handle);
$mo->write_file;
},
qr{\QFilename not set}xms,
'write without filename';
throws_ok
sub {
my $mo = Locale::MO::File->new;
$mo->set_filename($filename);
$mo->set_messages([ undef ]);
$mo->write_file;
},
qr{\Qmessages[0] is not a hash reference}xms,
'message is not a hash reference';
throws_ok
sub {
my $mo = Locale::MO::File->new;
$mo->set_filename($filename);
$mo->set_messages([
{
msgstr => q{},
msgstr_plural => [],
}
]);
$mo->write_file;
},
qr{\Q'msgstr not set' callback}xms,
'msgstr and msgstr together makes no sense';
throws_ok
sub {
my $mo = Locale::MO::File->new;
$mo->set_filename($filename);
$mo->set_messages([
{
msgid => $Locale::MO::File::CONTEXT_SEPARATOR,
}
]);
$mo->write_file;
},
qr{\Q'no control chars' callback}xms,
'control chars in msgid';
throws_ok
sub {
my $mo = Locale::MO::File->new;
$mo->set_filename($filename);
$mo->set_messages([
{
msgid_plural => 'dummy',
msgstr_plural => [ $Locale::MO::File::PLURAL_SEPARATOR ],
}
]);
$mo->write_file;
},
qr{\Q'no control chars' callback}xms,
'control chars in msgstr_plural';