1use strict; 2use warnings; 3 4use Test2::Tools::Tiny; 5 6use Test2::API qw/run_subtest intercept test2_stack/; 7 8{ 9 package Formatter::Hide; 10 sub write { } 11 sub hide_buffered { 1 } 12 sub terminate { } 13 sub finalize { } 14 15 package Formatter::Show; 16 sub write { } 17 sub hide_buffered { 0 } 18 sub terminate { } 19 sub finalize { } 20 21 package Formatter::NA; 22 sub write { } 23 sub terminate { } 24 sub finalize { } 25} 26 27my %HAS_FORMATTER; 28 29my $events = intercept { 30 my $code = sub { 31 my $hub = test2_stack->top; 32 $HAS_FORMATTER{unbuffered_none} = $hub->format ? 1 : 0; 33 }; 34 run_subtest('unbuffered', $code); 35 36 $code = sub { 37 my $hub = test2_stack->top; 38 $HAS_FORMATTER{buffered_none} = $hub->format ? 1 : 0; 39 }; 40 run_subtest('buffered', $code, 'BUFFERED'); 41 42 43 ##################### 44 test2_stack->top->format(bless {}, 'Formatter::Hide'); 45 $code = sub { 46 my $hub = test2_stack->top; 47 $HAS_FORMATTER{unbuffered_hide} = $hub->format ? 1 : 0; 48 }; 49 run_subtest('unbuffered', $code); 50 51 $code = sub { 52 my $hub = test2_stack->top; 53 $HAS_FORMATTER{buffered_hide} = $hub->format ? 1 : 0; 54 }; 55 run_subtest('buffered', $code, 'BUFFERED'); 56 57 58 ##################### 59 test2_stack->top->format(bless {}, 'Formatter::Show'); 60 $code = sub { 61 my $hub = test2_stack->top; 62 $HAS_FORMATTER{unbuffered_show} = $hub->format ? 1 : 0; 63 }; 64 run_subtest('unbuffered', $code); 65 66 $code = sub { 67 my $hub = test2_stack->top; 68 $HAS_FORMATTER{buffered_show} = $hub->format ? 1 : 0; 69 }; 70 run_subtest('buffered', $code, 'BUFFERED'); 71 72 73 ##################### 74 $code = sub { 75 my $hub = test2_stack->top; 76 $HAS_FORMATTER{unbuffered_na} = $hub->format ? 1 : 0; 77 }; 78 run_subtest('unbuffered', $code); 79 80 test2_stack->top->format(bless {}, 'Formatter::NA'); 81 $code = sub { 82 my $hub = test2_stack->top; 83 $HAS_FORMATTER{buffered_na} = $hub->format ? 1 : 0; 84 }; 85 run_subtest('buffered', $code, 'BUFFERED'); 86}; 87 88ok(!$HAS_FORMATTER{unbuffered_none}, "Unbuffered with no parent formatter has no formatter"); 89ok( $HAS_FORMATTER{unbuffered_show}, "Unbuffered where parent has 'show' formatter has formatter"); 90ok( $HAS_FORMATTER{unbuffered_hide}, "Unbuffered where parent has 'hide' formatter has formatter"); 91 92ok(!$HAS_FORMATTER{buffered_none}, "Buffered with no parent formatter has no formatter"); 93ok( $HAS_FORMATTER{buffered_show}, "Buffered where parent has 'show' formatter has formatter"); 94ok(!$HAS_FORMATTER{buffered_hide}, "Buffered where parent has 'hide' formatter has no formatter"); 95 96done_testing; 97