xref: /openbsd-src/gnu/usr.bin/perl/cpan/Test-Simple/t/Test2/modules/Event.t (revision f3efcd0145415b7d44d9da97e0ad5c21b186ac61)
15759b3d2Safresh1use strict;
25759b3d2Safresh1use warnings;
35759b3d2Safresh1use Test2::Tools::Tiny;
45759b3d2Safresh1
55759b3d2Safresh1use Test2::Event();
65759b3d2Safresh1use Test2::EventFacet::Trace();
75759b3d2Safresh1use Test2::Event::Generic;
85759b3d2Safresh1
95759b3d2Safresh1use Test2::API qw/context/;
105759b3d2Safresh1use Scalar::Util qw/reftype/;
115759b3d2Safresh1
125759b3d2Safresh1tests old_api => sub {
135759b3d2Safresh1    {
145759b3d2Safresh1        package My::MockEvent;
155759b3d2Safresh1
165759b3d2Safresh1        use base 'Test2::Event';
175759b3d2Safresh1        use Test2::Util::HashBase qw/foo bar baz/;
185759b3d2Safresh1    }
195759b3d2Safresh1
205759b3d2Safresh1    ok(My::MockEvent->can($_), "Added $_ accessor") for qw/foo bar baz/;
215759b3d2Safresh1
225759b3d2Safresh1    my $one = My::MockEvent->new(trace => 'fake');
235759b3d2Safresh1
245759b3d2Safresh1    ok(!$one->causes_fail, "Events do not cause failures by default");
255759b3d2Safresh1
265759b3d2Safresh1    ok(!$one->$_, "$_ is false by default") for qw/increments_count terminate global/;
275759b3d2Safresh1
285759b3d2Safresh1    ok(!$one->get_meta('xxx'), "no meta-data associated for key 'xxx'");
295759b3d2Safresh1
305759b3d2Safresh1    $one->set_meta('xxx', '123');
315759b3d2Safresh1
325759b3d2Safresh1    is($one->meta('xxx'), '123', "got meta-data");
335759b3d2Safresh1
345759b3d2Safresh1    is($one->meta('xxx', '321'), '123', "did not use default");
355759b3d2Safresh1
365759b3d2Safresh1    is($one->meta('yyy', '1221'), '1221', "got the default");
375759b3d2Safresh1
385759b3d2Safresh1    is($one->meta('yyy'), '1221', "last call set the value to the default for future use");
395759b3d2Safresh1
405759b3d2Safresh1    is($one->summary, 'My::MockEvent', "Default summary is event package");
415759b3d2Safresh1
425759b3d2Safresh1    is($one->diagnostics, 0, "Not diagnostics by default");
435759b3d2Safresh1};
445759b3d2Safresh1
455759b3d2Safresh1tests deprecated => sub {
465759b3d2Safresh1    my $e = Test2::Event->new(trace => Test2::EventFacet::Trace->new(frame => ['foo', 'foo.pl', 42], nested => 2, hid => 'maybe'));
475759b3d2Safresh1
485759b3d2Safresh1    my $warnings = warnings {
495759b3d2Safresh1        local $ENV{AUTHOR_TESTING} = 1;
505759b3d2Safresh1        is($e->nested, 2, "Got nested from the trace");
515759b3d2Safresh1        is($e->in_subtest, 'maybe', "got hid from trace");
525759b3d2Safresh1
535759b3d2Safresh1        $e->trace->{nested} = 0;
545759b3d2Safresh1
555759b3d2Safresh1        local $ENV{AUTHOR_TESTING} = 0;
565759b3d2Safresh1        is($e->nested, 0, "Not nested");
575759b3d2Safresh1        is($e->in_subtest, undef, "Did not get hid");
585759b3d2Safresh1    };
595759b3d2Safresh1
605759b3d2Safresh1    is(@$warnings, 2, "got warnings once each");
615759b3d2Safresh1    like($warnings->[0], qr/Use of Test2::Event->nested\(\) is deprecated/, "Warned about deprecation");
625759b3d2Safresh1    like($warnings->[1], qr/Use of Test2::Event->in_subtest\(\) is deprecated/, "Warned about deprecation");
635759b3d2Safresh1};
645759b3d2Safresh1
655759b3d2Safresh1tests facet_data => sub {
665759b3d2Safresh1    my $e = Test2::Event::Generic->new(
675759b3d2Safresh1        causes_fail      => 0,
685759b3d2Safresh1        increments_count => 0,
695759b3d2Safresh1        diagnostics      => 0,
705759b3d2Safresh1        no_display       => 0,
715759b3d2Safresh1        callback         => undef,
725759b3d2Safresh1        terminate        => undef,
735759b3d2Safresh1        global           => undef,
745759b3d2Safresh1        sets_plan        => undef,
755759b3d2Safresh1        summary          => undef,
765759b3d2Safresh1        facet_data       => undef,
775759b3d2Safresh1    );
785759b3d2Safresh1
795759b3d2Safresh1    is_deeply(
805759b3d2Safresh1        $e->facet_data,
815759b3d2Safresh1        {
825759b3d2Safresh1            about => {
835759b3d2Safresh1                package    => 'Test2::Event::Generic',
845759b3d2Safresh1                details    => 'Test2::Event::Generic',
85*f3efcd01Safresh1                eid        => $e->eid,
86*f3efcd01Safresh1                no_display => undef,
875759b3d2Safresh1            },
885759b3d2Safresh1            control => {
895759b3d2Safresh1                has_callback => 0,
905759b3d2Safresh1                terminate    => undef,
915759b3d2Safresh1                global       => 0
925759b3d2Safresh1            },
935759b3d2Safresh1        },
94*f3efcd01Safresh1        "Facet data has control with only false values, and an about"
955759b3d2Safresh1    );
965759b3d2Safresh1
975759b3d2Safresh1    $e->set_trace(Test2::EventFacet::Trace->new(frame => ['foo', 'foo.t', 42]));
985759b3d2Safresh1    is_deeply(
995759b3d2Safresh1        $e->facet_data,
1005759b3d2Safresh1        {
1015759b3d2Safresh1            about => {
1025759b3d2Safresh1                package    => 'Test2::Event::Generic',
1035759b3d2Safresh1                details    => 'Test2::Event::Generic',
104*f3efcd01Safresh1                eid        => $e->eid,
105*f3efcd01Safresh1                no_display => undef,
1065759b3d2Safresh1            },
1075759b3d2Safresh1            control => {
1085759b3d2Safresh1                has_callback => 0,
1095759b3d2Safresh1                terminate    => undef,
1105759b3d2Safresh1                global       => 0
1115759b3d2Safresh1            },
1125759b3d2Safresh1            trace => {
1135759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
1145759b3d2Safresh1                pid => $$,
1155759b3d2Safresh1                tid => 0,
1165759b3d2Safresh1            },
1175759b3d2Safresh1        },
1185759b3d2Safresh1        "Got a trace now"
1195759b3d2Safresh1    );
1205759b3d2Safresh1
1215759b3d2Safresh1    $e->set_causes_fail(1);
1225759b3d2Safresh1    is_deeply(
1235759b3d2Safresh1        $e->facet_data,
1245759b3d2Safresh1        {
1255759b3d2Safresh1            about => {
1265759b3d2Safresh1                package    => 'Test2::Event::Generic',
1275759b3d2Safresh1                details    => 'Test2::Event::Generic',
128*f3efcd01Safresh1                eid        => $e->eid,
1295759b3d2Safresh1                no_display => undef
1305759b3d2Safresh1            },
1315759b3d2Safresh1            control => {
1325759b3d2Safresh1                has_callback => 0,
1335759b3d2Safresh1                terminate    => undef,
1345759b3d2Safresh1                global       => 0
1355759b3d2Safresh1            },
1365759b3d2Safresh1            trace => {
1375759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
1385759b3d2Safresh1                pid   => $$,
1395759b3d2Safresh1                tid   => 0,
1405759b3d2Safresh1            },
1415759b3d2Safresh1            errors => [
1425759b3d2Safresh1                {
1435759b3d2Safresh1                    tag     => 'FAIL',
1445759b3d2Safresh1                    details => 'Test2::Event::Generic',
1455759b3d2Safresh1                    fail    => 1,
1465759b3d2Safresh1                }
1475759b3d2Safresh1            ],
1485759b3d2Safresh1        },
1495759b3d2Safresh1        "Got an error"
1505759b3d2Safresh1    );
1515759b3d2Safresh1
1525759b3d2Safresh1    $e->set_increments_count(1);
1535759b3d2Safresh1    is_deeply(
1545759b3d2Safresh1        $e->facet_data,
1555759b3d2Safresh1        {
1565759b3d2Safresh1            about => {
1575759b3d2Safresh1                package    => 'Test2::Event::Generic',
1585759b3d2Safresh1                details    => 'Test2::Event::Generic',
159*f3efcd01Safresh1                eid        => $e->eid,
1605759b3d2Safresh1                no_display => undef
1615759b3d2Safresh1            },
1625759b3d2Safresh1            control => {
1635759b3d2Safresh1                has_callback => 0,
1645759b3d2Safresh1                terminate    => undef,
1655759b3d2Safresh1                global       => 0
1665759b3d2Safresh1            },
1675759b3d2Safresh1            trace => {
1685759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
1695759b3d2Safresh1                pid   => $$,
1705759b3d2Safresh1                tid   => 0,
1715759b3d2Safresh1            },
1725759b3d2Safresh1            assert => {
1735759b3d2Safresh1                no_debug => 1,
1745759b3d2Safresh1                pass => 0,
1755759b3d2Safresh1                details => 'Test2::Event::Generic',
1765759b3d2Safresh1            },
1775759b3d2Safresh1        },
1785759b3d2Safresh1        "Got an assert now"
1795759b3d2Safresh1    );
1805759b3d2Safresh1
1815759b3d2Safresh1    $e->set_causes_fail(0);
1825759b3d2Safresh1    is_deeply(
1835759b3d2Safresh1        $e->facet_data,
1845759b3d2Safresh1        {
1855759b3d2Safresh1            about => {
1865759b3d2Safresh1                package    => 'Test2::Event::Generic',
1875759b3d2Safresh1                details    => 'Test2::Event::Generic',
188*f3efcd01Safresh1                eid        => $e->eid,
1895759b3d2Safresh1                no_display => undef
1905759b3d2Safresh1            },
1915759b3d2Safresh1            control => {
1925759b3d2Safresh1                has_callback => 0,
1935759b3d2Safresh1                terminate    => undef,
1945759b3d2Safresh1                global       => 0
1955759b3d2Safresh1            },
1965759b3d2Safresh1            trace => {
1975759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
1985759b3d2Safresh1                pid   => $$,
1995759b3d2Safresh1                tid   => 0,
2005759b3d2Safresh1            },
2015759b3d2Safresh1            assert => {
2025759b3d2Safresh1                no_debug => 1,
2035759b3d2Safresh1                pass => 1,
2045759b3d2Safresh1                details => 'Test2::Event::Generic',
2055759b3d2Safresh1            },
2065759b3d2Safresh1        },
2075759b3d2Safresh1        "Got a passing assert now"
2085759b3d2Safresh1    );
2095759b3d2Safresh1
2105759b3d2Safresh1    $e->set_global(1);
2115759b3d2Safresh1    $e->set_terminate(255);
2125759b3d2Safresh1    $e->set_callback(sub {1});
2135759b3d2Safresh1    is_deeply(
2145759b3d2Safresh1        $e->facet_data,
2155759b3d2Safresh1        {
2165759b3d2Safresh1            about => {
2175759b3d2Safresh1                package    => 'Test2::Event::Generic',
2185759b3d2Safresh1                details    => 'Test2::Event::Generic',
219*f3efcd01Safresh1                eid        => $e->eid,
2205759b3d2Safresh1                no_display => undef
2215759b3d2Safresh1            },
2225759b3d2Safresh1            control => {
2235759b3d2Safresh1                has_callback => 1,
2245759b3d2Safresh1                terminate    => 255,
2255759b3d2Safresh1                global       => 1,
2265759b3d2Safresh1            },
2275759b3d2Safresh1            trace => {
2285759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
2295759b3d2Safresh1                pid   => $$,
2305759b3d2Safresh1                tid   => 0,
2315759b3d2Safresh1            },
2325759b3d2Safresh1            assert => {
2335759b3d2Safresh1                no_debug => 1,
2345759b3d2Safresh1                pass => 1,
2355759b3d2Safresh1                details => 'Test2::Event::Generic',
2365759b3d2Safresh1            },
2375759b3d2Safresh1        },
2385759b3d2Safresh1        "control fields were altered"
2395759b3d2Safresh1    );
2405759b3d2Safresh1
2415759b3d2Safresh1    my $data;
2425759b3d2Safresh1    {
2435759b3d2Safresh1        no warnings 'once';
2445759b3d2Safresh1        local *Test2::Event::Generic::subtest_id = sub { 123 };
2455759b3d2Safresh1        $data = $e->facet_data;
2465759b3d2Safresh1    }
2475759b3d2Safresh1    is_deeply(
2485759b3d2Safresh1        $data,
2495759b3d2Safresh1        {
2505759b3d2Safresh1            about => {
2515759b3d2Safresh1                package    => 'Test2::Event::Generic',
2525759b3d2Safresh1                details    => 'Test2::Event::Generic',
253*f3efcd01Safresh1                eid        => $e->eid,
2545759b3d2Safresh1                no_display => undef
2555759b3d2Safresh1            },
2565759b3d2Safresh1            control => {
2575759b3d2Safresh1                has_callback => 1,
2585759b3d2Safresh1                terminate    => 255,
2595759b3d2Safresh1                global       => 1,
2605759b3d2Safresh1            },
2615759b3d2Safresh1            trace => {
2625759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
2635759b3d2Safresh1                pid   => $$,
2645759b3d2Safresh1                tid   => 0,
2655759b3d2Safresh1            },
2665759b3d2Safresh1            assert => {
2675759b3d2Safresh1                no_debug => 1,
2685759b3d2Safresh1                pass     => 1,
2695759b3d2Safresh1                details  => 'Test2::Event::Generic',
2705759b3d2Safresh1            },
2715759b3d2Safresh1            parent => {hid => 123},
2725759b3d2Safresh1        },
2735759b3d2Safresh1        "Added parent"
2745759b3d2Safresh1    );
2755759b3d2Safresh1
2765759b3d2Safresh1    $e->set_meta('foo', {a => 1});
2775759b3d2Safresh1    is_deeply(
2785759b3d2Safresh1        $e->facet_data,
2795759b3d2Safresh1        {
2805759b3d2Safresh1            about => {
2815759b3d2Safresh1                package    => 'Test2::Event::Generic',
2825759b3d2Safresh1                details    => 'Test2::Event::Generic',
283*f3efcd01Safresh1                eid        => $e->eid,
2845759b3d2Safresh1                no_display => undef
2855759b3d2Safresh1            },
2865759b3d2Safresh1            control => {
2875759b3d2Safresh1                has_callback => 1,
2885759b3d2Safresh1                terminate    => 255,
2895759b3d2Safresh1                global       => 1,
2905759b3d2Safresh1            },
2915759b3d2Safresh1            trace => {
2925759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
2935759b3d2Safresh1                pid   => $$,
2945759b3d2Safresh1                tid   => 0,
2955759b3d2Safresh1            },
2965759b3d2Safresh1            assert => {
2975759b3d2Safresh1                no_debug => 1,
2985759b3d2Safresh1                pass     => 1,
2995759b3d2Safresh1                details  => 'Test2::Event::Generic',
3005759b3d2Safresh1            },
3015759b3d2Safresh1            meta => {foo => {a => 1}},
3025759b3d2Safresh1        },
3035759b3d2Safresh1        "Grabbed meta"
3045759b3d2Safresh1    );
3055759b3d2Safresh1
3065759b3d2Safresh1
3075759b3d2Safresh1    $e->set_sets_plan([5]);
3085759b3d2Safresh1    is_deeply(
3095759b3d2Safresh1        $e->facet_data,
3105759b3d2Safresh1        {
3115759b3d2Safresh1            about => {
3125759b3d2Safresh1                package    => 'Test2::Event::Generic',
3135759b3d2Safresh1                details    => 'Test2::Event::Generic',
314*f3efcd01Safresh1                eid        => $e->eid,
3155759b3d2Safresh1                no_display => undef
3165759b3d2Safresh1            },
3175759b3d2Safresh1            control => {
3185759b3d2Safresh1                has_callback => 1,
3195759b3d2Safresh1                terminate    => 255,
3205759b3d2Safresh1                global       => 1,
3215759b3d2Safresh1            },
3225759b3d2Safresh1            trace => {
3235759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
3245759b3d2Safresh1                pid   => $$,
3255759b3d2Safresh1                tid   => 0,
3265759b3d2Safresh1            },
3275759b3d2Safresh1            assert => {
3285759b3d2Safresh1                no_debug => 1,
3295759b3d2Safresh1                pass     => 1,
3305759b3d2Safresh1                details  => 'Test2::Event::Generic',
3315759b3d2Safresh1            },
3325759b3d2Safresh1            meta => {foo => {a => 1}},
3335759b3d2Safresh1            plan => { count => 5 },
3345759b3d2Safresh1        },
3355759b3d2Safresh1        "Plan facet added"
3365759b3d2Safresh1    );
3375759b3d2Safresh1
3385759b3d2Safresh1    $e->set_terminate(undef);
3395759b3d2Safresh1    $e->set_sets_plan([0, SKIP => 'because']);
3405759b3d2Safresh1    is_deeply(
3415759b3d2Safresh1        $e->facet_data,
3425759b3d2Safresh1        {
3435759b3d2Safresh1            about => {
3445759b3d2Safresh1                package    => 'Test2::Event::Generic',
3455759b3d2Safresh1                details    => 'Test2::Event::Generic',
346*f3efcd01Safresh1                eid        => $e->eid,
3475759b3d2Safresh1                no_display => undef
3485759b3d2Safresh1            },
3495759b3d2Safresh1            control => {
3505759b3d2Safresh1                has_callback => 1,
3515759b3d2Safresh1                terminate    => 0,
3525759b3d2Safresh1                global       => 1,
3535759b3d2Safresh1            },
3545759b3d2Safresh1            trace => {
3555759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
3565759b3d2Safresh1                pid   => $$,
3575759b3d2Safresh1                tid   => 0,
3585759b3d2Safresh1            },
3595759b3d2Safresh1            assert => {
3605759b3d2Safresh1                no_debug => 1,
3615759b3d2Safresh1                pass     => 1,
3625759b3d2Safresh1                details  => 'Test2::Event::Generic',
3635759b3d2Safresh1            },
3645759b3d2Safresh1            meta => {foo => {a => 1}},
3655759b3d2Safresh1            plan => { count => 0, skip => 1, details => 'because' },
3665759b3d2Safresh1        },
3675759b3d2Safresh1        "Plan set terminate, skip, and details"
3685759b3d2Safresh1    );
3695759b3d2Safresh1
3705759b3d2Safresh1    $e->set_sets_plan([0, 'NO PLAN' => 'because']);
3715759b3d2Safresh1    is_deeply(
3725759b3d2Safresh1        $e->facet_data,
3735759b3d2Safresh1        {
3745759b3d2Safresh1            about => {
3755759b3d2Safresh1                package    => 'Test2::Event::Generic',
3765759b3d2Safresh1                details    => 'Test2::Event::Generic',
377*f3efcd01Safresh1                eid        => $e->eid,
3785759b3d2Safresh1                no_display => undef
3795759b3d2Safresh1            },
3805759b3d2Safresh1            control => {
3815759b3d2Safresh1                has_callback => 1,
3825759b3d2Safresh1                terminate    => undef,
3835759b3d2Safresh1                global       => 1,
3845759b3d2Safresh1            },
3855759b3d2Safresh1            trace => {
3865759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
3875759b3d2Safresh1                pid   => $$,
3885759b3d2Safresh1                tid   => 0,
3895759b3d2Safresh1            },
3905759b3d2Safresh1            assert => {
3915759b3d2Safresh1                no_debug => 1,
3925759b3d2Safresh1                pass     => 1,
3935759b3d2Safresh1                details  => 'Test2::Event::Generic',
3945759b3d2Safresh1            },
3955759b3d2Safresh1            meta => {foo => {a => 1}},
3965759b3d2Safresh1            plan => { count => 0, none => 1, details => 'because' },
3975759b3d2Safresh1        },
3985759b3d2Safresh1        "Plan does not set terminate, but sets 'none' and 'details'"
3995759b3d2Safresh1    );
4005759b3d2Safresh1
4015759b3d2Safresh1    $e->add_amnesty({tag => 'foo', details => 'bar'});
4025759b3d2Safresh1    $e->add_amnesty({tag => 'baz', details => 'bat'});
4035759b3d2Safresh1    is_deeply(
4045759b3d2Safresh1        $e->facet_data,
4055759b3d2Safresh1        {
4065759b3d2Safresh1            about => {
4075759b3d2Safresh1                package    => 'Test2::Event::Generic',
4085759b3d2Safresh1                details    => 'Test2::Event::Generic',
409*f3efcd01Safresh1                eid        => $e->eid,
4105759b3d2Safresh1                no_display => undef
4115759b3d2Safresh1            },
4125759b3d2Safresh1            control => {
4135759b3d2Safresh1                has_callback => 1,
4145759b3d2Safresh1                terminate    => undef,
4155759b3d2Safresh1                global       => 1,
4165759b3d2Safresh1            },
4175759b3d2Safresh1            trace => {
4185759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
4195759b3d2Safresh1                pid   => $$,
4205759b3d2Safresh1                tid   => 0,
4215759b3d2Safresh1            },
4225759b3d2Safresh1            assert => {
4235759b3d2Safresh1                no_debug => 1,
4245759b3d2Safresh1                pass     => 1,
4255759b3d2Safresh1                details  => 'Test2::Event::Generic',
4265759b3d2Safresh1            },
4275759b3d2Safresh1            meta => {foo => {a => 1}},
4285759b3d2Safresh1            plan => { count => 0, none => 1, details => 'because' },
4295759b3d2Safresh1            amnesty => [
4305759b3d2Safresh1                { tag => 'foo', details => 'bar' },
4315759b3d2Safresh1                { tag => 'baz', details => 'bat' },
4325759b3d2Safresh1            ],
4335759b3d2Safresh1        },
4345759b3d2Safresh1        "Amnesty added"
4355759b3d2Safresh1    );
4365759b3d2Safresh1
4375759b3d2Safresh1    $e = Test2::Event::Generic->new();
4385759b3d2Safresh1    $e->set_diagnostics(1);
4395759b3d2Safresh1    $e->set_no_display(1);
4405759b3d2Safresh1    is_deeply(
4415759b3d2Safresh1        $e->facet_data,
4425759b3d2Safresh1        {
4435759b3d2Safresh1            about => {
4445759b3d2Safresh1                package    => 'Test2::Event::Generic',
4455759b3d2Safresh1                details    => 'Test2::Event::Generic',
446*f3efcd01Safresh1                eid        => $e->eid,
4475759b3d2Safresh1                no_display => 1,
4485759b3d2Safresh1            },
4495759b3d2Safresh1            control => {
4505759b3d2Safresh1                has_callback => 0,
4515759b3d2Safresh1                terminate    => undef,
4525759b3d2Safresh1                global       => 0,
4535759b3d2Safresh1            },
4545759b3d2Safresh1        },
4555759b3d2Safresh1        "No Info"
4565759b3d2Safresh1    );
4575759b3d2Safresh1
4585759b3d2Safresh1    $e->set_no_display(0);
4595759b3d2Safresh1    is_deeply(
4605759b3d2Safresh1        $e->facet_data,
4615759b3d2Safresh1        {
4625759b3d2Safresh1            about => {
4635759b3d2Safresh1                package    => 'Test2::Event::Generic',
4645759b3d2Safresh1                details    => 'Test2::Event::Generic',
465*f3efcd01Safresh1                eid        => $e->eid,
4665759b3d2Safresh1                no_display => undef,
4675759b3d2Safresh1            },
4685759b3d2Safresh1            control => {
4695759b3d2Safresh1                has_callback => 0,
4705759b3d2Safresh1                terminate    => undef,
4715759b3d2Safresh1                global       => 0,
4725759b3d2Safresh1            },
4735759b3d2Safresh1            info => [{
4745759b3d2Safresh1                details => 'Test2::Event::Generic',
4755759b3d2Safresh1                tag => 'DIAG',
4765759b3d2Safresh1                debug => 1,
4775759b3d2Safresh1            }],
4785759b3d2Safresh1        },
4795759b3d2Safresh1        "Got debug Info"
4805759b3d2Safresh1    );
4815759b3d2Safresh1
4825759b3d2Safresh1    $e->set_summary("foo bar baz");
4835759b3d2Safresh1    is_deeply(
4845759b3d2Safresh1        $e->facet_data,
4855759b3d2Safresh1        {
4865759b3d2Safresh1            about => {
4875759b3d2Safresh1                package    => 'Test2::Event::Generic',
4885759b3d2Safresh1                details    => 'foo bar baz',
489*f3efcd01Safresh1                eid        => $e->eid,
4905759b3d2Safresh1                no_display => undef,
4915759b3d2Safresh1            },
4925759b3d2Safresh1            control => {
4935759b3d2Safresh1                has_callback => 0,
4945759b3d2Safresh1                terminate    => undef,
4955759b3d2Safresh1                global       => 0,
4965759b3d2Safresh1            },
4975759b3d2Safresh1            info => [{
4985759b3d2Safresh1                details => 'foo bar baz',
4995759b3d2Safresh1                tag => 'DIAG',
5005759b3d2Safresh1                debug => 1,
5015759b3d2Safresh1            }],
5025759b3d2Safresh1        },
5035759b3d2Safresh1        "Got debug Info with summary change"
5045759b3d2Safresh1    );
5055759b3d2Safresh1};
5065759b3d2Safresh1
5075759b3d2Safresh1tests facets => sub {
5085759b3d2Safresh1    my $data = {
5095759b3d2Safresh1        about => {
5105759b3d2Safresh1            package    => 'Test2::Event::Generic',
5115759b3d2Safresh1            details    => 'Test2::Event::Generic',
5125759b3d2Safresh1            no_display => undef
5135759b3d2Safresh1        },
5145759b3d2Safresh1        control => {
5155759b3d2Safresh1            has_callback => 1,
5165759b3d2Safresh1            terminate    => undef,
5175759b3d2Safresh1            global       => 1,
5185759b3d2Safresh1        },
5195759b3d2Safresh1        trace => {
5205759b3d2Safresh1            frame => ['foo', 'foo.t', 42],
5215759b3d2Safresh1            pid   => $$,
5225759b3d2Safresh1            tid   => 0,
5235759b3d2Safresh1        },
5245759b3d2Safresh1        assert => {
5255759b3d2Safresh1            no_debug => 1,
5265759b3d2Safresh1            pass     => 1,
5275759b3d2Safresh1            details  => 'Test2::Event::Generic',
5285759b3d2Safresh1        },
5295759b3d2Safresh1        meta => {foo => {a => 1}},
5305759b3d2Safresh1        plan    => {count => 0,   none     => 1, details => 'because'},
5315759b3d2Safresh1        parent  => {hid   => 123, children => []},
5325759b3d2Safresh1        amnesty => [
5335759b3d2Safresh1            {tag => 'foo', details => 'bar'},
5345759b3d2Safresh1            {tag => 'baz', details => 'bat'},
5355759b3d2Safresh1        ],
5365759b3d2Safresh1        info => [
5375759b3d2Safresh1            {
5385759b3d2Safresh1                details => 'foo bar baz',
5395759b3d2Safresh1                tag     => 'DIAG',
5405759b3d2Safresh1                debug   => 1,
5415759b3d2Safresh1            }
5425759b3d2Safresh1        ],
5435759b3d2Safresh1        errors => [{
5445759b3d2Safresh1            tag     => 'FAIL',
5455759b3d2Safresh1            details => 'Test2::Event::Generic',
5465759b3d2Safresh1            fail    => 1,
5475759b3d2Safresh1        }],
5485759b3d2Safresh1    };
5495759b3d2Safresh1
5505759b3d2Safresh1    my $e = Test2::Event::Generic->new(facet_data => $data);
5515759b3d2Safresh1    is_deeply(
5525759b3d2Safresh1        $e->facet_data,
5535759b3d2Safresh1        $e->facets,
5545759b3d2Safresh1        "Facets and facet_data have the same structure"
5555759b3d2Safresh1    );
5565759b3d2Safresh1
5575759b3d2Safresh1    my $facets = $e->facets;
5585759b3d2Safresh1
5595759b3d2Safresh1    for my $key (sort keys %$facets) {
5605759b3d2Safresh1        my $type = "Test2::EventFacet::" . ucfirst($key);
5615759b3d2Safresh1        $type =~ s/s$//;
5625759b3d2Safresh1        my $val  = $facets->{$key};
5635759b3d2Safresh1        if ($type->is_list) {
5645759b3d2Safresh1            for my $f (@$val) {
5655759b3d2Safresh1                ok($f->isa('Test2::EventFacet'), "'$key' has a blessed facet");
5665759b3d2Safresh1                ok($f->isa("$type"), "'$key' is a '$type'") or diag("$f");
5675759b3d2Safresh1            }
5685759b3d2Safresh1        }
5695759b3d2Safresh1        else {
5705759b3d2Safresh1            ok($val->isa('Test2::EventFacet'), "'$key' has a blessed facet");
5715759b3d2Safresh1            ok($val->isa($type), "'$key' is a '$type'");
5725759b3d2Safresh1        }
5735759b3d2Safresh1    }
5745759b3d2Safresh1};
5755759b3d2Safresh1
5765759b3d2Safresh1tests common_facet_data => sub {
5775759b3d2Safresh1    my $e = Test2::Event::Generic->new(
5785759b3d2Safresh1        causes_fail      => 0,
5795759b3d2Safresh1        increments_count => 0,
5805759b3d2Safresh1        diagnostics      => 0,
5815759b3d2Safresh1        no_display       => 0,
5825759b3d2Safresh1        callback         => undef,
5835759b3d2Safresh1        terminate        => undef,
5845759b3d2Safresh1        global           => undef,
5855759b3d2Safresh1        sets_plan        => undef,
5865759b3d2Safresh1        summary          => undef,
5875759b3d2Safresh1        facet_data       => undef,
5885759b3d2Safresh1    );
5895759b3d2Safresh1
5905759b3d2Safresh1    is_deeply(
5915759b3d2Safresh1        $e->common_facet_data,
5925759b3d2Safresh1        {
5935759b3d2Safresh1            about => {
5945759b3d2Safresh1                package => 'Test2::Event::Generic',
595*f3efcd01Safresh1                eid     => $e->eid,
5965759b3d2Safresh1            },
5975759b3d2Safresh1        },
5985759b3d2Safresh1        "Facet data has an about"
5995759b3d2Safresh1    );
6005759b3d2Safresh1
6015759b3d2Safresh1    $e->set_trace(Test2::EventFacet::Trace->new(frame => ['foo', 'foo.t', 42]));
6025759b3d2Safresh1    is_deeply(
6035759b3d2Safresh1        $e->common_facet_data,
6045759b3d2Safresh1        {
6055759b3d2Safresh1            about => {
6065759b3d2Safresh1                package => 'Test2::Event::Generic',
607*f3efcd01Safresh1                eid     => $e->eid,
6085759b3d2Safresh1            },
6095759b3d2Safresh1            trace => {
6105759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
6115759b3d2Safresh1                pid   => $$,
6125759b3d2Safresh1                tid   => 0,
6135759b3d2Safresh1            },
6145759b3d2Safresh1        },
6155759b3d2Safresh1        "Got a trace now"
6165759b3d2Safresh1    );
6175759b3d2Safresh1
6185759b3d2Safresh1    $e->set_meta('foo', {a => 1});
6195759b3d2Safresh1    is_deeply(
6205759b3d2Safresh1        $e->common_facet_data,
6215759b3d2Safresh1        {
6225759b3d2Safresh1            about => {
6235759b3d2Safresh1                package => 'Test2::Event::Generic',
624*f3efcd01Safresh1                eid     => $e->eid,
6255759b3d2Safresh1            },
6265759b3d2Safresh1            trace => {
6275759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
6285759b3d2Safresh1                pid   => $$,
6295759b3d2Safresh1                tid   => 0,
6305759b3d2Safresh1            },
6315759b3d2Safresh1            meta => {foo => {a => 1}},
6325759b3d2Safresh1        },
6335759b3d2Safresh1        "Grabbed meta"
6345759b3d2Safresh1    );
6355759b3d2Safresh1
6365759b3d2Safresh1    $e->add_amnesty({tag => 'foo', details => 'bar'});
6375759b3d2Safresh1    $e->add_amnesty({tag => 'baz', details => 'bat'});
6385759b3d2Safresh1    is_deeply(
6395759b3d2Safresh1        $e->common_facet_data,
6405759b3d2Safresh1        {
6415759b3d2Safresh1            about => {
6425759b3d2Safresh1                package => 'Test2::Event::Generic',
643*f3efcd01Safresh1                eid     => $e->eid,
6445759b3d2Safresh1            },
6455759b3d2Safresh1            trace => {
6465759b3d2Safresh1                frame => ['foo', 'foo.t', 42],
6475759b3d2Safresh1                pid   => $$,
6485759b3d2Safresh1                tid   => 0,
6495759b3d2Safresh1            },
6505759b3d2Safresh1            meta    => {foo => {a => 1}},
6515759b3d2Safresh1            amnesty => [
6525759b3d2Safresh1                {tag => 'foo', details => 'bar'},
6535759b3d2Safresh1                {tag => 'baz', details => 'bat'},
6545759b3d2Safresh1            ],
6555759b3d2Safresh1        },
6565759b3d2Safresh1        "Amnesty added"
6575759b3d2Safresh1    );
6585759b3d2Safresh1};
6595759b3d2Safresh1
6605759b3d2Safresh1tests related => sub {
6615759b3d2Safresh1    my $ctx = context();
6625759b3d2Safresh1    my $ev_a = $ctx->build_ev2(about => {});
6635759b3d2Safresh1    my $ev_b = $ctx->build_ev2(about => {});
6645759b3d2Safresh1    $ctx->release;
6655759b3d2Safresh1
6665759b3d2Safresh1    $ctx = context();
6675759b3d2Safresh1    my $ev_c = $ctx->build_ev2(about => {});
6685759b3d2Safresh1    $ctx->release;
6695759b3d2Safresh1
6705759b3d2Safresh1    delete $ev_a->{trace}->{uuid};
6715759b3d2Safresh1    delete $ev_b->{trace}->{uuid};
6725759b3d2Safresh1    delete $ev_c->{trace}->{uuid};
6735759b3d2Safresh1
6745759b3d2Safresh1    ok($ev_a->related($ev_b), "Related as they were created with the same context (no uuid)");
6755759b3d2Safresh1    ok(!$ev_a->related($ev_c), "Not related as they were created with a different context (no uuid)");
6765759b3d2Safresh1
6775759b3d2Safresh1    $ev_a->{trace}->{uuid} = 'xxx'; # Yes I know it is not valid.
6785759b3d2Safresh1    $ev_b->{trace}->{uuid} = 'yyy'; # Yes I know it is not valid.
6795759b3d2Safresh1    $ev_c->{trace}->{uuid} = 'xxx'; # Yes I know it is not valid.
6805759b3d2Safresh1
6815759b3d2Safresh1    ok(!$ev_a->related($ev_b), "Not related, traces have different UUID's");
6825759b3d2Safresh1    ok($ev_a->related($ev_c), "Related, traces have the same UUID's");
6835759b3d2Safresh1};
6845759b3d2Safresh1
6855759b3d2Safresh1tests verify_facet_data => sub {
6865759b3d2Safresh1    my $ev1 = Test2::Event::V2->new(
6875759b3d2Safresh1        assert => { pass => 1 },
6885759b3d2Safresh1        info => [{tag => 'NOTE', details => 'oops' }],
6895759b3d2Safresh1        'a custom one' => {},
6905759b3d2Safresh1    );
6915759b3d2Safresh1
6925759b3d2Safresh1    is_deeply(
6935759b3d2Safresh1        [$ev1->validate_facet_data],
6945759b3d2Safresh1        [],
6955759b3d2Safresh1        "No errors"
6965759b3d2Safresh1    );
6975759b3d2Safresh1
6985759b3d2Safresh1    my $ev2 = Test2::Event::V2->new(
6995759b3d2Safresh1        assert => [{ pass => 1 }],
7005759b3d2Safresh1        info => {tag => 'NOTE', details => 'oops' },
7015759b3d2Safresh1        'a custom one' => {},
7025759b3d2Safresh1    );
7035759b3d2Safresh1
7045759b3d2Safresh1    my @errors = $ev2->validate_facet_data;
7055759b3d2Safresh1    is(@errors, 2, "Got 2 errors");
7065759b3d2Safresh1    like($errors[0], qr/^Facet 'assert' should not be a list, but got a a list/, "Got a list for a non-list type");
7075759b3d2Safresh1    like($errors[1], qr/^Facet 'info' should be a list, but got a single item/, "Got a single item when a list is needed");
7085759b3d2Safresh1
7095759b3d2Safresh1    @errors = $ev2->validate_facet_data(require_facet_class => 1);
7105759b3d2Safresh1    is(@errors, 3, "Got 3 errors");
7115759b3d2Safresh1    is($errors[0], "Could not find a facet class for facet 'a custom one'", "Classes required");
7125759b3d2Safresh1    like($errors[1], qr/^Facet 'assert' should not be a list, but got a a list/, "Got a list for a non-list type");
7135759b3d2Safresh1    like($errors[2], qr/^Facet 'info' should be a list, but got a single item/, "Got a single item when a list is needed");
7145759b3d2Safresh1
7155759b3d2Safresh1    is_deeply(
7165759b3d2Safresh1        [Test2::Event->validate_facet_data($ev1->facet_data)],
7175759b3d2Safresh1        [],
7185759b3d2Safresh1        "No errors"
7195759b3d2Safresh1    );
7205759b3d2Safresh1
7215759b3d2Safresh1    @errors = Test2::Event->validate_facet_data($ev2->facet_data);
7225759b3d2Safresh1    is(@errors, 2, "Got 2 errors");
7235759b3d2Safresh1    like($errors[0], qr/^Facet 'assert' should not be a list, but got a a list/, "Got a list for a non-list type");
7245759b3d2Safresh1    like($errors[1], qr/^Facet 'info' should be a list, but got a single item/, "Got a single item when a list is needed");
7255759b3d2Safresh1
7265759b3d2Safresh1    @errors = Test2::Event->validate_facet_data($ev2->facet_data, require_facet_class => 1);
7275759b3d2Safresh1    is(@errors, 3, "Got 3 errors");
7285759b3d2Safresh1    is($errors[0], "Could not find a facet class for facet 'a custom one'", "Classes required");
7295759b3d2Safresh1    like($errors[1], qr/^Facet 'assert' should not be a list, but got a a list/, "Got a list for a non-list type");
7305759b3d2Safresh1    like($errors[2], qr/^Facet 'info' should be a list, but got a single item/, "Got a single item when a list is needed");
7315759b3d2Safresh1};
7325759b3d2Safresh1
7335759b3d2Safresh1done_testing;
734