File: 03local.t

package info (click to toggle)
libdevel-mat-perl 0.53-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 908 kB
  • sloc: perl: 6,224; makefile: 3
file content (97 lines) | stat: -rw-r--r-- 2,527 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#!/usr/bin/perl

use v5.14;
use warnings;

use Test2::V0;

use Devel::MAT::Dumper;
$Devel::MAT::Dumper::VERSION >= 0.38 or
   plan skip_all => "Devel::MAT::Dumper too old to capture 'local' saves";
$] >= 5.018 or
   plan skip_all => "Devel::MAT::Dumper can't capture 'local' saves from this version of perl";

use Devel::MAT;

our $SVAR = "old value";
local $SVAR = "new value";  # SV

our @AVAR = ( 1, 2, 3 );
local @AVAR = ( 4, 5 );  # AV

our %HVAR = ( old => "value" );
local %HVAR = ( new => "value" );  # HV

sub GVAR { 1 }  my $codeline = __LINE__;
no warnings 'redefine';
local *GVAR = sub { 2 };

my @ARRAY = (qw( a b c ));
local $ARRAY[1] = "d";  # AELEM

my %HASH = ( key => "oldval" );
local $HASH{key} = "newval";  # HELEM

my $DUMPFILE = __FILE__ =~ s/\.t/\.pmat/r;

Devel::MAT::Dumper::dump( $DUMPFILE );
END { unlink $DUMPFILE if defined $DUMPFILE; }

my $pmat = Devel::MAT->load( $DUMPFILE );
my $df = $pmat->dumpfile;

# SVAR
{
   my $gv = $pmat->find_glob( "SVAR" );
   my ( $savedref ) = grep { $_->name =~ m/^saved / } $gv->outrefs;

   is( $savedref->name, "saved value of SCALAR slot", '$savedref->name' );
   is( $savedref->sv->pv, "old value", '$savedref->sv->pv' );
}

# AVAR
{
   my $gv = $pmat->find_glob( "AVAR" );
   my ( $savedref ) = grep { $_->name =~ m/^saved / } $gv->outrefs;

   is( $savedref->name, "saved value of ARRAY slot", '$savedref->name' );
   is( $savedref->sv->elems, 3, '$savedref->sv->elems' );
}

# HVAR
{
   my $gv = $pmat->find_glob( "HVAR" );
   my ( $savedref ) = grep { $_->name =~ m/^saved / } $gv->outrefs;

   is( $savedref->name, "saved value of HASH slot", '$savedref->name' );
   ok( $savedref->sv->value( "old" ), '$savedref->sv has "old" key' );
}

# GVAR
{
   my $gv = $pmat->find_glob( "GVAR" );
   my ( $savedref ) = grep { $_->name =~ m/^saved / } $gv->outrefs;

   is( $savedref->name, "saved value of CODE slot", '$savedref->name' );
   is( $savedref->sv->line, $codeline, '$savedref->sv->line' );
}

# AELEM
{
   my $av = $pmat->dumpfile->main_cv->lexvar( '@ARRAY' );
   my ( $savedref ) = grep { $_->name =~ m/^saved / } $av->outrefs;

   is( $savedref->name, "saved value of element [1]", '$savedref->name' );
   is( $savedref->sv->pv, "b", '$savedref->sv->pv' );
}

# HELEM
{
   my $hv = $pmat->dumpfile->main_cv->lexvar( '%HASH' );
   my ( $savedref ) = grep { $_->name =~ m/^saved / } $hv->outrefs;

   is( $savedref->name, "saved value of value {key}", '$savedref->name' );
   is( $savedref->sv->pv, "oldval", '$savedref->sv->pv' );
}

done_testing;