The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl
# -*- mode: cperl ; compile-command: "cd .. ; ./Build ; prove -vb t/99-*.t" -*-
use strict;
use warnings;

# Tests for the purpose of shutting up Devel::Cover about some stuff
# that really is tested.  Like, trust me already?

use Test::Trap;

# Set up a plan:
use Test::Builder; BEGIN { my $t = Test::Builder->new; $t->plan( tests => 7 ) }

BEGIN {
  scalar trap { exists &Test::More::ok };
  $trap->return_nok( 0, '&Test::More::ok not created before the use' );
  $trap->quiet;
}

use Test::More;

BEGIN {
  scalar trap { exists &Test::More::ok };
  $trap->return_ok( 0, '&Test::More::ok created now' );
  $trap->quiet;
}

trap {
  Test::Trap::Builder->new->layer_implementation('Test::Trap', []);
};
$trap->die_like( qr/^Unknown trap layer \"ARRAY/, 'Cannot specify layers as arrayrefs' );

my $early_exit = 1;
END {
  ok( $early_exit, 'Failing to raise an exception: Early exit' );
  is( $?, 8, 'Exiting with exit code 8' );
  # let Test::More handle exit codes different from 8:
  $? = 0 if $? == 8;
}
$trap->Exception("Failing");
undef $early_exit;