The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use warnings;
use Test::More tests => 30;
use Term::Emit;

# _oid(): output identifier function
is(Term::Emit::_oid(),         0,      "_oid(): null");
is(Term::Emit::_oid(q{}),      0,      "_oid(): empty string");
is(Term::Emit::_oid("xy"),     0,      "_oid(): string");
my $str = q{};
is(Term::Emit::_oid(\$str),    "str",  "_oid(): string ref");
is(Term::Emit::_oid(*STDIN),   0,      "_oid(): *STDIN");
is(Term::Emit::_oid(*STDOUT),  1,      "_oid(): *STDOUT");
is(Term::Emit::_oid(*STDERR),  2,      "_oid(): *STDOUT");

# _colorize(): apply ANSI escapes to color a string
my %colors = (EMERG => '[1;31;40m',
              ALERT => '[1;35m',
              CRIT  => '[1;31m',
              FAIL  => '[1;31m',
              FATAL => '[1;31m',
              ERROR => '[31m',
              WARN  => '[33m',
              NOTE  => '[36m',
              INFO  => '[32m',
              OK    => '[1;32m',
              DEBUG => '[37;43m',
              NOTRY => '[30;47m',
              UNK   => '[1;37;47m',
              YES   => '[32m',
              NO    => '[31m',
             );
foreach my $sev (keys %colors) {
    my $code = $colors{$sev};
    is(Term::Emit::_colorize("abc", $sev), chr(27).$code.'abc'.chr(27).'[0m', "_colorize(): severity $sev");
}
is(Term::Emit::_colorize("abc", "DONE"),           'abc', "_colorize(): severity DONE");
is(Term::Emit::_colorize("abc", "AnyThingElse"),   'abc', "_colorize(): anything else");

# _wrap(): word wrap a string
my $wstr = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.";
my @got = ();
@got = Term::Emit::_wrap(undef, 10, 20);
is_deeply(\@got, [undef], "_wrap(): undefined message");
@got = Term::Emit::_wrap($wstr, 1, 2);
is_deeply(\@got, [$wstr], "_wrap(): max too small (<3)");
@got = Term::Emit::_wrap($wstr, 9, 7);
is_deeply(\@got, [$wstr], "_wrap(): min > max");
@got = Term::Emit::_wrap($wstr, 10, 90);
is_deeply(\@got, [$wstr], "_wrap(): 10..90");
@got = Term::Emit::_wrap($wstr, 25, 30);
is_deeply(\@got, ["Lorem ipsum dolor sit amet,",
                  "consectetur adipiscing elit."], "_wrap(): 25..30");
@got = Term::Emit::_wrap($wstr, 17, 20);
is_deeply(\@got, ["Lorem ipsum dolor",
                  "sit amet, consectetu",
                  "r adipiscing elit."], "_wrap(): 17..20 forcing word to split");