1*5759b3d2Safresh1use Test2::Tools::Tiny;
2*5759b3d2Safresh1use Test2::API qw/test2_add_uuid_via context intercept/;
3*5759b3d2Safresh1
4*5759b3d2Safresh1my %CNT;
5*5759b3d2Safresh1test2_add_uuid_via(sub {
6*5759b3d2Safresh1    my $type = shift;
7*5759b3d2Safresh1    $CNT{$type} ||= 1;
8*5759b3d2Safresh1    $type . '-' . $CNT{$type}++;
9*5759b3d2Safresh1});
10*5759b3d2Safresh1
11*5759b3d2Safresh1my $events = intercept {
12*5759b3d2Safresh1    ok(1, "pass");
13*5759b3d2Safresh1
14*5759b3d2Safresh1    sub {
15*5759b3d2Safresh1        my $ctx = context();
16*5759b3d2Safresh1        ok(1, "pass");
17*5759b3d2Safresh1        ok(0, "fail");
18*5759b3d2Safresh1        $ctx->release;
19*5759b3d2Safresh1    }->();
20*5759b3d2Safresh1
21*5759b3d2Safresh1    tests foo => sub {
22*5759b3d2Safresh1        ok(1, "pass");
23*5759b3d2Safresh1    };
24*5759b3d2Safresh1
25*5759b3d2Safresh1    warnings {
26*5759b3d2Safresh1        require Test::More;
27*5759b3d2Safresh1        *subtest = \&Test::More::subtest;
28*5759b3d2Safresh1    };
29*5759b3d2Safresh1
30*5759b3d2Safresh1    subtest(foo => sub {
31*5759b3d2Safresh1        ok(1, "pass");
32*5759b3d2Safresh1    });
33*5759b3d2Safresh1};
34*5759b3d2Safresh1
35*5759b3d2Safresh1my $hub = Test2::API::test2_stack->top;
36*5759b3d2Safresh1is($hub->uuid, 'hub-1', "First hub got a uuid");
37*5759b3d2Safresh1
38*5759b3d2Safresh1is($events->[0]->uuid, 'event-1', "First event gets first uuid");
39*5759b3d2Safresh1is($events->[0]->trace->uuid, 'context-2', "First event has correct context");
40*5759b3d2Safresh1is($events->[0]->trace->huuid, 'hub-2', "First event has correct hub");
41*5759b3d2Safresh1
42*5759b3d2Safresh1is($events->[0]->facet_data->{about}->{uuid}, "event-1", "The UUID makes it to facet data");
43*5759b3d2Safresh1
44*5759b3d2Safresh1is($events->[1]->uuid, 'event-2', "Second event gets correct uuid");
45*5759b3d2Safresh1is($events->[1]->trace->uuid, 'context-3', "Second event has correct context");
46*5759b3d2Safresh1is($events->[1]->trace->huuid, 'hub-2', "Second event has correct hub");
47*5759b3d2Safresh1
48*5759b3d2Safresh1is($events->[2]->uuid, 'event-3', "Third event gets correct uuid");
49*5759b3d2Safresh1is($events->[2]->trace->uuid, $events->[1]->trace->uuid, "Third event shares context with event 2");
50*5759b3d2Safresh1is($events->[2]->trace->huuid, 'hub-2', "Third event has correct hub");
51*5759b3d2Safresh1
52*5759b3d2Safresh1is($events->[3]->uuid, 'event-6', "subtest event gets correct uuid (not next)");
53*5759b3d2Safresh1is($events->[3]->subtest_uuid, 'hub-3', "subtest event gets correct subtest-uuid (next hub uuid)");
54*5759b3d2Safresh1is($events->[3]->trace->uuid, 'context-4', "subtest gets next sequential context");
55*5759b3d2Safresh1is($events->[3]->trace->huuid, 'hub-2', "subtest event has correct hub");
56*5759b3d2Safresh1
57*5759b3d2Safresh1is($events->[3]->subevents->[0]->uuid, 'event-4', "First subevent gets next event uuid");
58*5759b3d2Safresh1is($events->[3]->subevents->[0]->trace->uuid, 'context-5', "First subevent has correct context");
59*5759b3d2Safresh1is($events->[3]->subevents->[0]->trace->huuid, 'hub-3', "First subevent has correct hub uuid (subtest hub uuid)");
60*5759b3d2Safresh1
61*5759b3d2Safresh1is($events->[3]->subevents->[1]->uuid, 'event-5', "Second subevent gets next event uuid");
62*5759b3d2Safresh1is($events->[3]->subevents->[1]->trace->uuid, $events->[3]->trace->uuid, "Second subevent has same context as subtest itself");
63*5759b3d2Safresh1is($events->[3]->subevents->[1]->trace->huuid, 'hub-3', "Second subevent has correct hub uuid (subtest hub uuid)");
64*5759b3d2Safresh1
65*5759b3d2Safresh1is($events->[5]->uuid, 'event-10', "subtest event gets correct uuid (not next)");
66*5759b3d2Safresh1is($events->[5]->subtest_uuid, 'hub-4', "subtest event gets correct subtest-uuid (next hub uuid)");
67*5759b3d2Safresh1is($events->[5]->trace->uuid, 'context-8', "subtest gets next sequential context");
68*5759b3d2Safresh1is($events->[5]->trace->huuid, 'hub-2', "subtest event has correct hub");
69*5759b3d2Safresh1
70*5759b3d2Safresh1is($events->[5]->subevents->[0]->uuid, 'event-8', "First subevent gets next event uuid");
71*5759b3d2Safresh1is($events->[5]->subevents->[0]->trace->uuid, 'context-10', "First subevent has correct context");
72*5759b3d2Safresh1is($events->[5]->subevents->[0]->trace->huuid, 'hub-4', "First subevent has correct hub uuid (subtest hub uuid)");
73*5759b3d2Safresh1
74*5759b3d2Safresh1is($events->[5]->subevents->[1]->uuid, 'event-9', "Second subevent gets next event uuid");
75*5759b3d2Safresh1is($events->[5]->subevents->[1]->trace->uuid, $events->[5]->trace->uuid, "Second subevent has same context as subtest itself");
76*5759b3d2Safresh1is($events->[5]->subevents->[1]->trace->huuid, 'hub-2', "Second subevent has correct hub uuid (subtest hub uuid)");
77*5759b3d2Safresh1
78*5759b3d2Safresh1done_testing;
79