#!/usr/bin/perl

use strict;
use warnings;

use Test::More tests => 8;
use Test::Warn qw/ warnings_are warning_like warnings_like /;
use Text::Sprintf::Named ();

my $obj;

# TEST
$obj = Text::Sprintf::Named->new( { fmt => 'No Tokens Here!', } );

warnings_are { $obj->format() }[], 'No Tokens and No Parameters';

# TEST
$obj = Text::Sprintf::Named->new( { fmt => "Example >%(name)s<", } );

warning_like { $obj->format() } qr/Token 'name'/,
    'Missing Token Throws Warning ( String )';

# TEST
$obj = Text::Sprintf::Named->new( { fmt => "Example >%(foo)8.3f<", } );

warnings_like { $obj->format() }[ qr/Token 'foo'/, qr/numeric.*sprintf/ ],
    'Missing Token Throws Warning ( Float )';

no warnings 'Text::Sprintf::Named';

# TEST
$obj = Text::Sprintf::Named->new( { fmt => 'No Tokens Here!', } );

warnings_are { $obj->format() }[], 'No Tokens and No Parameters';

# TEST
$obj = Text::Sprintf::Named->new( { fmt => "Example >%(name)s<", } );

warnings_are { $obj->format() }[],
    '[Silent] Missing Token Throws Warning ( String )';

# TEST
$obj = Text::Sprintf::Named->new( { fmt => "Example >%(foo)8.3f<", } );

warnings_like { $obj->format() }[qr/numeric.*sprintf/],
    '[Subdued] Missing Token Throws Warning ( Float )';

# TEST
$obj = Text::Sprintf::Named->new( { fmt => '.' } );

use warnings 'Text::Sprintf::Named';

warning_like
{
    $obj->format(
        {
            erroneous_parameter => 'this one',
            more_error          => 'this',
            this_will_never     => 'work',
        }
    );
}
qr/Format parameters were specified, but none/,
    'Weird Format Parameters Throws Warning';

# TEST
no warnings 'Text::Sprintf::Named';

warnings_are
{
    $obj->format(
        {
            erroneous_parameter => 'this one',
            more_error          => 'this',
            this_will_never     => 'work',
        }
    );
}
[], '[Silenced] Weird Format Parameters Throws Warning';

