1*5486feefSafresh1use Test2::Bundle::Extended -target => 'Test2::Todo';
2*5486feefSafresh1
3*5486feefSafresh1my $todo = Test2::Todo->new(reason => 'xyz');
4*5486feefSafresh1def isa_ok => ($todo, $CLASS);
5*5486feefSafresh1def ok => ((grep {$_->{code} == $todo->_filter} @{Test2::API::test2_stack->top->_pre_filters}), "filter added");
6*5486feefSafresh1def is => ($todo->reason, 'xyz', "got reason");
7*5486feefSafresh1def ref_is => ($todo->hub, Test2::API::test2_stack->top, "used current hub");
8*5486feefSafresh1def ok => (my $filter = $todo->_filter, "stored filter");
9*5486feefSafresh1$todo->end;
10*5486feefSafresh1
11*5486feefSafresh1do_def;
12*5486feefSafresh1ok(!(grep {$_->{code} == $filter} @{Test2::API::test2_stack->top->_pre_filters}), "filter removed");
13*5486feefSafresh1
14*5486feefSafresh1my $ok   = Test2::Event::Ok->new(pass => 0, name => 'xxx');
15*5486feefSafresh1my $diag = Test2::Event::Diag->new(message => 'xxx');
16*5486feefSafresh1
17*5486feefSafresh1ok(!$ok->todo, "ok is not TODO");
18*5486feefSafresh1ok(!$ok->effective_pass, "not effectively passing");
19*5486feefSafresh1my $filtered_ok = $filter->(Test2::API::test2_stack->top, $ok);
20*5486feefSafresh1is($filtered_ok->todo, 'xyz', "the ok is now todo");
21*5486feefSafresh1ok($filtered_ok->effective_pass, "now effectively passing");
22*5486feefSafresh1
23*5486feefSafresh1isa_ok($diag, 'Test2::Event::Diag');
24*5486feefSafresh1my $filtered_diag = $filter->(Test2::API::test2_stack->top, $diag);
25*5486feefSafresh1isa_ok($filtered_diag, 'Test2::Event::Note');
26*5486feefSafresh1is($filtered_diag->message, $diag->message, "new note has the same message");
27*5486feefSafresh1
28*5486feefSafresh1my $events = intercept {
29*5486feefSafresh1    ok(0, 'fail');
30*5486feefSafresh1
31*5486feefSafresh1    my $todo = Test2::Todo->new(reason => 'xyz');
32*5486feefSafresh1    ok(0, 'todo fail');
33*5486feefSafresh1    $todo = undef;
34*5486feefSafresh1
35*5486feefSafresh1    ok(0, 'fail');
36*5486feefSafresh1};
37*5486feefSafresh1
38*5486feefSafresh1like(
39*5486feefSafresh1    $events,
40*5486feefSafresh1    array {
41*5486feefSafresh1        event Ok => { pass => 0, effective_pass => 0, todo => DNE };
42*5486feefSafresh1        event Diag => {};
43*5486feefSafresh1
44*5486feefSafresh1        event Ok => { pass => 0, effective_pass => 1, todo => 'xyz' };
45*5486feefSafresh1        event Note => {};
46*5486feefSafresh1
47*5486feefSafresh1        event Ok => { pass => 0, effective_pass => 0, todo => DNE };
48*5486feefSafresh1        event Diag => {};
49*5486feefSafresh1    },
50*5486feefSafresh1    "Got expected events"
51*5486feefSafresh1);
52*5486feefSafresh1
53*5486feefSafresh1$todo = $CLASS->new(reason => 'this is a todo');
54*5486feefSafresh1$todo->end;
55*5486feefSafresh1
56*5486feefSafresh1is("$todo", 'this is a todo', "Stringify's to the reason");
57*5486feefSafresh1ok($todo eq 'this is a todo', "String comparison works");
58*5486feefSafresh1
59*5486feefSafresh1done_testing;
60