xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/Tools/Tiny.t (revision 5486feefcc8cb79b19e014ab332cc5dfd05b3b33)
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