use Test::More(tests => 33);
use Test::Warn;
use Text::FixedWidth;
use warnings;
ok(my $fw = new Text::FixedWidth, "new()");
ok($fw->set_attributes(qw(
fname undef %10s
mi undef %1s
lname undef %-10s
points 0 %04d
)), "set_attributes()");
is($fw->get_fname, undef, "get_fname()");
is($fw->get_points, 0, "get_points()");
ok($fw->set_fname('Jay'), "set_fname()");
ok($fw->set_mi('W'), "set_mi()");
ok($fw->set_lname('Hannah'), "set_lname()");
ok($fw->set_points(3), "set_points()");
is($fw->get_fname, 'Jay', "get_fname()");
is($fw->get_mi, 'W', "get_mi()");
is($fw->get_lname, 'Hannah', "get_lname()");
is($fw->string, " JayWHannah 0003", "string()");
ok($fw->parse(string => " ChuckWNorris 0017"), "parse()");
is($fw->get_fname, 'Chuck', "get_fname()");
is($fw->get_mi, 'W', "get_mi()");
is($fw->get_lname, 'Norris', "get_lname()");
is($fw->get_points, '0017', "get_points()");
is($fw->string, " ChuckWNorris 0017", "string()");
ok($fw->auto_truncate(qw(fname lname)), "auto_truncate()");
ok($fw->set_fname("f" x 20), "set_fname()");
ok($fw->set_lname("l" x 20), "set_lname()");
is($fw->get_fname(), "f" x 10, "set_fname()");
is($fw->get_lname(), "l" x 10, "set_lname()");
warning_like
{ $fw->set_mi("xxxxx") }
{ carped => qr/Can't set_mi.* Value must be 1 characters or shorter/ },
"set_mi() too long, throws warning";
is($fw->get_mi(), "W", "get_mi()"); # still old value
is($fw->string, "ffffffffffWllllllllll0017", "string()");
# Suppress spurious warnings when at attribute is explicitly set to undef.
$fw->set_fname(undef);
$fw->string;
# Carp out a warning if the user tries to set auto_truncate() on an attribute that doesn't exit.
warning_like
{ $fw->auto_truncate("bogus") }
{ carped => qr/Can't auto_truncate attribute .* does not exist/ },
"auto_truncate('bogus') throws warning";
ok($fw->set_points(""), "set a numeric to zero-length string");
warning_like
{ $fw->string }
qr/Text::FixedWidth attribute 'points' contains '' which is not numeric/,
"string() for '' formatted for numeric throws warning";
ok($fw->set_points(undef), "set a numeric to undef");
warning_like
{ $fw->string }
qr/Text::FixedWidth attribute 'points' contains '' which is not numeric/,
"string() for undef formatted for numeric throws warning";
ok($fw->set_points(undef), "set a numeric to undef");
warning_like
{ $fw->string }
qr/Text::FixedWidth attribute 'points' contains '' which is not numeric/,
"string() for non-numerics formatted for numeric throws warning";