1use Test2::Bundle::Extended -target => 'Test2::AsyncSubtest::Event::Detach';
2use Test2::AsyncSubtest::Event::Detach;
3
4isa_ok($CLASS, 'Test2::Event');
5
6can_ok($CLASS, 'id');
7
8require Test2::AsyncSubtest::Hub;
9my $hub = Test2::AsyncSubtest::Hub->new();
10my $events = [];
11$hub->listen(sub {
12    my ($h, $e) = @_;
13    push @$events => $e;
14});
15
16my $one = $CLASS->new(id => 123, trace => Test2::Util::Trace->new(frame => [__PACKAGE__, __FILE__, __LINE__]));
17
18$one->callback($hub);
19like(
20    pop(@$events),
21    event(Exception => sub { error => qr/Invalid AsyncSubtest attach ID: 123/ }),
22    "Got exception for invalid id"
23);
24
25$hub->{ast_ids}->{123} = 0;
26$one->callback($hub);
27like(
28    pop(@$events),
29    event(Exception => sub { error => qr/AsyncSubtest ID 123 is not attached/ }),
30    "Got exception for unattached id"
31);
32
33$hub->{ast_ids}->{123} = 1;
34$one->callback($hub);
35ok(!exists($hub->ast_ids->{123}), "deleted slot");
36ok(!@$events, "no events added");
37
38done_testing;
39