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 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";
 }
}