The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;

use Test::More;

our $status;
BEGIN {
 *CORE::GLOBAL::exit = *CORE::GLOBAL::exit = sub {
  my $caller = caller;
  if ($caller eq 'Test::Leaner') {
   $status = $_[0] || 0;
  } else {
   CORE::exit $_[0];
  }
 };

 delete $ENV{PERL_TEST_LEANER_USES_TEST_MORE};
}

use Test::Leaner ();

use lib 't/lib';
use Test::Leaner::TestHelper;

my $buf = '';
capture_to_buffer $buf
                  or plan skip_all => 'perl 5.8 required to test BAIL_OUT()';


plan tests => 6;

reset_buffer {
 local ($@, $status);
 eval { Test::Leaner::BAIL_OUT() };
 is $@,      '',            'BAIL_OUT() does not croak';
 is $buf,    "Bail out!\n", 'BAIL_OUT() produces the correct TAP code';
 is $status, 255,           'BAIL_OUT() exits with the correct status';
};

reset_buffer {
 local ($@, $status);
 eval { Test::Leaner::BAIL_OUT('this is a comment') };
 is $@,      '',  'BAIL_OUT("comment") does not croak';
 is $buf,    "Bail out!  this is a comment\n",
                  'BAIL_OUT("comment") produces the correct TAP code';
 is $status, 255, 'BAIL_OUT("comment") exits with the correct status';
};