1#! /bin/sh
2#
3# @(#)local.sh	1.2 17/05/28 2016 J. Schilling
4#
5
6# Read test core functions
7. ../../common/test-common
8
9#
10# Basic tests to check whether local variables work
11#
12
13cat > ./echo1  <<-"XEOF"
14	echo $var
15XEOF
16chmod +x ./echo1
17
18cat > ./echo2 <<-"XEOF"
19	#!/bin/sh
20	echo $var
21XEOF
22chmod +x ./echo2
23
24#
25# Check for Solaris bug #3000663:
26# unexported variables are available to simple shell scripts
27#
28docommand local00 "$SHELL -c 'var=init; echo \$var; ./echo1'" 0 "init\n\n" ""
29
30#
31# Check for the bug that was introduced while fixing Solaris bug #3000663:
32# unexported variables are available to simple shell scripts if made readonly
33#
34docommand local01 "$SHELL -c 'var=init; readonly var; echo \$var; ./echo1'" 0 "init\n\n" ""
35
36#
37# Basic "local var" test: original value must reappear after the function ends
38#
39docommand local10 "$SHELL -c 'var=init; f() { local var; var=neu; echo \$var; } ; f; echo \$var'" 0 "neu\ninit\n" ""
40
41#
42# Unset local var: "unset" must only affect the local value inside the function
43#
44docommand local11 "$SHELL -c 'var=init; f() { local var; var=neu; echo \$var; unset var; echo \$var; } ; f; echo \$var'" 0 "neu\n\ninit\n" ""
45
46#
47# Unexported local variables in function must not be visible in scripts
48#
49docommand local12 "$SHELL -c 'var=init; f() { local var; var=neu; echo \$var; ./echo1; } ; f; echo \$var'" 0 "neu\n\ninit\n" ""
50
51#
52# Exported variable is exported in local variant as well
53#
54docommand local13 "$SHELL -c 'var=init; export var; f() { local var; var=neu; echo \$var; ./echo1; } ; f; echo \$var'" 0 "neu\nneu\ninit\n" ""
55docommand local14 "$SHELL -c 'var=init; export var; f() { local var; var=neu; echo \$var; ./echo2; } ; f; echo \$var'" 0 "neu\nneu\ninit\n" ""
56
57#
58# Only the local variant is exported
59#
60docommand local15 "$SHELL -c 'var=init; f() { local var; export var; var=neu; echo \$var; ./echo1; } ; f; echo \$var; ./echo1'" 0 "neu\nneu\ninit\n\n" ""
61docommand local16 "$SHELL -c 'var=init; f() { local var; export var; var=neu; echo \$var; ./echo2; } ; f; echo \$var; ./echo2'" 0 "neu\nneu\ninit\n\n" ""
62
63#
64# Unset var: local variable in function must be reverted into unset variable
65#
66docommand local17 "$SHELL -c 'unset var; f() { local var; var=neu; echo \$var; } ; f; echo \$var'" 0 "neu\n\n" ""
67
68#exit
69remove	./echo1 ./echo2
70success
71