File: 34-localize_elem-magic.t

package info (click to toggle)
libscope-upper-perl 0.12-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 312 kB
  • ctags: 16
  • sloc: perl: 2,831; makefile: 7
file content (77 lines) | stat: -rw-r--r-- 1,625 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#!perl

use strict;
use warnings;

use Scope::Upper qw/localize_elem UP HERE/;

use Test::More tests => 8;

{
 package Scope::Upper::Test::TiedArray;

 sub TIEARRAY { bless [], $_[0] }
 sub STORE { $_[0]->[$_[1]] = $_[2] }
 sub FETCH { $_[0]->[$_[1]] }
 sub CLEAR { @{$_[0]} = (); }
 sub FETCHSIZE { scalar @{$_[0]} }
 sub EXTEND {}
}

our @a;

{
 local @a;
 tie @a, 'Scope::Upper::Test::TiedArray';
 @a = (5 .. 7);
 {
  localize_elem '@a', 4 => 12 => HERE;
  is_deeply \@a, [ 5 .. 7, undef, 12 ], 'localize_elem @incomplete_tied_array, $nonexistent, 12 => HERE [ok]';
 }
 is_deeply \@a, [ 5 .. 7, undef, undef ], 'localize_elem @incomplete_tied_array, $nonexistent, 12 => HERE [end]';
}

our $x;

{
 local $x;
 local $SIG{__WARN__} = sub { };
 {
  {
   localize_elem '%SIG', '__WARN__' => sub { $x = join '', @_ } => UP;
   is $x, undef, 'localize_elem $SIG{__WARN__} [not yet]';
  }
  warn "1\n";
  is $x, "1\n", 'localize_elem $SIG{__WARN__} [ok]';
 }
 warn "2\n";
 is $x, "1\n", 'localize_elem $SIG{__WARN__} [done]';
}

sub runperl {
 my ($val, $in, $desc) = @_;
 system { $^X } $^X, '-e', "exit(\$ENV{SCOPE_UPPER_TEST} == $val ? 0 : 1)";
SKIP: {
  skip "system() failed: $!" => 1 if $? == -1;
  if ($in) {
   is $?, 0, $desc;
  } else {
   isnt $?, 0, $desc;
  }
 }
}

eval "setpgrp 0, 0";

my $time = time;
{
 local $ENV{SCOPE_UPPER_TEST};
 {
  {
   localize_elem '%ENV', 'SCOPE_UPPER_TEST' => $time => UP;
   runperl $time, 0, 'localize_elem $ENV{SCOPE_UPPER_TEST} [not yet]';
  }
  runperl $time, 1, 'localize_elem $ENV{SCOPE_UPPER_TEST} [ok]';
 }
 runperl $time, 0, 'localize_elem $ENV{SCOPE_UPPER_TEST} [done]';
}