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

use strict;
use warnings;
use Sub::Uplevel;
use Carp;
use Test::Builder::Tester tests => 3;
use Test::More;

BEGIN { use_ok( 'Test::Exception' ) };

# This test in essence makes sure that no false
# positives are encountered due to @DB::args being part
# of the stacktrace
# The test seems rather complex due to the fact that
# we make a really tricky stacktrace

test_false_positive($_) for ('/fribble/', qr/fribble/);

sub throw { confess ('something unexpected') }
sub try { throw->(@_) }
sub test_false_positive {
  my $test_against_desc = my $test_against = shift;

  if (my $ref = ref ($test_against) ) {
    $test_against_desc = "$ref ($test_against_desc)"
      if $test_against_desc !~ /^\Q$ref\E/;
  }

  test_out("not ok 1 - threw $test_against_desc");
  test_fail(+1);
  throws_ok { try ('fribble') } $test_against;
  my $exception = $@;

  test_diag("expecting: $test_against_desc");
  test_diag(split /\n/, "found: $exception");
  test_test("$test_against_desc in stacktrace ignored");
}