zsh-workers
 help / color / mirror / code / Atom feed
* [PATCH 1/2] Add zformat unit tests.
@ 2019-12-24 18:25 Daniel Shahaf
  2019-12-24 18:25 ` [PATCH 2/2] zformat: Allow the specifying minimum width and a dot with an empty maximum width Daniel Shahaf
  0 siblings, 1 reply; 2+ messages in thread
From: Daniel Shahaf @ 2019-12-24 18:25 UTC (permalink / raw)
  To: zsh-workers

---
 Src/Modules/zutil.c  |  6 ++---
 Test/V13zformat.ztst | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+), 3 deletions(-)
 create mode 100644 Test/V13zformat.ztst

diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index 24659cb16..de5fe8034 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -913,13 +913,13 @@ bin_zformat(char *nam, char **args, UNUSED(Options ops), UNUSED(int func))
     switch (opt) {
     case 'f':
 	{
-	    char **ap, *specs[256], *out;
+	    char **ap, *specs[256] = {0}, *out;
 	    int olen, oused = 0;
 
-	    memset(specs, 0, 256 * sizeof(char *));
-
 	    specs['%'] = "%";
 	    specs[')'] = ")";
+
+	    /* Parse the specs in argv. */
 	    for (ap = args + 2; *ap; ap++) {
 		if (!ap[0][0] || ap[0][0] == '-' || ap[0][0] == '.' ||
 		    idigit(ap[0][0]) || ap[0][1] != ':') {
diff --git a/Test/V13zformat.ztst b/Test/V13zformat.ztst
new file mode 100644
index 000000000..d8de2bb04
--- /dev/null
+++ b/Test/V13zformat.ztst
@@ -0,0 +1,65 @@
+# Test the use of zformat, if the zsh/zutil module is available.
+
+%prep
+
+  if ! zmodload zsh/zutil 2>/dev/null; then
+    ZTST_unimplemented="can't load the zsh/zutil module for testing"
+  fi
+
+  # Helper function.  Expects a single format using %s and a value for it.
+  zformat_and_print_s() {
+    zformat -f REPLY "$1" "s:$2"
+    print -r - ${(qq)REPLY}
+  }
+
+%test
+
+ zformat_and_print_s '%s'   foo
+ zformat_and_print_s '%5s'  min
+ zformat_and_print_s '%-5s' neg
+ zformat_and_print_s '%.5s' max
+ zformat_and_print_s '%.5s' truncated
+0:basic zformat test
+>'foo'
+>'min  '
+>'  neg'
+>'max'
+>'trunc'
+
+ # There may be a set of digits either before or after the opening parenthesis.
+ zformat_and_print_s 'The answer is "%3(s.yes.no)".' 3
+ zformat_and_print_s 'The answer is "%(3s.yes.no)".' 3
+ # The test number defaults to zero.
+ zformat_and_print_s '%(s.equal.unequal)' -1
+ zformat_and_print_s '%(s.equal.unequal)' 0
+ zformat_and_print_s '%(s.equal.unequal)' 1
+ # Negative numbers are allowed
+ # The delimiter is arbitrary
+ zformat_and_print_s '%-4(s.minus four.)' -4
+ zformat_and_print_s '%(-4s//minus four)' -4
+ # The argument is evaluated as a math expression
+ zformat_and_print_s '%18(s.math.)' '6*3'
+0:basic conditionals test
+>'The answer is "yes".'
+>'The answer is "yes".'
+>'unequal'
+>'equal'
+>'unequal'
+>'minus four'
+>''
+>'math'
+
+ () {
+   zformat -f 1 '%(8n.%(5j.yes.no).no)' 'n:8' 'j:5'
+   echo $1
+ }
+0:nested conditionals test
+>yes
+
+ zformat -a argv . foo:lorem ipsum:bar bazbaz '\\esc\:ape'
+ print -rl -- "$@"
+0:basic -a test
+>foo  .lorem
+>ipsum.bar
+>bazbaz
+>\esc:ape

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH 2/2] zformat: Allow the specifying minimum width and a dot with an empty maximum width.
  2019-12-24 18:25 [PATCH 1/2] Add zformat unit tests Daniel Shahaf
@ 2019-12-24 18:25 ` Daniel Shahaf
  0 siblings, 0 replies; 2+ messages in thread
From: Daniel Shahaf @ 2019-12-24 18:25 UTC (permalink / raw)
  To: zsh-workers

Before this commit, format specs such as '%5.s' would be printed
literally.  Now, they are treated as equivalent to '%5s'.

The '.' character is not allowed to be used in specs, so there is no
incompatibility.
---

I'm thinking of pushing 45131 and this to a new "5.9" branch in git,
and merge that branch to master after 5.8 when we're happy there won't
be a 5.8.1.  This way, 5.8 won't be destabilized but the patches will
live in git, rather than in the list archives.

Cheers,

Daniel


 Src/Modules/zutil.c  | 3 +--
 Test/V13zformat.ztst | 2 ++
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index de5fe8034..7d9bf05d6 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -797,8 +797,7 @@ static char *zformat_substring(char* instr, char **specs, char **outp,
 	    if ((*s == '.' || testit) && idigit(s[1])) {
 		for (max = 0, s++; idigit(*s); s++)
 		    max = (max * 10) + (int) STOUC(*s) - '0';
-	    }
-	    else if (testit)
+	    } else if (*s == '.' || testit)
 		s++;
 
 	    if (testit && STOUC(*s)) {
diff --git a/Test/V13zformat.ztst b/Test/V13zformat.ztst
index d8de2bb04..982866e13 100644
--- a/Test/V13zformat.ztst
+++ b/Test/V13zformat.ztst
@@ -17,12 +17,14 @@
  zformat_and_print_s '%s'   foo
  zformat_and_print_s '%5s'  min
  zformat_and_print_s '%-5s' neg
+ zformat_and_print_s '%5.s' empty
  zformat_and_print_s '%.5s' max
  zformat_and_print_s '%.5s' truncated
 0:basic zformat test
 >'foo'
 >'min  '
 >'  neg'
+>'empty'
 >'max'
 >'trunc'
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-12-24 18:26 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-24 18:25 [PATCH 1/2] Add zformat unit tests Daniel Shahaf
2019-12-24 18:25 ` [PATCH 2/2] zformat: Allow the specifying minimum width and a dot with an empty maximum width Daniel Shahaf

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).