diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2019-05-14 15:31:59 +0300 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2019-05-14 15:43:25 +0300 |
commit | 8652a500669059d77ce7bace6e9e9da1b30c54b0 (patch) | |
tree | 54ee082e3804c0574e67252be8fbceb48b8f156a /tests/wordsplit.at | |
parent | 65f41a742e025487f8ec7f2e7ca2a3af3283fc96 (diff) | |
download | grecs-8652a500669059d77ce7bace6e9e9da1b30c54b0.tar.gz grecs-8652a500669059d77ce7bace6e9e9da1b30c54b0.tar.bz2 |
wordsplit: rewrite positional parameters implementation
This improves 3e07e3ad
* include/wordsplit.h (ws_paramv,ws_paramc)
(ws_parambuf,ws_paramidx,ws_paramsiz): New fields.
(WRDSO_PARAMV,WRDSO_PARAM_NEGIDX): New options.
(WRDSE_BADPARAM): New error code.
(wordsplit_free_parambuf): New proto.
* src/wordsplit.c (wordsplit_init): Initialize new fields.
(wsplt_assign_var): Fix double-free and memory leak.
(expvar): Expand positional parameters.
(begin_var_p): Add '#'
(wordsplit_free_envbuf): Fix condition.
(wordsplit_free_parambuf): New function.
(wordsplit_free): Call wordsplit_free_parambuf.
(_wordsplit_errstr): New error description.
* tests/wordsplit.at: Update wsp invocations.
Test positional parameters.
* tests/wsp.c: Rewrite.
Diffstat (limited to 'tests/wordsplit.at')
-rw-r--r-- | tests/wordsplit.at | 122 |
1 files changed, 63 insertions, 59 deletions
diff --git a/tests/wordsplit.at b/tests/wordsplit.at index 1f2e80d..ebd168b 100644 --- a/tests/wordsplit.at +++ b/tests/wordsplit.at @@ -109,5 +109,5 @@ dnl ------------------------------------------------------------ dnl Test worsplit-specific behavior dnl ------------------------------------------------------------ -TESTWSP([append],[wsp-append],[append], +TESTWSP([append],[wsp-append],[-append], [jeden dwa trzy cztery @@ -134,5 +134,5 @@ TOTAL: 2 ]) -TESTWSP([dooffs],[wsp-doofs ],[dooffs 3 jeden dwa trzy], +TESTWSP([dooffs],[wsp-doofs ],[-dooffs jeden dwa trzy], [cztery piec], [NF: 2 (3) @@ -215,5 +215,5 @@ TOTAL: 3 [unset FOO;]) -TESTWSP([undefined variables 2],[],[keepundef], +TESTWSP([undefined variables 2],[],[-keepundef], [a $FOO test a${FOO}b], [NF: 4 @@ -227,5 +227,5 @@ TOTAL: 4 [unset FOO;]) -TESTWSP([warn about undefined variables],[],[warnundef], +TESTWSP([warn about undefined variables],[],[-warnundef], [$FOO], [NF: 0 @@ -236,5 +236,5 @@ TOTAL: 0 [unset FOO;]) -TESTWSP([bail out on undefined variables],[],[undef], +TESTWSP([bail out on undefined variables],[],[-undef], [$FOO], [], @@ -243,5 +243,5 @@ TESTWSP([bail out on undefined variables],[],[undef], [unset FOO;]) -TESTWSP([disable variable expansion],[],[novar], +TESTWSP([disable variable expansion],[],[-novar], [$FOO], [NF: 1 @@ -253,5 +253,5 @@ TOTAL: 1 TESTWSP([K/V environment],[wsp-env-kv wsp-env_kv], -[env_kv], +[-env_kv], [$FOO a$BAZ], [NF: 2 @@ -263,5 +263,5 @@ TOTAL: 2 [FOO=bar BAZ=qux]) -TESTWSP([nosplit with variable expansion],[wsp-var-nosplit],[nosplit], +TESTWSP([nosplit with variable expansion],[wsp-var-nosplit],[-nosplit], [a $FOO test], [NF: 1 @@ -272,5 +272,5 @@ TOTAL: 1 [FOO="variable expansion"]) -TESTWSP([nosplit without variable expansion],[],[nosplit novar], +TESTWSP([nosplit without variable expansion],[],[-nosplit -novar], [a $FOO test], [NF: 1 @@ -281,5 +281,5 @@ TOTAL: 1 [FOO="variable expansion"]) -TESTWSP([nosplit: empty expansion],[],[nosplit trimnl], +TESTWSP([nosplit: empty expansion],[],[-nosplit -trimnl], [$FOO], [NF: 1 @@ -290,13 +290,4 @@ TOTAL: 1 [FOO=""]) -TESTWSP([default value (defined)],[],[], -[${FOO:-bar}], -[NF: 1 -0: qux -TOTAL: 1 -], -[], -[FOO=qux]) - TESTWSP([default value],[],[], [${FOO:-bar}], @@ -452,5 +443,5 @@ TOTAL: 2 WSPGROUP() -TESTWSP([ignore quotes],[wsp-ignore-quotes ],[-quote], +TESTWSP([ignore quotes],[wsp-ignore-quotes ],[-noquote], ["a text"], [NF: 2 @@ -463,5 +454,5 @@ WSPGROUP(wsp-delim) TESTWSP([custom delimiters (squeeze)],[], -[delim : -ws trimnl], +[-delim : -nows -trimnl], [semicolon: separated::list: of :words], [NF: 5 @@ -475,5 +466,5 @@ TOTAL: 5 TESTWSP([custom delimiters (no squeeze)],[], -[delim : -ws -squeeze_delims trimnl], +[-delim : -nows -nosqueeze_delims -trimnl], [semicolon: separated::list: of :words], [NF: 6 @@ -488,5 +479,5 @@ TOTAL: 6 TESTWSP([custom, with returned delimiters],[], -[delim : -ws trimnl return_delims], +[-delim : -nows -trimnl -return_delims], [semicolon: separated::list: of :words], [NF: 9 @@ -504,5 +495,5 @@ TOTAL: 9 TESTWSP([custom, with returned & squeezed delimiters],[], -[delim : -ws trimnl return_delims -squeeze_delims], +[-delim : -nows -trimnl -return_delims -nosqueeze_delims], [semicolon: separated::list: of :words], [NF: 10 @@ -522,5 +513,5 @@ TOTAL: 10 WSPGROUP(wsp-sed) -TESTWSP([sed expressions],[],[sed], +TESTWSP([sed expressions],[],[-sed], [arg1 s/foo/bar/g;s/bar baz/quz quux/ arg2], [NF: 3 @@ -533,5 +524,5 @@ TOTAL: 3 WSPGROUP() -TESTWSP([C escapes on],[wcp-c-escape],[cescapes], +TESTWSP([C escapes on],[wcp-c-escape],[-cescapes], [a\ttab form\ffeed and new\nline], [NF: 4 @@ -543,5 +534,5 @@ TOTAL: 4 ]) -TESTWSP([C escapes off],[wcp-c-escape-off],[-cescapes], +TESTWSP([C escapes off],[wcp-c-escape-off],[-nocescapes], [a\ttab form\ffeed and new\nline], [NF: 4 @@ -553,5 +544,5 @@ TOTAL: 4 ]) -TESTWSP([ws elimination],[wsp-ws-elim],[delim ' ()' ws return_delims], +TESTWSP([ws elimination],[wsp-ws-elim],[-delim ' ()' -ws -return_delims], [( list items )], [NF: 4 @@ -564,5 +555,5 @@ TOTAL: 4 TESTWSP([ws elimination + return delim],[wsp-ws-elim-ret], -[-default novar nocmd delim ":," return_delims ws dquote], +[-nodefault -novar -nocmd -delim ":," -return_delims -ws -dquote], ["foo" : "bar", "quux" : "baaz" ], [NF: 7 @@ -577,5 +568,5 @@ TOTAL: 7 ]) -TESTWSP([empty quotes],[wsp-empty-quotes],[delim : ws return_delims], +TESTWSP([empty quotes],[wsp-empty-quotes],[-delim : -ws -return_delims], [t=""], [NF: 1 @@ -585,5 +576,5 @@ TOTAL: 1 TESTWSP([delimiter following empty quotes], -[],[delim : ws return_delims], +[],[-delim : -ws -return_delims], [t="":r], [NF: 3 @@ -596,5 +587,5 @@ TOTAL: 3 TESTWSP([suppress ws trimming within quotes], [], -[default delim , ws return_delims], +[-default -delim , -ws -return_delims], [nocomponent,nonewline, formatfield="In message %{text}, "], [NF: 5 @@ -609,5 +600,5 @@ TOTAL: 5 TESTWSP([unescape], [wsp-unescape wsp-unescape-simple], -[-default novar nocmd quote escape ':+:\\""'], +[-nodefault -novar -nocmd -quote -escape ':+:\\""'], [\Seen "quote \"" "bs \\"], [NF: 3 @@ -620,5 +611,5 @@ TOTAL: 3 TESTWSP([unescape: word/quote], [wsp-unescape wsp-unescape-word], -[-default novar nocmd quote escape-word '\\""' escape-quote ':+0x:\\""'], +[-nodefault -novar -nocmd -quote -escape-word '\\""' -escape-quote ':+0x:\\""'], [\Seen "quote \"" "bs \\" "3\x31 \101" 3\x31 \101], [NF: 6 @@ -632,5 +623,5 @@ TOTAL: 6 ]) -TESTWSP([dquote],[],[-default novar nocmd dquote], +TESTWSP([dquote],[],[-nodefault -novar -nocmd -dquote], [a "quoted example" isn't it], [NF: 4 @@ -642,5 +633,5 @@ TOTAL: 4 ]) -TESTWSP([squote],[],[-default novar nocmd squote], +TESTWSP([squote],[],[-nodefault -novar -nocmd -squote], [a 'quoted example' isn"t it], [NF: 4 @@ -654,5 +645,5 @@ TOTAL: 4 WSPGROUP(wsp-incr) -TESTWSP([incremental],[],[incremental], +TESTWSP([incremental],[],[-incremental], [incremental "input test" line @@ -672,5 +663,5 @@ TOTAL: 3 ]) -TESTWSP([incremental append],[],[incremental append], +TESTWSP([incremental append],[],[-incremental -append], [incremental "input test" line @@ -694,5 +685,5 @@ TOTAL: 3 TESTWSP([incremental ws], -[],[return_delims -squeeze_delims incremental ws], +[],[-return_delims -nosqueeze_delims -incremental -ws], [a list test @@ -712,5 +703,5 @@ TOTAL: 3 ]) -TESTWSP([incremental nosplit],[],[incremental nosplit], +TESTWSP([incremental nosplit],[],[-incremental -nosplit], [incremental "input test" line ], @@ -722,5 +713,5 @@ TOTAL: 1 ]) -TESTWSP([simple command substitution],[],[-nocmd], +TESTWSP([simple command substitution],[],[-cmd], [begin $(words a b) end], [NF: 4 @@ -732,5 +723,5 @@ TOTAL: 4 ]) -TESTWSP([quoted command substitution],[],[-nocmd], +TESTWSP([quoted command substitution],[],[-cmd], [begin "$(words a b)" end], [NF: 3 @@ -741,5 +732,5 @@ TOTAL: 3 ]) -TESTWSP([coalesced command substitution],[],[-nocmd], +TESTWSP([coalesced command substitution],[],[-cmd], [begin($(words a b))end], [NF: 2 @@ -749,5 +740,5 @@ TOTAL: 2 ]) -TESTWSP([quoted coalesced command substitution],[],[-nocmd], +TESTWSP([quoted coalesced command substitution],[],[-cmd], ["begin($(words a b))end"], [NF: 1 @@ -756,5 +747,5 @@ TOTAL: 1 ]) -TESTWSP([variable and command substitution],[],[-nocmd -novar], +TESTWSP([variable and command substitution],[],[-cmd -var], [begin $X $(words $X $Y) end], [NF: 5 @@ -767,5 +758,5 @@ TOTAL: 5 ],[],[X=a Y=b]) -TESTWSP([variable expansion and command substitution in quotes],[],[-nocmd -novar], +TESTWSP([variable expansion and command substitution in quotes],[],[-cmd -var], ["${BEGIN}($(words $X $Y))end"], [NF: 1 @@ -774,5 +765,5 @@ TOTAL: 1 ],[],[X=a Y=b BEGIN=begin]) -TESTWSP([nested commands],[],[-nocmd -novar], +TESTWSP([nested commands],[],[-cmd -var], [$(words output $(words in$SUFFIX text) end)], [NF: 4 @@ -793,5 +784,5 @@ mkdir dir > dir/3.b -wsp pathexpand<<'EOT' +wsp -pathexpand<<'EOT' begin dir/*.c end EOT @@ -814,5 +805,5 @@ mkdir dir > dir/2.b -wsp pathexpand<<'EOT' +wsp -pathexpand<<'EOT' begin dir/*.d end EOT @@ -834,5 +825,5 @@ mkdir dir > dir/2.b -wsp pathexpand nullglob<<'EOT' +wsp -pathexpand -nullglob<<'EOT' begin dir/*.d end EOT @@ -853,5 +844,5 @@ mkdir dir > dir/2.b -wsp pathexpand failglob<<'EOT' +wsp -pathexpand -failglob<<'EOT' begin dir/*.d end EOT @@ -863,5 +854,5 @@ EOT AT_CLEANUP -TESTWSP([append],[],[-- extra arguments follow], +TESTWSP([append],[],[-append-args extra arguments follow], [some words and], [NF: 6 @@ -876,5 +867,5 @@ TOTAL: 3 TESTWSP([append + dooffs + env],[], -[-env dooffs 2 preface words V=2 -- extra arguments follow], +[-env none -dooffs preface words -- V=2 -append-args extra arguments follow], [some words and var=$V], [NF: 7 (2) @@ -893,5 +884,5 @@ TOTAL: 4 # Maxwords TESTWSP([maxwords],[], -[trimnl maxwords 3], +[-trimnl -maxwords 3], [ws_maxwords limits the number of returned words], [NF: 3 @@ -903,5 +894,5 @@ TOTAL: 3 TESTWSP([maxwords return_delims],[], -[trimnl maxwords 8 return_delims delim :-], +[-trimnl -maxwords 8 -return_delims -delim :-], [foo:::bar-:baz-quux:ux:zu], [NF: 8 @@ -918,5 +909,5 @@ TOTAL: 8 TESTWSP([maxwords return_delims -squeeze_delims],[], -[trimnl maxwords 8 return_delims -squeeze_delims delim :-], +[-trimnl -maxwords 8 -return_delims -nosqueeze_delims -delim :-], [foo:::bar-:baz:qux-], [NF: 8 @@ -933,5 +924,5 @@ TOTAL: 8 TESTWSP([maxwords incremental],[], -[trimnl maxwords 3 incremental], +[-trimnl -maxwords 3 -incremental], [foo bar baz qux uz @@ -951,5 +942,5 @@ TOTAL: 3 ])) -TESTWSP([variable nosplit],[],[novar novarsplit], +TESTWSP([variable nosplit],[],[-novar -novarsplit], [begin ${VAR:- a b} end], [NF: 3 @@ -960,5 +951,5 @@ TOTAL: 3 ]) -TESTWSP([command nosplit],[],[nocmd nocmdsplit], +TESTWSP([command nosplit],[],[-nocmd -nocmdsplit], [begin $(words a b) end], [NF: 3 @@ -969,4 +960,17 @@ TOTAL: 3 ]) +TESTWSP([positional parameters],[],[one two three four five six seven eight nine ten eleven twelve], +[$0 $5 ${10} +$#], +[NF: 3 +0: one +1: six +2: eleven +TOTAL: 3 +NF: 1 +0: 12 +TOTAL: 1 +]) + m4_popdef([TESTWSP]) m4_popdef([wspnum]) |