summaryrefslogtreecommitdiff
path: root/Test
diff options
context:
space:
mode:
authordana <dana@dana.is>2024-12-26 09:39:11 -0600
committerdana <dana@dana.is>2024-12-26 10:09:31 -0600
commitd051857e03d474bf7a122148f323bd90d8c16b36 (patch)
treeb5061d709d7e8f7247c80d0eca6c20f40d8bb4f7 /Test
parent6bb792dba89016c250bc9f2581c9c267dd322254 (diff)
downloadzsh-d051857e03d474bf7a122148f323bd90d8c16b36.tar.gz
zsh-d051857e03d474bf7a122148f323bd90d8c16b36.zip
53260: zparseopts: add options -v (argv) and -G (GNU-style parsing)
Diffstat (limited to 'Test')
-rw-r--r--Test/V12zparseopts.ztst181
1 files changed, 176 insertions, 5 deletions
diff --git a/Test/V12zparseopts.ztst b/Test/V12zparseopts.ztst
index 816e1d041..a2743ea0e 100644
--- a/Test/V12zparseopts.ztst
+++ b/Test/V12zparseopts.ztst
@@ -104,6 +104,14 @@
>ret: 0, optv: --aaa bar, opts: --aaa bar, argv: 1 2 3
() {
+ local -a optv argvv=( -a -b -c 1 2 3 )
+ zparseopts -D -a optv -v argvv - a b c
+ print -r - ret: $?, optv: $optv, argvv: $argvv, argv: $argv
+ } -x -y -z 7 8 9
+0:zparseopts -v
+>ret: 0, optv: -a -b -c, argvv: 1 2 3, argv: -x -y -z 7 8 9
+
+ () {
local -a optv aa ab
zparseopts -a optv - a=aa b:=ab c:- z
print -r - ret: $?, optv: $optv, aa: $aa, ab: $ab, argv: $argv
@@ -151,16 +159,35 @@
>ret: 0, optv: -+ -: -= -\, argv: 1 2 3
>ret: 0, optv: --::: foo, argv: 1 2 3
- for specs in '-foo: -foobar' '-foobar -foo:'; do
+ for specs in \
+ '-foo: -foobar' '-foobar -foo:' '-foo: -foobar:' '-foobar: -foo:'
+ do
+ () {
+ local -a optv
+ zparseopts -a optv -D - $=specs
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } --foobar 1 2 3
+ done
+0:overlapping option specs without -G (scan order)
+>ret: 0, optv: --foobar, argv: 1 2 3
+>ret: 0, optv: --foo bar, argv: 1 2 3
+>ret: 0, optv: --foobar 1, argv: 2 3
+>ret: 0, optv: --foo bar, argv: 1 2 3
+
+ for specs in \
+ '-foo: -foobar' '-foobar -foo:' '-foo: -foobar:' '-foobar: -foo:'
+ do
() {
local -a optv
- zparseopts -a optv - $=specs
+ zparseopts -a optv -D -G - $=specs
print -r - ret: $?, optv: $optv, argv: $argv
} --foobar 1 2 3
done
-0:overlapping option specs (scan order)
->ret: 0, optv: --foobar, argv: --foobar 1 2 3
->ret: 0, optv: --foo bar, argv: --foobar 1 2 3
+0:overlapping option specs with -G (scan order)
+>ret: 0, optv: --foobar, argv: 1 2 3
+>ret: 0, optv: --foobar, argv: 1 2 3
+>ret: 0, optv: --foobar 1, argv: 2 3
+>ret: 0, optv: --foobar 1, argv: 2 3
() {
local -a optv
@@ -170,3 +197,147 @@
0:missing optarg
?(anon):zparseopts:2: missing argument for option: -c
>ret: 1, optv: , argv: -ab1 -c
+
+ for spec in -foo: -foo:- -foo::; do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F - $=spec
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } --foo=bar 1 2 3
+ done
+0:zparseopts without -G, =optarg handling
+>ret: 0, optv: --foo =bar, argv: 1 2 3
+>ret: 0, optv: --foo=bar, argv: 1 2 3
+>ret: 0, optv: --foo=bar, argv: 1 2 3
+
+ for spec in -foo: -foo:- -foo::; do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F -G - $=spec
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } --foo=bar 1 2 3
+ done
+0:zparseopts -G, single parameter, with =
+>ret: 0, optv: --foo bar, argv: 1 2 3
+>ret: 0, optv: --foo=bar, argv: 1 2 3
+>ret: 0, optv: --foo=bar, argv: 1 2 3
+
+ for spec in -foo: -foo:- -foo:: ; do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F -G - $=spec
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } --foobar 1 2 3
+ done
+0:zparseopts -G, single parameter, without =
+?(anon):zparseopts:2: bad option: --foobar
+>ret: 1, optv: , argv: --foobar 1 2 3
+?(anon):zparseopts:2: bad option: --foobar
+>ret: 1, optv: , argv: --foobar 1 2 3
+?(anon):zparseopts:2: bad option: --foobar
+>ret: 1, optv: , argv: --foobar 1 2 3
+
+ for spec in -foo: -foo:- -foo::; do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F -G - $=spec
+ print -r - ret: $?, optv: $optv, argv: $argv
+ } --foo bar 1 2 3
+ done
+0:zparseopts -G, separate parameters
+>ret: 0, optv: --foo bar, argv: 1 2 3
+>ret: 0, optv: --foo=bar, argv: 1 2 3
+>ret: 0, optv: --foo, argv: bar 1 2 3
+
+ for spec in -foo: -foo:- -foo::; do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F -G - $=spec
+ print -r - ret: $?, optv: ${(j< >)${(q+)optv}}, argv: $argv
+ } --foo= 1 2 3
+ done
+0:zparseopts -G, empty optarg
+>ret: 0, optv: --foo '', argv: 1 2 3
+>ret: 0, optv: '--foo=', argv: 1 2 3
+>ret: 0, optv: '--foo=', argv: 1 2 3
+
+ for gopt in '' -G; do
+ for spec args in \
+ f: '-fbar 1 2 3' \
+ f: '-f=bar 1 2 3' \
+ f: '-f bar 1 2 3' \
+ f:- '-fbar 1 2 3' \
+ f:- '-f=bar 1 2 3' \
+ f:- '-f bar 1 2 3' \
+ f:: '-fbar 1 2 3' \
+ f:: '-f=bar 1 2 3' \
+ f:: '-f bar 1 2 3'
+ do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F $gopt - $=spec
+ print -r - ret: $?, gopt: $gopt, optv: $optv, argv: $argv
+ } $=args
+ done
+ done
+0:short options, with and without -G
+>ret: 0, gopt: , optv: -f bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -f =bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -f bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: , optv: -f=bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: , optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: , optv: -f=bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -f bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -f =bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -f bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -f=bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -fbar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -f=bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -f, argv: bar 1 2 3
+
+ for gopt in '' -G; do
+ for spec args in \
+ foo: '-foobar 1 2 3' \
+ foo: '-foo=bar 1 2 3' \
+ foo: '-foo bar 1 2 3' \
+ foo:- '-foobar 1 2 3' \
+ foo:- '-foo=bar 1 2 3' \
+ foo:- '-foo bar 1 2 3' \
+ foo:: '-foobar 1 2 3' \
+ foo:: '-foo=bar 1 2 3' \
+ foo:: '-foo bar 1 2 3'
+ do
+ () {
+ local -a optv
+ zparseopts -a optv -D -F $gopt - $=spec
+ print -r - ret: $?, gopt: $gopt, optv: $optv, argv: $argv
+ } $=args
+ done
+ done
+0:Sun-style long options, with and without -G
+>ret: 0, gopt: , optv: -foo bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foo =bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foo bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foobar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foo=bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foobar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foobar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foo=bar, argv: 1 2 3
+>ret: 0, gopt: , optv: -foobar, argv: 1 2 3
+?(anon):zparseopts:2: bad option: -f
+>ret: 1, gopt: -G, optv: , argv: -foobar 1 2 3
+>ret: 0, gopt: -G, optv: -foo bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -foo bar, argv: 1 2 3
+?(anon):zparseopts:2: bad option: -f
+>ret: 1, gopt: -G, optv: , argv: -foobar 1 2 3
+>ret: 0, gopt: -G, optv: -foo=bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -foo=bar, argv: 1 2 3
+?(anon):zparseopts:2: bad option: -f
+>ret: 1, gopt: -G, optv: , argv: -foobar 1 2 3
+>ret: 0, gopt: -G, optv: -foo=bar, argv: 1 2 3
+>ret: 0, gopt: -G, optv: -foo, argv: bar 1 2 3