#!perl -T
use strict;
use warnings;
use Test::More tests => 4 + 10;
use Scope::Context;
my $fail_rx = qr/^Context has expired at \Q$0\E line [0-9]+/;
{
my $sc;
{
$sc = Scope::Context->new;
ok $sc->is_valid, 'freshly created context is valid';
ok $sc->up->is_valid, 'up context is valid as well';
{
ok $sc->is_valid, 'also valid in a subblock';
}
}
ok !$sc->is_valid, 'context has expired';
my @methods = qw<
up sub eval
reap localize localize_elem localize_delete
unwind yield
uplevel
>;
for my $action (@methods) {
local $@;
eval {
$sc->$action;
};
my $line = __LINE__-2;
like $@, qr/^Context has expired at \Q$0\E line \Q$line\E/,
"$action\->up croaks";
}
}