1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2026-01-10 11:01:32 +01:00
zsh/Test/K02parameter.ztst
dana 8720885648 53662: tests: add extra namespace tests
relates to workers/53660
2025-05-24 09:07:55 -05:00

170 lines
3.5 KiB
Text

# Test parameter expansion with namespace syntax
# (heavily borrowed from D04parameter.ztst)
%prep
%test
.k02.foo='the first parameter'
.k02.bar='the second parameter'
print -l $.k02.foo ${.k02.bar}
0:Basic scalars with namespace
F:Braces are required
>$.k02.foo
>the second parameter
typeset .k02.bar='the second parameter'
print -l ${.k02.bar}
0:Scalar but with typeset
>the second parameter
.k02.array1=(the first array)
.k02.array2=(the second array)
print -l $.k02.array1 ${.k02.array2}
0:Basic arrays with namespace
>$.k02.array1
>the
>second
>array
typeset -a .k02.array2=(the second array)
print -l ${.k02.array2}
0:Array but with typeset
>the
>second
>array
setopt ksharrays
print -l ${.k02.array2}
unsetopt ksharrays
0:Basic ksharray with namespace
>the
setopt shwordsplit
print -l ${.k02.foo} ${==.k02.bar}
unsetopt shwordsplit
0:Basic shwordsplit with namespace
>the
>first
>parameter
>the second parameter
print ${+.k02.foo} ${+.k02.notappearinginthistest}
0:$+... and namespace
>1 0
.k02.x=()
print ${+.k02.x} ${+.k02.x[1]} ${+.k02.x[(r)foo]} ${+.k02.x[(r)bar]}
.k02.x=(foo)
print ${+.k02.x} ${+.k02.x[1]} ${+.k02.x[(r)foo]} ${+.k02.x[(r)bar]}
0:$+... with arrays and namespace
>1 0 0 0
>1 1 1 0
# See D04 for complete explanation.
# For K02 we're just testing that flag syntax works.
.k02.foo='<five> {six} (seven) >eight< }nine{ |forty-two| $many$ )ten( more'
.k02.array=(${(z).k02.foo})
print -l ${(Q).k02.array}
0:${(z)...} and ${(Q)...} for some hard to parse cases
><
>five
>>
>{six}
>(
>seven
>)
>>
>eight
><
>}nine{
>|
>forty-two
>|
>$many$
>)
>ten( more
.k02.array=(characters in an array)
print ${(c)#.k02.array}
0:${(c)#...}
>22
() {
typeset -n .k02.ref=.k02.array
emulate -L ksh
print -l ${!.k02.ref} ${(!).k02.ref} ${.k02.ref}
}
0:namerefs with namespaces
>.k02.array
>.k02.array
>characters
k.=empty
k.2=test
print ${k.} ${k.2}
0:Parse without leading dot (future proofing)
>empty test
.k02.a=b
k02.a=c
print ${.k02.a} ${k02.a}
0:With and without leading dot are distinct
>b c
.k=OK
print ${.k}
0:Bare namespace is usable (ksh compatibility)
>OK
..k=OK
127:Bare namespace is not usable with two dots
?(eval):1: command not found: ..k=OK
.k.=empty
1:Namespace must precede an identifier, assignment
?(eval):1: not an identifier: .k.
typeset .k.=empty
1:Namespace must precede an identifier, typeset
?(eval):typeset:1: not valid in this context: .k.
print ${.k.}
1:Namespace must precede an identifier, reference
?(eval):1: bad substitution
.2.b=not
1:Namespace identifier must not begin with a digit, assignment
?(eval):1: not an identifier: .2.b
typeset .2.b=not
1:Namespace identifier must not begin with a digit, typeset
?(eval):typeset:1: not valid in this context: .2.b
print ${.2.b}
1:Namespace identifier must not begin with a digit, reference
?(eval):1: bad substitution
.not.2b=question
1:Identifier starting with a digit must be all digits, assignment
?(eval):1: not an identifier: .not.2b
typeset .not.2b=question
1:Identifier starting with a digit must be all digits, typeset
?(eval):typeset:1: not valid in this context: .not.2b
print ${.not.2b}
1:Identifier starting with a digit must be all digits, reference
?(eval):1: bad substitution
.n.s.k=OK
print ${.n.s.k}
127:Nested namespace is not usable
?(eval):1: command not found: .n.s.k=OK
?(eval):2: bad substitution
integer .var.d=0
float .var.f=.2
print $((.var.x = ++.var.d - -.var.f))
0:Namespaces in math context
>1.2