15759b3d2Safresh1use strict; 25759b3d2Safresh1use warnings; 35759b3d2Safresh1 45759b3d2Safresh1use Test2::IPC; 55759b3d2Safresh1use Test2::Tools::Tiny; 65759b3d2Safresh1 75759b3d2Safresh1use Test2::API qw/context intercept test2_stack/; 85759b3d2Safresh1 95759b3d2Safresh1ok(__PACKAGE__->can($_), "imported '$_\()'") for qw{ 105759b3d2Safresh1 ok 115759b3d2Safresh1 is isnt 125759b3d2Safresh1 like unlike 135759b3d2Safresh1 diag note 145759b3d2Safresh1 155759b3d2Safresh1 is_deeply 165759b3d2Safresh1 175759b3d2Safresh1 warnings 185759b3d2Safresh1 exception 195759b3d2Safresh1 205759b3d2Safresh1 plan 215759b3d2Safresh1 skip_all 225759b3d2Safresh1 done_testing 235759b3d2Safresh1}; 245759b3d2Safresh1 255759b3d2Safresh1ok(1, "'ok' Test"); 265759b3d2Safresh1is("foo", "foo", "'is' test"); 275759b3d2Safresh1is(undef, undef, "'is' undef test"); 285759b3d2Safresh1isnt("foo", "bar", "'isnt' test"); 295759b3d2Safresh1isnt("foo", undef, "'isnt' undef test 1"); 305759b3d2Safresh1isnt(undef, "foo", "'isnt' undef test 2"); 315759b3d2Safresh1like("foo", qr/o/, "'like' test"); 325759b3d2Safresh1unlike("foo", qr/a/, "'unlike' test"); 335759b3d2Safresh1 345759b3d2Safresh1note("Testing Note"); 355759b3d2Safresh1 365759b3d2Safresh1my $str = "abc"; 375759b3d2Safresh1is_deeply( 385759b3d2Safresh1 { a => 1, b => 2, c => { ref => \$str, obj => bless({x => 1}, 'XXX'), array => [1, 2, 3]}}, 395759b3d2Safresh1 { a => 1, b => 2, c => { ref => \$str, obj => {x => 1}, array => [1, 2, 3]}}, 405759b3d2Safresh1 "'is_deeply' test" 415759b3d2Safresh1); 425759b3d2Safresh1 435759b3d2Safresh1is_deeply( 445759b3d2Safresh1 warnings { warn "aaa\n"; warn "bbb\n" }, 455759b3d2Safresh1 [ "aaa\n", "bbb\n" ], 465759b3d2Safresh1 "Got warnings" 475759b3d2Safresh1); 485759b3d2Safresh1 495759b3d2Safresh1is_deeply( 505759b3d2Safresh1 warnings { 1 }, 515759b3d2Safresh1 [], 525759b3d2Safresh1 "no warnings" 535759b3d2Safresh1); 545759b3d2Safresh1 555759b3d2Safresh1is(exception { die "foo\n" }, "foo\n", "got exception"); 565759b3d2Safresh1is(exception { 1 }, undef, "no exception"); 575759b3d2Safresh1 585759b3d2Safresh1my $main_events = intercept { 595759b3d2Safresh1 plan 8; 605759b3d2Safresh1 615759b3d2Safresh1 ok(0, "'ok' Test"); 625759b3d2Safresh1 is("foo", "bar", "'is' test"); 635759b3d2Safresh1 isnt("foo", "foo", "'isnt' test"); 645759b3d2Safresh1 like("foo", qr/a/, "'like' test"); 655759b3d2Safresh1 unlike("foo", qr/o/, "'unlike' test"); 665759b3d2Safresh1 675759b3d2Safresh1 is_deeply( 685759b3d2Safresh1 { a => 1, b => 2, c => {}}, 695759b3d2Safresh1 { a => 1, b => 2, c => []}, 705759b3d2Safresh1 "'is_deeply' test" 715759b3d2Safresh1 ); 725759b3d2Safresh1}; 735759b3d2Safresh1 745759b3d2Safresh1my $other_events = intercept { 755759b3d2Safresh1 diag("Testing Diag"); 765759b3d2Safresh1 note("Testing Note"); 775759b3d2Safresh1}; 785759b3d2Safresh1 795759b3d2Safresh1my ($plan, $ok, $is, $isnt, $like, $unlike, $is_deeply) = grep {!$_->isa('Test2::Event::Diag')} @$main_events; 805759b3d2Safresh1my ($diag, $note) = @$other_events; 815759b3d2Safresh1 825759b3d2Safresh1ok($plan->isa('Test2::Event::Plan'), "got plan"); 835759b3d2Safresh1is($plan->max, 8, "planned for 8 oks"); 845759b3d2Safresh1 855759b3d2Safresh1ok($ok->isa('Test2::Event::Fail'), "got 'ok' result"); 865759b3d2Safresh1is($ok->facets->{assert}->pass, 0, "'ok' test failed"); 875759b3d2Safresh1 885759b3d2Safresh1ok($is->isa('Test2::Event::Fail'), "got 'is' result"); 895759b3d2Safresh1is($ok->facets->{assert}->pass, 0, "test failed"); 905759b3d2Safresh1 915759b3d2Safresh1ok($isnt->isa('Test2::Event::Fail'), "got 'isnt' result"); 925759b3d2Safresh1is($ok->facets->{assert}->pass, 0, "test failed"); 935759b3d2Safresh1 945759b3d2Safresh1ok($like->isa('Test2::Event::Fail'), "got 'like' result"); 955759b3d2Safresh1is($ok->facets->{assert}->pass, 0, "test failed"); 965759b3d2Safresh1 975759b3d2Safresh1ok($unlike->isa('Test2::Event::Fail'), "got 'unlike' result"); 985759b3d2Safresh1is($ok->facets->{assert}->pass, 0, "test failed"); 995759b3d2Safresh1 1005759b3d2Safresh1ok($is_deeply->isa('Test2::Event::Fail'), "got 'is_deeply' result"); 1015759b3d2Safresh1is($ok->facets->{assert}->pass, 0, "test failed"); 1025759b3d2Safresh1 1035759b3d2Safresh1ok($diag->isa('Test2::Event::Diag'), "got 'diag' result"); 1045759b3d2Safresh1is($diag->message, "Testing Diag", "got diag message"); 1055759b3d2Safresh1 1065759b3d2Safresh1ok($note->isa('Test2::Event::Note'), "got 'note' result"); 1075759b3d2Safresh1is($note->message, "Testing Note", "got note message"); 1085759b3d2Safresh1 1095759b3d2Safresh1my $events = intercept { 1105759b3d2Safresh1 skip_all 'because'; 1115759b3d2Safresh1 ok(0, "should not see me"); 1125759b3d2Safresh1 die "should not happen"; 1135759b3d2Safresh1}; 1145759b3d2Safresh1 1155759b3d2Safresh1is(@$events, 1, "1 event"); 1165759b3d2Safresh1ok($events->[0]->isa('Test2::Event::Plan'), "got plan"); 1175759b3d2Safresh1is($events->[0]->directive, 'SKIP', "plan is skip"); 1185759b3d2Safresh1is($events->[0]->reason, 'because', "skip reason"); 1195759b3d2Safresh1 1205759b3d2Safresh1$events = intercept { 1215759b3d2Safresh1 is(undef, ""); 1225759b3d2Safresh1 is("", undef); 1235759b3d2Safresh1 1245759b3d2Safresh1 isnt(undef, undef); 1255759b3d2Safresh1 1265759b3d2Safresh1 like(undef, qr//); 1275759b3d2Safresh1 unlike(undef, qr//); 1285759b3d2Safresh1}; 1295759b3d2Safresh1 1305759b3d2Safresh1@$events = grep {!$_->isa('Test2::Event::Diag')} @$events; 1315759b3d2Safresh1is(@$events, 5, "5 events"); 1325759b3d2Safresh1ok(!$_->facets->{assert}->pass, "undef test - should not pass") for @$events; 1335759b3d2Safresh1 1345759b3d2Safresh1sub tool { context() }; 1355759b3d2Safresh1 1365759b3d2Safresh1my %params; 1375759b3d2Safresh1my $ctx = context(level => -1); 1385759b3d2Safresh1my $ictx; 1395759b3d2Safresh1$events = intercept { 1405759b3d2Safresh1 %params = @_; 1415759b3d2Safresh1 1425759b3d2Safresh1 $ictx = tool(); 1435759b3d2Safresh1 $ictx->ok(1, 'pass'); 1445759b3d2Safresh1 $ictx->ok(0, 'fail'); 1455759b3d2Safresh1 my $trace = Test2::EventFacet::Trace->new( 1465759b3d2Safresh1 frame => [ __PACKAGE__, __FILE__, __LINE__], 1475759b3d2Safresh1 ); 1485759b3d2Safresh1 $ictx->hub->finalize($trace, 1); 1495759b3d2Safresh1}; 1505759b3d2Safresh1 1515759b3d2Safresh1@$events = grep {!$_->isa('Test2::Event::Diag')} @$events; 1525759b3d2Safresh1 1535759b3d2Safresh1is_deeply( 1545759b3d2Safresh1 \%params, 1555759b3d2Safresh1 { 1565759b3d2Safresh1 context => { %$ctx, _is_canon => undef, _is_spawn => undef, _aborted => undef }, 1575759b3d2Safresh1 hub => $ictx->hub, 1585759b3d2Safresh1 }, 1595759b3d2Safresh1 "Passed in some useful params" 1605759b3d2Safresh1); 1615759b3d2Safresh1 1625759b3d2Safresh1ok($ctx != $ictx, "Different context inside intercept"); 1635759b3d2Safresh1 1645759b3d2Safresh1is(@$events, 3, "got 3 events"); 1655759b3d2Safresh1 1665759b3d2Safresh1$ctx->release; 1675759b3d2Safresh1$ictx->release; 1685759b3d2Safresh1 1695759b3d2Safresh1# Test that a bail-out in an intercept does not exit. 1705759b3d2Safresh1$events = intercept { 1715759b3d2Safresh1 $ictx = tool(); 1725759b3d2Safresh1 $ictx->bail("The world ends"); 1735759b3d2Safresh1 $ictx->ok(0, "Should not see this"); 1745759b3d2Safresh1}; 1755759b3d2Safresh1 1765759b3d2Safresh1is(@$events, 1, "got 1 event"); 1775759b3d2Safresh1ok($events->[0]->isa('Test2::Event::Bail'), "got the bail"); 1785759b3d2Safresh1 1795759b3d2Safresh1$events = intercept { 1805759b3d2Safresh1 $ictx = tool(); 1815759b3d2Safresh1}; 1825759b3d2Safresh1 1835759b3d2Safresh1$ictx->release; 1845759b3d2Safresh1 1855759b3d2Safresh1like( 1865759b3d2Safresh1 exception { intercept { die 'foo' } }, 1875759b3d2Safresh1 qr/foo/, 188*5486feefSafresh1 "Exception was propagated" 1895759b3d2Safresh1); 1905759b3d2Safresh1 1915759b3d2Safresh1$events = intercept { 1925759b3d2Safresh1 test2_stack()->top->set_no_ending(0); 1935759b3d2Safresh1 ok(1); 1945759b3d2Safresh1}; 1955759b3d2Safresh1 1965759b3d2Safresh1is(@$events, 2, "2 events"); 1975759b3d2Safresh1ok($events->[0]->isa('Test2::Event::Pass'), "got a pass"); 1985759b3d2Safresh1ok($events->[1]->isa('Test2::Event::Plan'), "finalize was called"); 1995759b3d2Safresh1 2005759b3d2Safresh1$events = intercept { 2015759b3d2Safresh1 test2_stack()->top->set_no_ending(0); 2025759b3d2Safresh1 ok(1); 2035759b3d2Safresh1 done_testing; 2045759b3d2Safresh1}; 2055759b3d2Safresh1 2065759b3d2Safresh1is(@$events, 2, "2 events"); 2075759b3d2Safresh1ok($events->[0]->isa('Test2::Event::Pass'), "got a pass"); 2085759b3d2Safresh1ok($events->[1]->isa('Test2::Event::Plan'), "finalize was called (only 1 plan)"); 2095759b3d2Safresh1 2105759b3d2Safresh1done_testing; 211