Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Preserve DPUTS output in comptest-based tests



This ensures that if a DPUTS triggers during a comptest-based test, the test will fail.

Preserve DPUTS output in comptest-based tests

Philippe

diff --git a/Test/comptest b/Test/comptest
index 39ad14768..d306198e1 100644
--- a/Test/comptest
+++ b/Test/comptest
@@ -21,7 +21,7 @@ comptestinit () {
   export PS1="<PROMPT>"
   zpty zsh "$comptest_zsh -f +Z"
 
-  zpty -r zsh log1 "*<PROMPT>*" || { 
+  zpty_read log1 "*<PROMPT>*" || {
     print "first prompt hasn't appeared."
     return 1
   }
@@ -99,20 +99,41 @@ bindkey -a "^X" zle-finish
 '
 }
 
+zpty_read() {
+  local logvar=$1 pattern=$2
+  zpty -r -m zsh $logvar $pattern
+  local -i result=$?
+  zpty_handle_dputs $logvar
+  return result
+}
+
 zpty_flush() {
   local junk
   if zpty -r -t zsh junk \*; then
+    zpty_handle_dputs junk
     (( ZTST_verbose > 2 )) && print -n -u $ZTST_fd "$*: ${(V)junk}"
     while zpty -r -t zsh junk \* ; do
+      zpty_handle_dputs junk
       (( ZTST_verbose > 2 )) && print -n -u $ZTST_fd "${(V)junk}"
     done
     (( ZTST_verbose > 2 )) && print -u $ZTST_fd ''
   fi
 }
 
+zpty_handle_dputs() {
+  local -nu log=$1
+  local -i lastend=0
+  while (( ${(N)${log[lastend+1,-1]}#*(#b)((<->:|) *.c:<->: *[$'\r\n'])} )); do
+    print -r "DPUTS:{${match[1][1,-2]}}"
+    log[lastend+$mbegin[1],lastend+$mend[1]]=""
+    [[ log[lastend+$mbegin[1]] != $'\n' ]] || log[lastend+$mbegin[1]]=""
+    lastend+=$mbegin[1]
+  done
+}
+
 zpty_run() {
   zpty -w zsh "$*"
-  zpty -r -m zsh log "*<PROMPT>*" || {
+  zpty_read log "*<PROMPT>*" || {
     print "prompt hasn't appeared."
     return 1
   }
@@ -130,7 +151,7 @@ comptesteval () {
 
      # zpty_flush Before comptesteval
      zpty -w zsh ". ${(q)tmp}"
-     zpty -r -m zsh log_eval "*<PROMPT>*" || {
+     zpty_read log_eval "*<PROMPT>*" || {
        print "prompt hasn't appeared."
        return 1
      }
@@ -144,7 +165,7 @@ comptesteval () {
 comptest () {
   input="$*"
   zpty -n -w zsh "$input"$'\C-Z'
-  zpty -r -m zsh log "*<WIDGET><finish>*<PROMPT>*" || {
+  zpty_read log "*<WIDGET><finish>*<PROMPT>*" || {
     print "failed to invoke finish widget."
     return 1
   }
@@ -184,7 +205,7 @@ zletest () {
     zpty -n -w zsh "$input"
   done
   zpty -n -w zsh $'\C-X'
-  zpty -r -m zsh log "*<WIDGET><finish>*<PROMPT>*" || {
+  zpty_read log "*<WIDGET><finish>*<PROMPT>*" || {
     print "failed to invoke finish widget."
     return 1
   }


Messages sorted by: Reverse Date, Date, Thread, Author