15759b3d2Safresh1use strict; 25759b3d2Safresh1use warnings; 35759b3d2Safresh1use Test2::Tools::Tiny; 45759b3d2Safresh1 55759b3d2Safresh1use Test2::API qw/context intercept/; 65759b3d2Safresh1 75759b3d2Safresh1use Test2::Event::V2(); 85759b3d2Safresh1 95759b3d2Safresh1my $CLASS = 'Test2::Event::V2'; 105759b3d2Safresh1 115759b3d2Safresh1ok($CLASS->isa('Test2::Event'), "Subclass of Test2::Event"); 125759b3d2Safresh1 135759b3d2Safresh1is_deeply( 145759b3d2Safresh1 [Test2::Event::V2->non_facet_keys], 155759b3d2Safresh1 ['uuid', '_meta'], 165759b3d2Safresh1 "Got non-facet keys" 175759b3d2Safresh1); 185759b3d2Safresh1 195759b3d2Safresh1ok($CLASS->can($_), "has method $_") for qw{ 205759b3d2Safresh1 causes_fail diagnostics global increments_count no_display sets_plan 215759b3d2Safresh1 subtest_id summary terminate 225759b3d2Safresh1 uuid set_uuid 235759b3d2Safresh1 meta 245759b3d2Safresh1 facet_data 255759b3d2Safresh1 about 265759b3d2Safresh1}; 275759b3d2Safresh1 285759b3d2Safresh1ok(!exception { $CLASS->new(uuid => 2, about => {uuid => 2}) }, "Can have matching uuids"); 295759b3d2Safresh1 305759b3d2Safresh1like( 315759b3d2Safresh1 exception { $CLASS->new(uuid => 1, about => {uuid => 2}) }, 325759b3d2Safresh1 qr/uuid '1' passed to constructor, but uuid '2' is already set in the 'about' facet/, 335759b3d2Safresh1 "Cannot have a uuid mismatch" 345759b3d2Safresh1); 355759b3d2Safresh1 365759b3d2Safresh1my $one = $CLASS->new(uuid => 123); 375759b3d2Safresh1is($one->about->{uuid}, 123, "Set uuid in about facet"); 385759b3d2Safresh1 395759b3d2Safresh1$one = $CLASS->new(about => { uuid => 123 }); 405759b3d2Safresh1is($one->uuid, 123, "set uuid attribute"); 415759b3d2Safresh1 42*5486feefSafresh1my $trace = {frame => ['main', 'file.t', 42, 'foo'], tid => 0, pid => $$, stamp => 123}; 435759b3d2Safresh1$one = $CLASS->new(trace => $trace); 445759b3d2Safresh1ok($trace != $one->trace, "Did not keep or modify the original trace ref"); 455759b3d2Safresh1ok($one->trace->isa('Test2::EventFacet::Trace'), "Blessed the trace"); 465759b3d2Safresh1is_deeply($one->trace, $trace, "Trace has all data"); 475759b3d2Safresh1 485759b3d2Safresh1$one = $CLASS->new; 495759b3d2Safresh1ok(!$one->uuid, "no uuid attribute"); 50256a93a4Safresh1ok(!($one->about && $one->about->{uuid}), "no uuid in about facet"); 515759b3d2Safresh1$one->set_uuid(123); 525759b3d2Safresh1is($one->about->{uuid}, 123, "Set uuid in about facet"); 535759b3d2Safresh1is($one->uuid, 123, "set uuid attribute"); 545759b3d2Safresh1 555759b3d2Safresh1 565759b3d2Safresh1$one = $CLASS->new( 575759b3d2Safresh1 uuid => '123', 585759b3d2Safresh1 trace => $trace, 595759b3d2Safresh1 assert => {pass => 1, details => 'pass'}, 605759b3d2Safresh1 info => [{tag => 'NOTE', details => 'a note'}], 615759b3d2Safresh1); 625759b3d2Safresh1 635759b3d2Safresh1$one->set_meta('foo' => {'xyz' => 1}); 645759b3d2Safresh1 655759b3d2Safresh1$one->{_custom_sttr} = 'xxx'; 665759b3d2Safresh1 675759b3d2Safresh1is_deeply( 685759b3d2Safresh1 $one->facet_data, 695759b3d2Safresh1 { 705759b3d2Safresh1 trace => $trace, 715759b3d2Safresh1 assert => {pass => 1, details => 'pass'}, 725759b3d2Safresh1 info => [{tag => 'NOTE', details => 'a note'}], 735759b3d2Safresh1 meta => {foo => {'xyz' => 1}}, 745759b3d2Safresh1 about => {uuid => 123}, 755759b3d2Safresh1 }, 765759b3d2Safresh1 "Facet data has everything we want, and nothing we do not" 775759b3d2Safresh1); 785759b3d2Safresh1 795759b3d2Safresh1sub my_tool { 805759b3d2Safresh1 my $ctx = context(); 815759b3d2Safresh1 825759b3d2Safresh1 my $event = $ctx->send_ev2(info => [{tag => 'NOTE', details => "This is a note"}]); 835759b3d2Safresh1 845759b3d2Safresh1 $ctx->release; 855759b3d2Safresh1 865759b3d2Safresh1 return $event; 875759b3d2Safresh1} 885759b3d2Safresh1 895759b3d2Safresh1my $events = intercept { 905759b3d2Safresh1 my_tool(); 915759b3d2Safresh1}; 925759b3d2Safresh1 935759b3d2Safresh1is(@$events, 1, "Got 1 event"); 945759b3d2Safresh1ok($events->[0]->isa($CLASS), "Created the right type of event"); 955759b3d2Safresh1is_deeply( 965759b3d2Safresh1 $events->[0]->facet_data->{info}, 975759b3d2Safresh1 [{tag => 'NOTE', details => "This is a note"}], 985759b3d2Safresh1 "Got the specified info facet" 995759b3d2Safresh1); 1005759b3d2Safresh1 1015759b3d2Safresh1done_testing; 102