aboutsummaryrefslogtreecommitdiff
path: root/tests/wordsplit.at
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org>2019-05-14 15:31:59 +0300
committerSergey Poznyakoff <gray@gnu.org>2019-05-14 15:43:25 +0300
commit8652a500669059d77ce7bace6e9e9da1b30c54b0 (patch)
tree54ee082e3804c0574e67252be8fbceb48b8f156a /tests/wordsplit.at
parent65f41a742e025487f8ec7f2e7ca2a3af3283fc96 (diff)
downloadgrecs-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.at122
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])

Return to:

Send suggestions and report system problems to the System administrator.