#!/usr/bin/perl use strict; use warnings; use Test::More tests => 19; use Test::MockObject; use Test::Exception; use POE; # TODO # stringification my $m; BEGIN { use_ok($m = "Verby::Step::Closure", "step") }; POE::Session->create( inline_states => { _start => sub { my $t = Test::MockObject->new; isa_ok((my $s = step $t, sub { }, sub { }), $m); $t->set_false("verify"); ok(!$s->is_satisfied, "step not satisfied"); $t->called_ok("verify"); $t->clear; $t->set_true("verify"); ok($s->is_satisfied, "step satisfied"); $t->clear; $t->mock("do"); $s->do; $t->called_ok("do"); }, }, ); $poe_kernel->run; { dies_ok { step "BlahBlah::Action::Class::That::Does'nt::Exist"; } "action class with require error is fatal"; } { my $t = Test::MockObject->new; $t->set_true("do"); my ($before, $after) = ( 0, 0 ); my $s = step $t, sub { $before++ }, sub { $after++ }; is( $before, 0, "before hook" ); is( $after, 0, "after hook" ); POE::Session->create( inline_states => { _start => sub { is( $before, 0, "before hook" ); $s->do(); is( $before, 1, "before hook" ); is( $after, 0, "after hook" ); }, _stop => sub { is( $before, 1, "before hook" ); is( $after, 0, "after hook" ); $_->() for @{ $_[HEAP]{post_hooks} }; is( $after, 1, "after hook" ); }, }, heap => { post_hooks => [] }, ); $poe_kernel->run; } { # autoplural accessors and stuff my $t = Test::MockObject->new; my $s1 = step $t; my $s2 = step $t; my $s3 = step $t; is_deeply([ $s1->depends ], [ ], "no deps yet"); $s1->add_deps($s2); is_deeply([ $s1->depends ], [ $s2 ], "dep appended"); $s1->add_deps($s3); is_deeply([ $s1->depends ], [ $s2, $s3 ], "dep appended"); $s1->depends([ $s2 ]); is_deeply([ $s1->depends ], [ $s2 ], "dep replaced"); }