bug-bison
[Top][All Lists]
Advanced

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

Re: new test failures


From: Akim Demaille
Subject: Re: new test failures
Date: Fri, 17 Feb 2012 15:54:26 +0100

Le 17 févr. 2012 à 10:49, Jim Meyering a écrit :

> That's better (I confirmed it fixes the failures), but introduces a race.

Well caught, thanks!

> If it's interrupted or fails between the trap and a successful "cd",
> it will fail to clean up, and might try to remove $$.dir from the parent.
> 
> How about recording cwd=$(pwd) before cleanup definition,
> and then using cd "$cwd" instead of "cd .."?

I did that.  I also decided to factor the "test suites".

From 5a9c6b89d0cd97f514383bc555a2c14f59bd9c3b Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Fri, 17 Feb 2012 14:59:23 +0100
Subject: [PATCH] examples: factor the test suite.

        * examples/mfcalc/test, examples/calc++/test: Extract the
        common bits into...
        * examples/test: here.
        (cwd): New.
        Use it to avoid a race on the temporary directory.
        Reported by Jim Meyering.
        * examples/mfcalc/test, examples/calc++/test: Rename into...
        * examples/mfcalc/mfcalc.test, examples/calc++/calc++.test: these.
        * examples/calc++/local.mk, examples/mfcalc/local.mk,
        * examples/local.mk: Adjust.
---
 examples/calc++/calc++.test |   50 ++++++++++++++++++++
 examples/calc++/local.mk    |    4 +-
 examples/calc++/test        |  109 -------------------------------------------
 examples/local.mk           |    3 +-
 examples/mfcalc/local.mk    |    4 +-
 examples/mfcalc/mfcalc.test |   27 +++++++++++
 examples/mfcalc/test        |   86 ----------------------------------
 examples/test               |   79 +++++++++++++++++++++++++++++++
 8 files changed, 162 insertions(+), 200 deletions(-)
 create mode 100755 examples/calc++/calc++.test
 delete mode 100755 examples/calc++/test
 create mode 100755 examples/mfcalc/mfcalc.test
 delete mode 100755 examples/mfcalc/test
 create mode 100755 examples/test

diff --git a/examples/calc++/calc++.test b/examples/calc++/calc++.test
new file mode 100755
index 0000000..904d05f
--- /dev/null
+++ b/examples/calc++/calc++.test
@@ -0,0 +1,50 @@
+#! /bin/sh
+
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+cat >input <<EOF
+toto := 1
+toto
+EOF
+run 0 1 -s
+
+
+cat >input <<EOF
+a := 1
+b := 2
+c := 3
+d := a + b * c
+d
+EOF
+run 0 7
+run 0 7 -p
+
+
+cat >input <<EOF
+a := 1
+b := 2
+c := 3
+d := (a + b) * c
+d
+EOF
+run 0 9
+
+
+cat >input <<EOF
+a := 1
+d := a + b * c
+EOF
+run 1 ''
diff --git a/examples/calc++/local.mk b/examples/calc++/local.mk
index 839ef86..5d9dce0 100644
--- a/examples/calc++/local.mk
+++ b/examples/calc++/local.mk
@@ -64,6 +64,6 @@ examples_calc___calc___SOURCES =              \
   examples/calc++/calc++-parser.hh
 
 examples_calc___calc___CPPFLAGS = -I$(top_srcdir)/examples/calc++
-TESTS += examples/calc++/test
+TESTS += examples/calc++/calc++.test
 endif
-EXTRA_DIST += examples/calc++/test
+EXTRA_DIST += examples/calc++/calc++.test
diff --git a/examples/calc++/test b/examples/calc++/test
deleted file mode 100755
index 7930dc2..0000000
--- a/examples/calc++/test
+++ /dev/null
@@ -1,109 +0,0 @@
-#! /bin/sh
-
-# Copyright (C) 2005-2012 Free Software Foundation, Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-me=`dirname $0`
-me=`basename $me`
-
-# Number of the current test.
-number=1
-
-# Exit status of this script.
-exit=true
-
-# The exercised program.
-prog=../examples/$me/$me
-
-# cleanup
-# -------
-cleanup ()
-{
-  local status=$?
-  if test -z "$DEBUG"; then
-     cd ..
-     rm -rf $$.dir
-  fi
-  exit $status
-}
-trap cleanup 0 1 2 13 15
-mkdir $$.dir
-cd $$.dir
-
-# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
-# ---------------------------------------------------------
-run ()
-{
-  # Expected exit status.
-  local sta_exp=$1
-  shift
-  # Expected output.
-  local out_exp=$1
-  shift
-  $prog "$@" - <input >out_eff
-  # Effective exit status.
-  local sta_eff=$?
-  # Effective output.
-  local out_eff=`cat out_eff`
-  if test $sta_eff -eq $sta_exp; then
-    if test "$out_eff" = "$out_exp"; then
-      echo "$me: PASS: $number"
-    else
-      echo "$me: FAIL: $number (expected output: $out_exp, effective: 
$out_eff)"
-      exit=false
-    fi
-  else
-    echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)"
-    exit=false
-  fi
-  number=`expr $number + 1`
-}
-
-
-cat >input <<EOF
-toto := 1
-toto
-EOF
-run 0 1 -s
-
-
-cat >input <<EOF
-a := 1
-b := 2
-c := 3
-d := a + b * c
-d
-EOF
-run 0 7
-run 0 7 -p
-
-
-cat >input <<EOF
-a := 1
-b := 2
-c := 3
-d := (a + b) * c
-d
-EOF
-run 0 9
-
-
-cat >input <<EOF
-a := 1
-d := a + b * c
-EOF
-run 1 ''
-
-$exit
diff --git a/examples/local.mk b/examples/local.mk
index 02e82bb..de4d38f 100644
--- a/examples/local.mk
+++ b/examples/local.mk
@@ -15,7 +15,8 @@
 
 doc = $(top_srcdir)/doc/bison.texinfo
 extexi = $(top_srcdir)/examples/extexi
-dist_noinst_SCRIPTS = examples/extexi
+dist_noinst_SCRIPTS = examples/extexi examples/test
+TEST_LOG_COMPILER = $(top_srcdir)/examples/test
 
 include examples/calc++/local.mk
 include examples/mfcalc/local.mk
diff --git a/examples/mfcalc/local.mk b/examples/mfcalc/local.mk
index e34d8d7..c6d9470 100644
--- a/examples/mfcalc/local.mk
+++ b/examples/mfcalc/local.mk
@@ -54,5 +54,5 @@ examples_mfcalc_mfcalc_SOURCES =              \
   $(mfcalc_sources)
 
 examples_mfcalc_mfcalc_CPPFLAGS = -I$(top_srcdir)/examples/mfcalc
-TESTS += examples/mfcalc/test
-EXTRA_DIST += examples/mfcalc/test
+TESTS += examples/mfcalc/mfcalc.test
+EXTRA_DIST += examples/mfcalc/mfcalc.test
diff --git a/examples/mfcalc/mfcalc.test b/examples/mfcalc/mfcalc.test
new file mode 100755
index 0000000..6f794aa
--- /dev/null
+++ b/examples/mfcalc/mfcalc.test
@@ -0,0 +1,27 @@
+#! /bin/sh
+
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+cat >input <<EOF
+1+2*3
+EOF
+run 0 7
+run 0 7
+
+cat >input <<EOF
+(1+2) * 3
+EOF
+run 0 9
diff --git a/examples/mfcalc/test b/examples/mfcalc/test
deleted file mode 100755
index f848bbd..0000000
--- a/examples/mfcalc/test
+++ /dev/null
@@ -1,86 +0,0 @@
-#! /bin/sh
-
-# Copyright (C) 2005-2012 Free Software Foundation, Inc.
-#
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-me=`dirname $0`
-me=`basename $me`
-
-# Number of the current test.
-number=1
-
-# Exit status of this script.
-exit=true
-
-# The exercised program.
-prog=../examples/$me/$me
-
-# cleanup
-# -------
-cleanup ()
-{
-  local status=$?
-  if test -z "$DEBUG"; then
-     cd ..
-     rm -rf $$.dir
-  fi
-  exit $status
-}
-trap cleanup 0 1 2 13 15
-mkdir $$.dir
-cd $$.dir
-
-# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
-# ---------------------------------------------------------
-run ()
-{
-  # Expected exit status.
-  local sta_exp=$1
-  shift
-  # Expected output.
-  local out_exp=$1
-  shift
-  $prog "$@" - <input >out_eff
-  # Effective exit status.
-  local sta_eff=$?
-  # Effective output.
-  local out_eff=`cat out_eff`
-  if test $sta_eff -eq $sta_exp; then
-    if test "$out_eff" = "$out_exp"; then
-      echo "$me: PASS: $number"
-    else
-      echo "$me: FAIL: $number (expected output: $out_exp, effective: 
$out_eff)"
-      exit=false
-    fi
-  else
-    echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)"
-    exit=false
-  fi
-  number=`expr $number + 1`
-}
-
-
-cat >input <<EOF
-1+2*3
-EOF
-run 0 7
-run 0 7
-
-cat >input <<EOF
-(1+2) * 3
-EOF
-run 0 9
-
-$exit
diff --git a/examples/test b/examples/test
new file mode 100755
index 0000000..6da1667
--- /dev/null
+++ b/examples/test
@@ -0,0 +1,79 @@
+#! /bin/sh
+set -x
+# Copyright (C) 2005-2012 Free Software Foundation, Inc.
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+me=`basename $1 .test`
+
+# Number of the current test.
+number=1
+
+# Exit status of this script.
+exit=true
+
+# top_buiddir.
+cwd=`pwd`
+
+# The exercised program.
+prog=$cwd/examples/$me/$me
+
+# cleanup
+# -------
+cleanup ()
+{
+  local status=$?
+  if test -z "$DEBUG"; then
+     cd $cwd
+     rm -rf $$.dir
+  fi
+  exit $status
+}
+trap cleanup 0 1 2 13 15
+mkdir $$.dir
+cd $$.dir
+
+# run EXPECTED-EXIT-STATUS EXPECTED-OUTPUT [PARSER-OPTIONS]
+# ---------------------------------------------------------
+run ()
+{
+  # Expected exit status.
+  local sta_exp=$1
+  shift
+  # Expected output.
+  local out_exp=$1
+  shift
+  $prog "$@" - <input >out_eff
+  # Effective exit status.
+  local sta_eff=$?
+  # Effective output.
+  local out_eff=`cat out_eff`
+  if test $sta_eff -eq $sta_exp; then
+    if test "$out_eff" = "$out_exp"; then
+      echo "$me: PASS: $number"
+    else
+      echo "$me: FAIL: $number (expected output: $out_exp, effective: 
$out_eff)"
+      exit=false
+    fi
+  else
+    echo "$me: FAIL: $number (expected status: $sta_exp, effective: $sta_eff)"
+    exit=false
+  fi
+  number=`expr $number + 1`
+}
+
+# We have cd'd one level deeper.
+. "../$1"
+
+$exit
-- 
1.7.9





reply via email to

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