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 120 121 122 123 124 125 126 127 128 129
|
use strict;
use warnings;
use Test2::Tools::Tiny;
use Test2::Util::Trace;
use Test2::API qw/context intercept/;
sub tool {
my $ctx = context();
my $e = $ctx->send_event('Generic', @_);
$ctx->release;
return $e;
}
my $e;
intercept { $e = tool() };
ok($e, "got event");
ok($e->isa('Test2::Event'), "It is an event");
ok($e->isa('Test2::Event::Generic'), "It is an event");
delete $e->{trace};
is_deeply(
$e,
{
causes_fail => 0,
increments_count => 0,
diagnostics => 0,
no_display => 0,
},
"Defaults"
);
for my $f (qw/causes_fail increments_count diagnostics no_display/) {
is($e->$f, 0, "'$f' is 0");
is_deeply([$e->$f], [0], "'$f' is 0 is list context as well");
my $set = "set_$f";
$e->$set(1);
is($e->$f, 1, "'$f' was set to 1");
}
for my $f (qw/callback terminate global sets_plan/) {
is($e->$f, undef, "no $f");
is_deeply([$e->$f], [], "$f is empty in list context");
}
like($e->summary, qr/Test2::Event::Generic/, "Got base class summary");
like(
exception { $e->set_sets_plan('bad') },
qr/'sets_plan' must be an array reference/,
"Must provide an arrayref"
);
$e->set_sets_plan([0, skip => 'cause']);
is_deeply([$e->sets_plan], [0, skip => 'cause'], "sets_plan returns a list, not a ref");
$e->set_sets_plan(undef);
ok(!exists $e->{sets_plan}, "Removed sets_plan key");
ok(!$e->sets_plan, "sets_plan is cleared");
$e->set_global(0);
is($e->global, 0, "global is off");
$e->set_global(1);
is($e->global, 1, "global is on");
$e->set_global(0);
is($e->global, 0, "global is again");
$e->set_global(undef);
ok(!exists $e->{global}, "removed global key");
is($e->global, undef, "global is not defined");
like(
exception { $e->set_callback('dogfood') },
qr/callback must be a code reference/,
"Callback must be code"
);
my $ran = 0;
$e->set_callback(sub {
$ran++;
my $self = shift;
is($self, $e, "got self");
is_deeply( \@_, ['a', 'b', 'c'], "Got args" );
return 'foo';
});
is($e->callback('a', 'b', 'c'), 'foo', "got callback's return");
ok($ran, "ran callback");
$e->set_callback(undef);
ok(!$e->callback, "no callback");
ok(!exists $e->{callback}, "no callback key");
like(
exception { $e->set_terminate('1.1') },
qr/terminate must be a positive integer/,
"terminate only takes integers"
);
like(
exception { $e->set_terminate('foo') },
qr/terminate must be a positive integer/,
"terminate only takes numbers"
);
like(
exception { $e->set_terminate('-1') },
qr/terminate must be a positive integer/,
"terminate only takes positive integers"
);
$e->set_terminate(0),
is($e->terminate, 0, "set to 0, 0 is valid");
$e->set_terminate(1),
is($e->terminate, 1, "set to 1");
$e->set_terminate(123),
is($e->terminate, 123, "set to 123");
$e->set_terminate(0),
is($e->terminate, 0, "set to 0, 0 is valid");
$e->set_terminate(undef);
is($e->terminate, undef, "terminate is not defined");
ok(!exists $e->{terminate}, "no terminate key");
# Test constructor args
intercept { $e = tool(causes_fail => 1, increments_count => 'a') };
is($e->causes_fail, 1, "attr from constructor");
is($e->increments_count, 'a', "attr from constructor");
done_testing;
|