bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

examples: beware of readline on macOS


From: Akim Demaille
Subject: examples: beware of readline on macOS
Date: Sat, 18 Apr 2020 11:36:27 +0200

commit 8b5fb7c4c3fb0f16e0ea2ae7160c7dcd143538b4
Author: Akim Demaille <address@hidden>
Date:   Sat Apr 18 09:27:14 2020 +0200

    examples: beware of readline on macOS
    
    macOS' version of readline does not repeat stdin on stdout in
    non-interactive mode, contrary to the current version of GNU readline.
    
    * examples/test: Add support for strip_prompt.
    * examples/c/bistromathic/bistromathic.test (strip_prompt): Set it
    when needed.
    Early exit when needed.

diff --git a/examples/c/bistromathic/bistromathic.test 
b/examples/c/bistromathic/bistromathic.test
index 4f64b1a1..5d9966f3 100755
--- a/examples/c/bistromathic/bistromathic.test
+++ b/examples/c/bistromathic/bistromathic.test
@@ -15,6 +15,12 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
+# macOS' version of readline does not repeat stdin on stdout in
+# non-interactive mode.
+if ! echo '1-1' | prog | grep '1-1'; then
+   strip_prompt=true
+fi
+
 cat >input <<EOF
 1+2*3
 EOF
@@ -85,6 +91,17 @@ run 0 '> 1 / 0
 ## Completion.  ##
 ## ------------ ##
 
+# From now on, the differences between versions of GNU Readline are
+# too painful to try to cope with.
+if $strip_prompt; then
+    echo "SKIP: this is not the GNU Readline we expect"
+    if $exit; then
+        exit 0
+    else
+        exit 1
+    fi
+fi
+
 # Check completion after an operator.
 sed -e 's/\\t/ /g' >input <<EOF
 (1+\t\t
diff --git a/examples/test b/examples/test
index 50b5d8ce..9544cb8d 100755
--- a/examples/test
+++ b/examples/test
@@ -30,6 +30,10 @@ exit=true
 # top_builddir.
 cwd=$(pwd)
 
+# Whether to strip '> ...' lines from the expected output.
+# See bistromathic.test.
+strip_prompt=false
+
 # The exercised program.
 abs_medir=$cwd/examples/$medir
 if test -x "$abs_medir/$me"; then
@@ -77,14 +81,23 @@ run ()
   # Expected exit status.
   sta_exp=$1
   shift
+
   # Expected output.
-  out_exp=$1
+  if $strip_prompt; then
+      out_exp=$(echo "$1" | sed -e 's/^> err:/err:/;/^> /d')
+  else
+      out_exp=$1
+  fi
   shift
+
   # Effective exit status.
   sta_eff=0
+
   prog "$@" - <input >out_eff 2>err_eff || sta_eff=$?
+
   # Combine effective output and error streams.
   out_eff=$(cat out_eff && $noerr || sed -e 's/^/err: /g' err_eff)
+
   if test $sta_eff -eq $sta_exp; then
     if test "$out_eff" = "$out_exp"; then
       echo "$me: PASS: $number"




reply via email to

[Prev in Thread] Current Thread [Next in Thread]