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