The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#! /usr/bin/perl -w
use lib '../lib';
use strict;
use Test::More tests => 22;

use_ok('Locale::Maketext::Extract');
my $Ext = Locale::Maketext::Extract->new;
isa_ok($Ext => 'Locale::Maketext::Extract');

extract_ok('_("123")'		=> 123,		    'Simple extraction');

extract_ok('_("[_1] is happy")'	=> '%1 is happy',   '[_1] to %1');
extract_ok('_("%1 is happy")'   => '%1 is happy',   '%1 verbatim', 1);

extract_ok('_("[*,_1] counts")'	=> '%*(%1) counts', '[*,_1] to %*(%1)');
extract_ok('_("%*(%1) counts")'	=> '%*(%1) counts', '%*(%1) verbatim', 1);

extract_ok('_("[*,_1,_2] counts")' => '%*(%1,%2) counts',
    '[*,_1,_2] to %*(%1,%2)');
extract_ok('_("[*,_1,_2] counts")' => '[*,_1,_2] counts',
    '[*,_1,_2] verbatim', 1);

extract_ok(q(_('foo\$bar'))	=> 'foo\\$bar',   'Escaped \$ in q');
extract_ok(q(_("foo\$bar"))	=> 'foo$bar',	    'Normalized \$ in qq');

extract_ok(q(_('foo\x20bar'))	=> 'foo\\x20bar', 'Escaped \x in q');
extract_ok(q(_("foo\x20bar"))	=> 'foo bar',	    'Normalized \x in qq');

extract_ok(q(_('foo\nbar'))	=> 'foo\\nbar',   'Escaped \n in qq');
extract_ok(q(_("foo\nbar"))	=> "foo\nbar",	    'Normalized \n in qq');
extract_ok(qq(_("foo\nbar"))	=> "foo\nbar",	    'Normalized literal \n in qq');

extract_ok(q(_("foo\nbar"))	=> "foo\nbar",	    'Trailing \n in qq');
extract_ok(qq(_("foobar\n"))	=> "foobar\n",	    'Trailing literal \n in qq');

extract_ok(q(_('foo\bar'))	=> 'foo\\bar',    'Escaped \ in q');
extract_ok(q(_('foo\\\\bar'))	=> 'foo\\bar',    'Normalized \\\\ in q');
extract_ok(q(_("foo\bar"))	=> "foo\bar",	  'Interpolated \b in qq');

extract_ok(q([% loc( 'foo "bar" baz' ) %]) => 'foo "bar" baz', 'Escaped double quote in text');

sub extract_ok {
    my ($text, $result, $info, $verbatim) = @_;
    $Ext->extract('' => $text);
    $Ext->compile($verbatim);
    is(join('', %{$Ext->lexicon}), $result, $info);
    $Ext->clear;
}