The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;
use utf8;

use Test::More tests => 19;
use Test::NoWarnings;
use Test::Differences;

BEGIN {
    require_ok('Locale::TextDomain::OO');
    require_ok('Locale::TextDomain::OO::Lexicon::File::MO');
}

Locale::TextDomain::OO::Lexicon::File::MO
    ->new(
        logger => sub { note shift },
    )
    ->lexicon_ref({
        search_dirs => [ './t/LocaleData' ],
        decode      => 1,
        data        => [
            '*:LC_MESSAGES:test_maketext' => '*/LC_MESSAGES/test_maketext.mo',
        ],
    });

my $loc = Locale::TextDomain::OO->new(
    language => 'de',
    category => 'LC_MESSAGES',
    domain   => 'test_maketext',
    plugins  => [ qw( Expand::Maketext ) ],
    logger   => sub { note shift },
);
is
    $loc->maketext(
        'This is a text.',
    ),
    'Das ist ein Text.',
    'maketext';
is
    $loc->maketext(
        '§ book',
    ),
    '§ Buch',
    'maketext, umlaut';
is
    $loc->maketext(
        '[_1] is programming [_2].',
        'Steffen',
        'Perl',
    ),
    'Steffen programmiert Perl.',
    'maketext, placeholder';
is
    $loc->maketext(
        '[_1] is programming [_2].',
        'Steffen',
    ),
    'Steffen programmiert .',
    'maketext, missing placeholder';
is
    $loc->maketext(
        '[quant,_1,shelf,shelves]',
        1,
    ),
    '1 Regal',
    'maketext, quant 1';
is
    $loc->maketext(
        '[quant,_1,shelf,shelves]',
        2,
    ),
    '2 Regale',
    'maketext, quant 2';
is
    $loc->maketext_p(
        'maskulin',
        'Dear',
    ),
    'Sehr geehrter',
    'maketext_p';
is
    $loc->maketext_p(
        'maskulin',
        'Dear [_1]',
        'Steffen Winkler',
    ),
    'Sehr geehrter Steffen Winkler',
    'maketext_p, placeholder';
is
    $loc->maketext_p(
        'appointment',
        'This is/are [*,_1,date,dates].',
        1,
    ),
    'Das ist/sind 1 Date.',
    'maketext_p, * 1';
is
    $loc->maketext_p(
        'appointment',
        'This is/are [*,_1,date,dates].',
        2,
    ),
    'Das ist/sind 2 Dates.',
    'maketext_p, * 2';
is
    $loc->maketext(
        '[*,_1,shelf,shelves,no shelf]',
        0,
    ),
    'kein Regal',
    'maketext, * 0';
is
    $loc->maketext(
        '[*,_1,shelf,shelves,no shelf]',
        1,
    ),
    '1 Regal',
    'maketext, * 1';
is
    $loc->maketext(
        '[*,_1,shelf,shelves,no shelf]',
        2,
    ),
    '2 Regale',
    'maketext, * 2';
is
    $loc->Nmaketext(
        'book',
    ),
    'book',
    'Nmaketext';
eq_or_diff
    [
        $loc->Nmaketext_p(
            'appointment',
            'date',
        ),
    ],
    [
        'appointment',
        'date',
    ],
    'Nmaketext_p';
eq_or_diff
    [
        $loc->Nmaketext_p(
            'not existing context',
            'book',
        ),
    ],
    [
        'not existing context',
        'book',
    ],
    'Nmaketext_p (not in lexicon)';