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 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
use strict;
use Test::More qw(no_plan);
use IO::Scalar;
use lib './t/lib';
use Foo;
ok( Foo->add_trigger(
name => 'before_foo',
callback => sub { print "before_foo\n" }
),
'add_trigger in Foo'
);
ok( Foo->add_trigger(
callback => sub { print "after_foo\n" },
name => 'after_foo', # change the param order to test from hash -> list
),
'add_trigger in foo'
);
my $foo = Foo->new;
{
my $out;
tie *STDOUT, 'IO::Scalar', \$out;
$foo->foo;
is $out, "before_foo\nfoo\nafter_foo\n";
}
ok( Foo->add_trigger(
name => 'after_foo',
callback => sub { print "after_foo2\n" }
),
'add_trigger in Foo'
);
{
tie *STDOUT, 'IO::Scalar', \my $out;
$foo->foo;
is $out, "before_foo\nfoo\nafter_foo\nafter_foo2\n";
}
ok( Foo->add_trigger(
name => 'after_foo',
callback => sub { print ref $_[0] }
),
'add_trigger in Foo'
);
{
tie *STDOUT, 'IO::Scalar', \my $out;
$foo->foo;
is $out, "before_foo\nfoo\nafter_foo\nafter_foo2\nFoo", 'class name';
}
ok( Foo->add_trigger(
name => 'after_foo',
callback => sub { print "\ngets_here"; return 'YAY'; },
abortable => 1
),
'add_trigger in Foo'
);
{
tie *STDOUT, 'IO::Scalar', \my $out;
is( $foo->foo, 4, "Success returned" );
is_deeply ($foo->last_trigger_results->[-1], ['YAY']);
is $out,
"before_foo\nfoo\nafter_foo\nafter_foo2\nFoo\ngets_here",
'class name';
}
ok( Foo->add_trigger(
name => 'after_foo',
callback => sub { print "\nstopping_after"; return undef; },
abortable => 1
),
'add_trigger in Foo'
);
ok( Foo->add_trigger(
name => 'after_foo',
callback => sub { print "should not get here" }
),
'add_trigger in Foo'
);
{
tie *STDOUT, 'IO::Scalar', \my $out;
is( $foo->foo, undef, "The lat thing we ran was 'stopping_after', then returned failure " );
is $out,
"before_foo\nfoo\nafter_foo\nafter_foo2\nFoo\ngets_here\nstopping_after",
'class name';
unlike( $out, qr/should not get here/ );
}
# coverage tests
{
# pass a non-code ref and catch the carp
my @die;
eval {
local $SIG{__DIE__} = sub { push @die, @_ };
Foo->add_trigger(
name => 'wrong_type',
callback => []
);
};
like(
pop(@die),
qr(add_trigger[(][)] needs coderef at ),
'check for right callback param'
);
}
|