1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
#!/usr/bin/env perl
# Serialize variables when sprinti'd
use warnings;
use strict;
use Test::More tests => 16;
use String::Print;
my $f = String::Print->new;
isa_ok($f, 'String::Print');
is($f->sprinti("#{v}#", v => undef), '#undef#', 'UNDEF');
is($f->sprinti("#{v}#", v => ''), '##' , 'empty string');
is($f->sprinti("#{v}#", v => 42), '#42#' , 'string');
is($f->sprinti("#{v}#", v => [12,13]),'#12, 13#', 'ARRAY');
is($f->sprinti("#{v}#", v => [14,15], _join => ' '),'#14 15#');
{ local $" = ':';
is($f->sprinti("#{v}#", v => [16,17], _join => $"), '#16:17#');
}
is($f->sprinti("#{v}#", v => {a => 3, b => 5})
,'#a => 3, b => 5#', 'HASH');
is($f->sprinti("#{v}#", v => sub {18}),'#18#', 'CODE');
is($f->sprinti("#{v}#", v => sub {sub {19}}),'#19#', 'CODE CODE');
is($f->sprinti("#{v}#", v => \50),'#50#', 'SCALAR');
is($f->sprinti("#{v}#", v => \undef),'#undef#', 'SCALAR undef');
my $g = String::Print->new
( serializers =>
[ UNDEF => sub {'(undef)'}
, ARRAY => sub {join '|', reverse @{$_[1]} }
, MyObj => \&name_in_reverse
]
);
isa_ok($g, 'String::Print');
is($g->sprinti("#{v}#", v => undef), '#(undef)#');
is($g->sprinti("#{v}#", v => [8..13]),'#13|12|11|10|9|8#');
#
### Object interpolation
# used as example in man-page
#
{ package MyObj;
sub name() {shift->{name}}
}
my $obj = bless {name => 'my-name'}, 'MyObj';
is($g->sprinti("#{v}#", v => $obj),'#eman-ym#');
sub name_in_reverse($$$)
{ my ($formatter, $object, $args) = @_;
# the $args are all parameters to be filled-in
scalar reverse $object->name;
}
|