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