The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;

BEGIN {
    # t/exceptions/without-debugging.t and t/exceptions/with-debugging.t are
    # identical except for this one line.
    $^P |= 0x200;
}

use Test::More tests => 2;
use Test::Moose;
use Moose::Exception;

# with_immutable only toggles on, not off
Moose::Exception->meta->make_mutable;

my ($line1, $line2);
sub foo
{
    $line1 = __LINE__; return Moose::Exception->new(
        message => 'something bad happened',
    );
}

with_immutable {
    my $immutable = shift;

    note "testing with immutable = $immutable, \$\^P is $^P";

    like(
        do { $line2 = __LINE__; foo() },
        qr{^something bad happened at .* line $line1\n\tmain::foo at .* line $line2},
        "exception is well-formed (immutable = $immutable)",
    );
}
'Moose::Exception';