summaryrefslogtreecommitdiffstats
path: root/tests/nameref.tests
blob: 3a6c5d98e11762db9e7a170b5c3afdab7dffffbb (plain)
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
130
131
132
133
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
# basic nameref tests
bar=one
flow=two
flip=three

foo=bar
typeset -n foo

typeset -n fee=flow

echo ${foo}
echo ${fee}

typeset -n fee=flip
echo ${fee}

typeset -n

echo turning off nameref attribute on foo
typeset +n foo=other
echo ${foo}
echo after +n foo bar = $bar

unset foo bar fee

bar=one

foo=bar
typeset -n foo

foo=two printf "%s\n" $foo
foo=two eval 'printf "%s\n" $foo'

foo=two echo $foo

unset foo bar
# other basic assignment tests
bar=one

echo "expect <one>"
recho ${bar}
typeset -n foo=bar
foo=two

echo "expect <two>"
recho ${bar}

# this appears to be a ksh93 bug; it doesn't unset foo here and messes up
# later
unset foo bar

# initial tests of working inside shell functions
echoval()
{
	typeset -n ref=$1
	printf "%s\n" $ref
}

foo=bar
bar=one
echo "expect <$foo>"
echoval foo
echo "expect <$bar>"
echoval bar

unset foo bar
changevar()
{
	typeset -n v=$1

	shift
	v="$@"
	echo "changevar: expect <$@>"
	recho "$v"
}

bar=one

echo "expect <one>"
recho ${bar}
changevar bar two
echo "expect <two>"
recho $bar

changevar bar three four five
echo "expect <three four five>"
recho "$bar"

unset foo bar
unset -n foo bar
readonly foo=one
typeset -n bar=foo
bar=4
foo=4

echo $foo
echo $bar

assignvar()
{
	typeset -n ref=$1
	shift
	ref="$@"
}

readonly foo=one

assignvar foo two three four
echo $foo

var=abcde
x=var
declare -n v=var
# these two should display the same
echo ${!x//c/x}
echo ${v//c/x}

for testfile in ./nameref[0-9].sub ./nameref[1-9][0-9].sub ; do
	${THIS_SH} "$testfile"
done