blob: 6ac4d17326901999dce5efb5382b904dd57ca6b4 (
plain) (
blame)
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
|
# Test POSIX-specific behavior
# Currently this covers only POSIXBUILTINS, other behaviors are in their
# more directly related sections
#
%prep
setopt POSIX_BUILTINS TYPESET_TO_UNSET
%test
local parentenv=preserved
fn() {
typeset -h +g -m \*
unset -m \*
integer i=9
float -H f=9
declare -t scalar
declare -H -a array
typeset
typeset +
}
fn
echo $parentenv
0:Parameter hiding and tagging, printing types and values
>array local array
>float local f
>integer local i=9
>local tagged scalar
>array local array
>float local f
>integer local i
>local tagged scalar
>preserved
readonly foo=bar novalue
readonly -p
0:readonly -p output (no readonly specials)
>readonly foo=bar
>readonly novalue
local -a myarray
typeset -p1 myarray
myarray=("&" sand '""' "" plugh)
typeset -p1 myarray
0:typeset -p1 output for array
>typeset -a myarray
>typeset -a myarray=(
> '&'
> sand
> '""'
> ''
> plugh
>)
local -A myhash
typeset -p1 myhash
myhash=([one]=two [three]= [four]="[]")
typeset -p1 myhash
0:typeset -p1 output for associative array
>typeset -A myhash
>typeset -A myhash=(
> [four]='[]'
> [one]=two
> [three]=''
>)
str=s
arr=(a)
typeset -A ass
ass=(a a)
integer i=0
float f=0
print ${(t)str} ${(t)arr} ${(t)ass} ${(t)i} ${(t)f}
0:${(t)...}
>scalar array association-local integer-local float-local
print $empty[(i)] $empty[(I)]
0:(i) and (I) return nothing for empty array
>
(
# reserved words are handled during parsing,
# hence eval...
disable -r typeset
eval '
setopt kshtypeset
ktvars=(ktv1 ktv2)
typeset ktfoo=`echo arg1 arg2` $ktvars
() {
local ktfoo
print $+ktv1 $+ktv2 $+ktv3 $+ktfoo
}
print $ktfoo
unsetopt kshtypeset
typeset noktfoo=`echo noktarg1 noktarg2`
print $noktfoo
print $+noktarg1 $+noktarg2
unset ktfoo ktv1 ktv2 noktfoo noktarg2
'
)
0:KSH_TYPESET option
>0 0 0 0
>arg1 arg2
>noktarg1
>0 0
() {
local var
print ${(t)var}
}
0:(t) returns correct type
>scalar-local
() {
readonly var
typeset -p var
}
0:readonly with typeset -p
>typeset -g -r var
# Tests expected to fail
echo -
0f:A single "-" for echo does not end the arguments
F:POSIX requires a solitary "-" to be a plain argument
>-
ARGV0=sh $ZTST_testdir/../Src/zsh -c 'foreach() { true; }'
-f:"foreach" is not a reserved word
ARGV0=sh $ZTST_testdir/../Src/zsh -c 'end() { true; }
-f:"end" is not a reserved word
a='a:b:' ARGV0=sh $ZTST_testdir/../Src/zsh -c 'IFS=:; printf "<%s>\n" $a'
0f:IFS is a separator, not a delimiter
><a>
><b>
a=$'\ra\r\rb' ARGV0=sh $ZTST_testdir/../Src/zsh -c 'IFS=:; printf "<%s>\n" $a'
0f:All whitespace characters are "IFS whitespace"
F:isspace('\r') is true so \r should behave like space, \t, \n
F:This may also need to apply to multibyte whitespace
><a>
><b>
ARGV0=sh $ZTST_testdir/../Src/zsh -c 'IFS=2; printf "<%s>\n" $((11*11))'
0f:IFS applies to math results (numbers treated as strings)
><1>
><1>
ARGV0=sh $ZTST_testdir/../Src/zsh -c 'inf=42; echo $((inf))'
0:All identifiers are variable references in POSIX arithmetic
F:POSIX has neither math functions nor floating point
>42
ARGV0=sh $ZTST_testdir/../Src/zsh -c 'EUID=1; EUID=10; echo $EUID'
-f:EUID is not a special variable
>10
PPID=foo
-f:PPID is not a readonly variable
|