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 @@ -108,7 +108,7 @@ WSPGROUP() dnl ------------------------------------------------------------ dnl Test worsplit-specific behavior dnl ------------------------------------------------------------ -TESTWSP([append],[wsp-append],[append], +TESTWSP([append],[wsp-append],[-append], [jeden dwa trzy cztery piec szesc], @@ -133,7 +133,7 @@ NF: 6 TOTAL: 2 ]) -TESTWSP([dooffs],[wsp-doofs ],[dooffs 3 jeden dwa trzy], +TESTWSP([dooffs],[wsp-doofs ],[-dooffs jeden dwa trzy], [cztery piec], [NF: 2 (3) (0): jeden @@ -214,7 +214,7 @@ TOTAL: 3 [], [unset FOO;]) -TESTWSP([undefined variables 2],[],[keepundef], +TESTWSP([undefined variables 2],[],[-keepundef], [a $FOO test a${FOO}b], [NF: 4 0: a @@ -226,7 +226,7 @@ TOTAL: 4 [], [unset FOO;]) -TESTWSP([warn about undefined variables],[],[warnundef], +TESTWSP([warn about undefined variables],[],[-warnundef], [$FOO], [NF: 0 TOTAL: 0 @@ -235,14 +235,14 @@ TOTAL: 0 ], [unset FOO;]) -TESTWSP([bail out on undefined variables],[],[undef], +TESTWSP([bail out on undefined variables],[],[-undef], [$FOO], [], [undefined variable ], [unset FOO;]) -TESTWSP([disable variable expansion],[],[novar], +TESTWSP([disable variable expansion],[],[-novar], [$FOO], [NF: 1 0: $FOO @@ -252,7 +252,7 @@ TOTAL: 1 [FOO=bar]) TESTWSP([K/V environment],[wsp-env-kv wsp-env_kv], -[env_kv], +[-env_kv], [$FOO a$BAZ], [NF: 2 0: bar @@ -262,7 +262,7 @@ 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 0: "a variable expansion test\n" @@ -271,7 +271,7 @@ TOTAL: 1 [], [FOO="variable expansion"]) -TESTWSP([nosplit without variable expansion],[],[nosplit novar], +TESTWSP([nosplit without variable expansion],[],[-nosplit -novar], [a $FOO test], [NF: 1 0: "a $FOO test\n" @@ -280,7 +280,7 @@ TOTAL: 1 [], [FOO="variable expansion"]) -TESTWSP([nosplit: empty expansion],[],[nosplit trimnl], +TESTWSP([nosplit: empty expansion],[],[-nosplit -trimnl], [$FOO], [NF: 1 0: "" @@ -289,15 +289,6 @@ TOTAL: 1 [], [FOO=""]) -TESTWSP([default value (defined)],[],[], -[${FOO:-bar}], -[NF: 1 -0: qux -TOTAL: 1 -], -[], -[FOO=qux]) - TESTWSP([default value],[],[], [${FOO:-bar}], [NF: 1 @@ -451,7 +442,7 @@ TOTAL: 2 WSPGROUP() -TESTWSP([ignore quotes],[wsp-ignore-quotes ],[-quote], +TESTWSP([ignore quotes],[wsp-ignore-quotes ],[-noquote], ["a text"], [NF: 2 0: "\"a" @@ -462,7 +453,7 @@ TOTAL: 2 WSPGROUP(wsp-delim) TESTWSP([custom delimiters (squeeze)],[], -[delim : -ws trimnl], +[-delim : -nows -trimnl], [semicolon: separated::list: of :words], [NF: 5 0: semicolon @@ -474,7 +465,7 @@ TOTAL: 5 ]) TESTWSP([custom delimiters (no squeeze)],[], -[delim : -ws -squeeze_delims trimnl], +[-delim : -nows -nosqueeze_delims -trimnl], [semicolon: separated::list: of :words], [NF: 6 0: semicolon @@ -487,7 +478,7 @@ TOTAL: 6 ]) TESTWSP([custom, with returned delimiters],[], -[delim : -ws trimnl return_delims], +[-delim : -nows -trimnl -return_delims], [semicolon: separated::list: of :words], [NF: 9 0: semicolon @@ -503,7 +494,7 @@ 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 0: semicolon @@ -521,7 +512,7 @@ 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 0: arg1 @@ -532,7 +523,7 @@ 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 0: a\ttab @@ -542,7 +533,7 @@ TESTWSP([C escapes on],[wcp-c-escape],[cescapes], 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 0: attab @@ -552,7 +543,7 @@ TESTWSP([C escapes off],[wcp-c-escape-off],[-cescapes], 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 0: ( @@ -563,7 +554,7 @@ 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 0: foo @@ -576,7 +567,7 @@ TESTWSP([ws elimination + return delim],[wsp-ws-elim-ret], 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 0: t= @@ -584,7 +575,7 @@ TOTAL: 1 ]) TESTWSP([delimiter following empty quotes], -[],[delim : ws return_delims], +[],[-delim : -ws -return_delims], [t="":r], [NF: 3 0: t= @@ -595,7 +586,7 @@ 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 0: nocomponent @@ -608,7 +599,7 @@ TOTAL: 5 TESTWSP([unescape], [wsp-unescape wsp-unescape-simple], -[-default novar nocmd quote escape ':+:\\""'], +[-nodefault -novar -nocmd -quote -escape ':+:\\""'], [\Seen "quote \"" "bs \\"], [NF: 3 0: \\Seen @@ -619,7 +610,7 @@ 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 0: Seen @@ -631,7 +622,7 @@ TESTWSP([unescape: word/quote], TOTAL: 6 ]) -TESTWSP([dquote],[],[-default novar nocmd dquote], +TESTWSP([dquote],[],[-nodefault -novar -nocmd -dquote], [a "quoted example" isn't it], [NF: 4 0: a @@ -641,7 +632,7 @@ TESTWSP([dquote],[],[-default novar nocmd dquote], TOTAL: 4 ]) -TESTWSP([squote],[],[-default novar nocmd squote], +TESTWSP([squote],[],[-nodefault -novar -nocmd -squote], [a 'quoted example' isn"t it], [NF: 4 0: a @@ -653,7 +644,7 @@ TOTAL: 4 WSPGROUP(wsp-incr) -TESTWSP([incremental],[],[incremental], +TESTWSP([incremental],[],[-incremental], [incremental "input test" line @@ -671,7 +662,7 @@ TOTAL: 3 [input exhausted ]) -TESTWSP([incremental append],[],[incremental append], +TESTWSP([incremental append],[],[-incremental -append], [incremental "input test" line @@ -693,7 +684,7 @@ TOTAL: 3 ]) TESTWSP([incremental ws], -[],[return_delims -squeeze_delims incremental ws], +[],[-return_delims -nosqueeze_delims -incremental -ws], [a list test @@ -711,7 +702,7 @@ TOTAL: 3 [input exhausted ]) -TESTWSP([incremental nosplit],[],[incremental nosplit], +TESTWSP([incremental nosplit],[],[-incremental -nosplit], [incremental "input test" line ], [NF: 1 @@ -721,7 +712,7 @@ TOTAL: 1 [input exhausted ]) -TESTWSP([simple command substitution],[],[-nocmd], +TESTWSP([simple command substitution],[],[-cmd], [begin $(words a b) end], [NF: 4 0: begin @@ -731,7 +722,7 @@ TESTWSP([simple command substitution],[],[-nocmd], TOTAL: 4 ]) -TESTWSP([quoted command substitution],[],[-nocmd], +TESTWSP([quoted command substitution],[],[-cmd], [begin "$(words a b)" end], [NF: 3 0: begin @@ -740,7 +731,7 @@ TESTWSP([quoted command substitution],[],[-nocmd], TOTAL: 3 ]) -TESTWSP([coalesced command substitution],[],[-nocmd], +TESTWSP([coalesced command substitution],[],[-cmd], [begin($(words a b))end], [NF: 2 0: begin(a @@ -748,14 +739,14 @@ TESTWSP([coalesced command substitution],[],[-nocmd], TOTAL: 2 ]) -TESTWSP([quoted coalesced command substitution],[],[-nocmd], +TESTWSP([quoted coalesced command substitution],[],[-cmd], ["begin($(words a b))end"], [NF: 1 0: "begin(a b)end" TOTAL: 1 ]) -TESTWSP([variable and command substitution],[],[-nocmd -novar], +TESTWSP([variable and command substitution],[],[-cmd -var], [begin $X $(words $X $Y) end], [NF: 5 0: begin @@ -766,14 +757,14 @@ TESTWSP([variable and command substitution],[],[-nocmd -novar], 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 0: "begin(a b)end" 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 0: output @@ -792,7 +783,7 @@ mkdir dir > dir/2.c > dir/3.b -wsp pathexpand<<'EOT' +wsp -pathexpand<<'EOT' begin dir/*.c end EOT ], @@ -813,7 +804,7 @@ mkdir dir > dir/1.c > dir/2.b -wsp pathexpand<<'EOT' +wsp -pathexpand<<'EOT' begin dir/*.d end EOT ], @@ -833,7 +824,7 @@ mkdir dir > dir/1.c > dir/2.b -wsp pathexpand nullglob<<'EOT' +wsp -pathexpand -nullglob<<'EOT' begin dir/*.d end EOT ], @@ -852,7 +843,7 @@ mkdir dir > dir/1.c > dir/2.b -wsp pathexpand failglob<<'EOT' +wsp -pathexpand -failglob<<'EOT' begin dir/*.d end EOT ], @@ -862,7 +853,7 @@ EOT ]) AT_CLEANUP -TESTWSP([append],[],[-- extra arguments follow], +TESTWSP([append],[],[-append-args extra arguments follow], [some words and], [NF: 6 0: some @@ -875,7 +866,7 @@ 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) (0): preface @@ -892,7 +883,7 @@ TOTAL: 4 # Maxwords TESTWSP([maxwords],[], -[trimnl maxwords 3], +[-trimnl -maxwords 3], [ws_maxwords limits the number of returned words], [NF: 3 0: ws_maxwords @@ -902,7 +893,7 @@ 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 0: foo @@ -917,7 +908,7 @@ 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 0: foo @@ -932,7 +923,7 @@ TOTAL: 8 ]) TESTWSP([maxwords incremental],[], -[trimnl maxwords 3 incremental], +[-trimnl -maxwords 3 -incremental], [foo bar baz qux uz @@ -950,7 +941,7 @@ TOTAL: 3 [input exhausted ])) -TESTWSP([variable nosplit],[],[novar novarsplit], +TESTWSP([variable nosplit],[],[-novar -novarsplit], [begin ${VAR:- a b} end], [NF: 3 0: begin @@ -959,7 +950,7 @@ TESTWSP([variable nosplit],[],[novar novarsplit], TOTAL: 3 ]) -TESTWSP([command nosplit],[],[nocmd nocmdsplit], +TESTWSP([command nosplit],[],[-nocmd -nocmdsplit], [begin $(words a b) end], [NF: 3 0: begin @@ -968,6 +959,19 @@ TESTWSP([command nosplit],[],[nocmd nocmdsplit], 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]) m4_popdef([wspid]) |