xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/Event/Generic.t (revision f3efcd0145415b7d44d9da97e0ad5c21b186ac61)
15759b3d2Safresh1use strict;
25759b3d2Safresh1use warnings;
35759b3d2Safresh1
45759b3d2Safresh1use Test2::Tools::Tiny;
55759b3d2Safresh1use Test2::EventFacet::Trace;
65759b3d2Safresh1
75759b3d2Safresh1use Test2::API qw/context intercept/;
85759b3d2Safresh1
95759b3d2Safresh1sub tool {
105759b3d2Safresh1    my $ctx = context();
115759b3d2Safresh1    my $e = $ctx->send_event('Generic', @_);
125759b3d2Safresh1    $ctx->release;
135759b3d2Safresh1    return $e;
145759b3d2Safresh1}
155759b3d2Safresh1
165759b3d2Safresh1my $e;
175759b3d2Safresh1intercept { $e = tool() };
185759b3d2Safresh1
195759b3d2Safresh1ok($e,                               "got event");
205759b3d2Safresh1ok($e->isa('Test2::Event'),          "It is an event");
215759b3d2Safresh1ok($e->isa('Test2::Event::Generic'), "It is an event");
225759b3d2Safresh1delete $e->{trace};
235759b3d2Safresh1is_deeply(
245759b3d2Safresh1    $e,
255759b3d2Safresh1    {
265759b3d2Safresh1        causes_fail      => 0,
275759b3d2Safresh1        increments_count => 0,
285759b3d2Safresh1        diagnostics      => 0,
295759b3d2Safresh1        no_display       => 0,
30*f3efcd01Safresh1        _eid             => $e->eid,
315759b3d2Safresh1        hubs             => [
325759b3d2Safresh1            {
335759b3d2Safresh1                'buffered' => 0,
345759b3d2Safresh1                'details'  => 'Test2::Hub::Interceptor',
35*f3efcd01Safresh1                'hid'      => $e->hubs->[0]->{hid},
365759b3d2Safresh1                'ipc'      => 0,
375759b3d2Safresh1                'nested'   => 0,
385759b3d2Safresh1                'pid'      => $$,
395759b3d2Safresh1                'tid'      => 0,
40*f3efcd01Safresh1                $e->hubs->[0]->{uuid} ? (uuid => $e->hubs->[0]->{uuid}) : (uuid => undef),
415759b3d2Safresh1            }
425759b3d2Safresh1        ],
43*f3efcd01Safresh1        $e->uuid ? (uuid => $e->uuid) : (),
445759b3d2Safresh1    },
455759b3d2Safresh1    "Defaults"
465759b3d2Safresh1);
475759b3d2Safresh1
485759b3d2Safresh1for my $f (qw/causes_fail increments_count diagnostics no_display/) {
495759b3d2Safresh1    is($e->$f, 0, "'$f' is 0");
505759b3d2Safresh1    is_deeply([$e->$f], [0], "'$f' is 0 is list context as well");
515759b3d2Safresh1
525759b3d2Safresh1    my $set = "set_$f";
535759b3d2Safresh1    $e->$set(1);
545759b3d2Safresh1    is($e->$f, 1, "'$f' was set to 1");
555759b3d2Safresh1}
565759b3d2Safresh1
575759b3d2Safresh1for my $f (qw/callback terminate global sets_plan/) {
585759b3d2Safresh1    is($e->$f, undef, "no $f");
595759b3d2Safresh1    is_deeply([$e->$f], [], "$f is empty in list context");
605759b3d2Safresh1}
615759b3d2Safresh1
625759b3d2Safresh1like($e->summary, qr/Test2::Event::Generic/, "Got base class summary");
635759b3d2Safresh1
645759b3d2Safresh1like(
655759b3d2Safresh1    exception { $e->set_sets_plan('bad') },
665759b3d2Safresh1    qr/'sets_plan' must be an array reference/,
675759b3d2Safresh1    "Must provide an arrayref"
685759b3d2Safresh1);
695759b3d2Safresh1
705759b3d2Safresh1$e->set_sets_plan([0, skip => 'cause']);
715759b3d2Safresh1is_deeply([$e->sets_plan], [0, skip => 'cause'], "sets_plan returns a list, not a ref");
725759b3d2Safresh1$e->set_sets_plan(undef);
735759b3d2Safresh1ok(!exists $e->{sets_plan}, "Removed sets_plan key");
745759b3d2Safresh1ok(!$e->sets_plan, "sets_plan is cleared");
755759b3d2Safresh1
765759b3d2Safresh1$e->set_global(0);
775759b3d2Safresh1is($e->global, 0, "global is off");
785759b3d2Safresh1$e->set_global(1);
795759b3d2Safresh1is($e->global, 1, "global is on");
805759b3d2Safresh1$e->set_global(0);
815759b3d2Safresh1is($e->global, 0, "global is again");
825759b3d2Safresh1$e->set_global(undef);
835759b3d2Safresh1ok(!exists $e->{global}, "removed global key");
845759b3d2Safresh1is($e->global, undef, "global is not defined");
855759b3d2Safresh1
865759b3d2Safresh1like(
875759b3d2Safresh1    exception { $e->set_callback('dogfood') },
885759b3d2Safresh1    qr/callback must be a code reference/,
895759b3d2Safresh1    "Callback must be code"
905759b3d2Safresh1);
915759b3d2Safresh1
925759b3d2Safresh1my $ran = 0;
935759b3d2Safresh1$e->set_callback(sub {
945759b3d2Safresh1    $ran++;
955759b3d2Safresh1    my $self = shift;
965759b3d2Safresh1    is($self, $e, "got self");
975759b3d2Safresh1    is_deeply( \@_, ['a', 'b', 'c'], "Got args" );
985759b3d2Safresh1    return 'foo';
995759b3d2Safresh1});
1005759b3d2Safresh1is($e->callback('a', 'b', 'c'), 'foo', "got callback's return");
1015759b3d2Safresh1ok($ran, "ran callback");
1025759b3d2Safresh1
1035759b3d2Safresh1$e->set_callback(undef);
1045759b3d2Safresh1ok(!$e->callback, "no callback");
1055759b3d2Safresh1ok(!exists $e->{callback}, "no callback key");
1065759b3d2Safresh1
1075759b3d2Safresh1like(
1085759b3d2Safresh1    exception { $e->set_terminate('1.1') },
1095759b3d2Safresh1    qr/terminate must be a positive integer/,
1105759b3d2Safresh1    "terminate only takes integers"
1115759b3d2Safresh1);
1125759b3d2Safresh1
1135759b3d2Safresh1like(
1145759b3d2Safresh1    exception { $e->set_terminate('foo') },
1155759b3d2Safresh1    qr/terminate must be a positive integer/,
1165759b3d2Safresh1    "terminate only takes numbers"
1175759b3d2Safresh1);
1185759b3d2Safresh1
1195759b3d2Safresh1like(
1205759b3d2Safresh1    exception { $e->set_terminate('-1') },
1215759b3d2Safresh1    qr/terminate must be a positive integer/,
1225759b3d2Safresh1    "terminate only takes positive integers"
1235759b3d2Safresh1);
1245759b3d2Safresh1
1255759b3d2Safresh1$e->set_terminate(0),
1265759b3d2Safresh1is($e->terminate, 0, "set to 0, 0 is valid");
1275759b3d2Safresh1$e->set_terminate(1),
1285759b3d2Safresh1is($e->terminate, 1, "set to 1");
1295759b3d2Safresh1$e->set_terminate(123),
1305759b3d2Safresh1is($e->terminate, 123, "set to 123");
1315759b3d2Safresh1$e->set_terminate(0),
1325759b3d2Safresh1is($e->terminate, 0, "set to 0, 0 is valid");
1335759b3d2Safresh1
1345759b3d2Safresh1$e->set_terminate(undef);
1355759b3d2Safresh1is($e->terminate, undef, "terminate is not defined");
1365759b3d2Safresh1ok(!exists $e->{terminate}, "no terminate key");
1375759b3d2Safresh1
1385759b3d2Safresh1# Test constructor args
1395759b3d2Safresh1intercept { $e = tool(causes_fail => 1, increments_count => 'a') };
1405759b3d2Safresh1is($e->causes_fail, 1, "attr from constructor");
1415759b3d2Safresh1is($e->increments_count, 'a', "attr from constructor");
1425759b3d2Safresh1
1435759b3d2Safresh1done_testing;
144