File: 013_safe_variables.t

package info (click to toggle)
libeval-context-perl 0.09.11-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 292 kB
  • ctags: 23
  • sloc: perl: 762; makefile: 2
file content (129 lines) | stat: -rw-r--r-- 2,566 bytes parent folder | download | duplicates (6)
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# test

package Eval::Context ;

use strict ;
use warnings ;

use Data::TreeDumper ;
use Test::More ;
use Data::Dumper ;

#----------------------------------------------------------

package some_object ;

use strict ;
use warnings ;

sub new {bless { VALUE => $_[1] }, $_[0];}
sub GetValue {$_[0]->{VALUE} ;}
sub AddOne{$_[0]->{VALUE} += 1 ;}
sub GetDump {Data::Dumper->Dump([$_[0]]) ;}

#----------------------------------------------------------

package main ;

use strict ;
use warnings ;
use Data::TreeDumper ;

use Test::Exception ;
use Test::Warn;
#~ use Test::NoWarnings qw(had_no_warnings);
use Test::More 'no_plan';
use Test::Block qw($Plan);

use Eval::Context 'constants' ; 

{
local $Plan = {'SAFE and variables from caller side' => 3} ;

my $context = new Eval::Context() ;

my $normal = $context->eval
		(
		INSTALL_VARIABLES => [ ['$normal', 'normal'] ],
		SAFE =>{},
		CODE => '$normal',
		) ;

is($normal, 'normal', 'normal variable available in safe') or diag DumpTree $context ;

#---------------------------------------------

$context->eval
		(
		INSTALL_VARIABLES => [ ['$persistent', 'garbage', $Eval::Context::PERSISTENT ] ],
		SAFE =>{},
		CODE => '$persistent = q{persistent} ;',
		) ;

my $persistent = $context->eval
		(
		INSTALL_VARIABLES => [ ['$persistent', $Eval::Context::USE, $Eval::Context::PERSISTENT ] ],
		SAFE =>{},
		CODE => '$persistent ;',
		) ;

is($persistent, 'persistent', 'persistent variable available in safe') or diag DumpTree $context ;

#---------------------------------------------

my $shared = 'eval_side_value' ;
$context->eval
		(
		INSTALL_VARIABLES => [ ['$shared', \$shared, $Eval::Context::SHARED ] ],
		SAFE =>{},
		CODE => '$$shared = q{shared} ;',
		) ;

is($shared, 'shared', 'shared variable available in safe') or diag DumpTree $context ;

}

{
local $Plan = {'SAFE and eval side persistent variables ' => 1} ;

my $context = new Eval::Context
		(
		EVAL_SIDE_PERSISTENT_VARIABLES =>
			{
			CATEGORY => 'TEST',
			SAVE => 
				{
				NAME => 'SavePersistent',
				VALIDATOR => sub 
					{
					my ($self, $name, $value, $package) = @_ ;
					},
				},
				
			GET => 
				{
				NAME => 'GetPersistent',
				VALIDATOR => sub {}
				},
			},
		) ;

$context->eval
		(
		SAFE =>{},
		CODE => <<'EOC' ,
my $variable = 24 ;
SavePersistent('$variable', $variable) ;
EOC
		) ;

my $output = $context->eval
			(
			SAFE =>{},
			CODE => <<'EOC' ,
my $variable = GetPersistent('$variable') ;
EOC
			) ;
			
is($output, 24, 'eval side persistent variable available in safe') or diag DumpTree $context ;
}