[PATCH 1/1] add tests

Buck Evan <[email protected]>
Newsgroups org.kernel.vger.dash
Message-ID <[email protected]>
---
 .gitignore                                    |  3 ++
 test                                          | 33 ++++++++++++++++
 .../async-subshell-unignore-signal/result.txt |  4 ++
 tests/async-subshell-unignore-signal/test.sh  | 38 +++++++++++++++++++
 tests/backslash-outside-quotes/result.txt     |  1 +
 tests/backslash-outside-quotes/test.sh        |  4 ++
 tests/dollar-dash-expansion/result.txt        |  3 ++
 tests/dollar-dash-expansion/test.sh           |  7 ++++
 tests/echo-backslash-c-spillage/result.txt    |  2 +
 tests/echo-backslash-c-spillage/test.sh       |  4 ++
 tests/eval-empty/result.txt                   |  1 +
 tests/eval-empty/test.sh                      |  7 ++++
 tests/expmeta-nonleading-slash/result.txt     |  1 +
 tests/expmeta-nonleading-slash/test.sh        |  2 +
 tests/expmeta-slash-treatment/result.txt      |  1 +
 tests/expmeta-slash-treatment/test.sh         |  2 +
 tests/ifs-after-heredoc/result.txt            |  2 +
 tests/ifs-after-heredoc/test.sh               |  7 ++++
 tests/naked-backslash-leakage/result.txt      |  1 +
 tests/naked-backslash-leakage/test.sh         |  5 +++
 tests/no-space/result.txt                     |  2 +
 tests/no-space/test.sh                        |  2 +
 22 files changed, 132 insertions(+)
 create mode 100755 test
 create mode 100644 tests/async-subshell-unignore-signal/result.txt
 create mode 100755 tests/async-subshell-unignore-signal/test.sh
 create mode 100644 tests/backslash-outside-quotes/result.txt
 create mode 100755 tests/backslash-outside-quotes/test.sh
 create mode 100644 tests/dollar-dash-expansion/result.txt
 create mode 100755 tests/dollar-dash-expansion/test.sh
 create mode 100644 tests/echo-backslash-c-spillage/result.txt
 create mode 100755 tests/echo-backslash-c-spillage/test.sh
 create mode 100644 tests/eval-empty/result.txt
 create mode 100755 tests/eval-empty/test.sh
 create mode 100644 tests/expmeta-nonleading-slash/result.txt
 create mode 100755 tests/expmeta-nonleading-slash/test.sh
 create mode 100644 tests/expmeta-slash-treatment/result.txt
 create mode 100755 tests/expmeta-slash-treatment/test.sh
 create mode 100644 tests/ifs-after-heredoc/result.txt
 create mode 100755 tests/ifs-after-heredoc/test.sh
 create mode 100644 tests/naked-backslash-leakage/result.txt
 create mode 100755 tests/naked-backslash-leakage/test.sh
 create mode 100644 tests/no-space/result.txt
 create mode 100755 tests/no-space/test.sh

diff --git a/.gitignore b/.gitignore
index e349901..1827ca2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -40,3 +40,6 @@ Makefile
 .Spotlight*
 .Trash*
 *[Tt]humbs.db
+
+# vim
+.*.sw[a-z]
diff --git a/test b/test
new file mode 100755
index 0000000..8d214f5
--- /dev/null
+++ b/test
@@ -0,0 +1,33 @@
+#!/bin/sh
+set -eu
+export PATH="$PWD/src:$PATH"
+if [ "$#" -eq 0 ]; then
+  # default arguments: all tests
+  set -- ./tests/*
+fi
+
+success=true
+for test in "$@"; do
+  printf "%-40s " "$test"
+  if "$test/test.sh" >"$test/result.txt" 2>&1; then
+    :
+  else
+    exit="$?"
+    echo "(exit: $exit)" >>"$test/result.txt"
+  fi
+  if git diff --quiet --exit-code "$test/result.txt"; then
+    echo PASS
+  else
+    echo FAIL
+    git diff "$test/result.txt"
+    echo
+    success=false
+  fi
+done
+
+if "$success"; then
+  echo PASS
+else
+  echo FAIL
+  exit 1
+fi
diff --git a/tests/async-subshell-unignore-signal/result.txt b/tests/async-subshell-unignore-signal/result.txt
new file mode 100644
index 0000000..e96c3ad
--- /dev/null
+++ b/tests/async-subshell-unignore-signal/result.txt
@@ -0,0 +1,4 @@
+Scenario 0: "set -i" makes a subshell un-ignore SIGINT.
+Scenario 1: resetting SIGINT handler.
+Scenario 2: ignoring SIGINT.
+OK
diff --git a/tests/async-subshell-unignore-signal/test.sh b/tests/async-subshell-unignore-signal/test.sh
new file mode 100755
index 0000000..35ae9aa
--- /dev/null
+++ b/tests/async-subshell-unignore-signal/test.sh
@@ -0,0 +1,38 @@
+#!/bin/sh
+shell=src/dash
+
+set -e
+
+SubshellWith() {
+        parent_pid=$(setsid "$shell" -c "( $1; sleep 99 ) </dev/null >/dev/null 2>&1 & echo \$\$")
+        sleep 1
+        subshell_pid=$(ps -o pid= -$parent_pid | tail -n 1)
+}
+
+trap 'kill -TERM -$parent_pid 2>/dev//null ||:' EXIT # Tear down after a failure.
+
+echo Scenario 0: '"set -i"' makes a subshell un-ignore SIGINT.
+SubshellWith 'set -i'
+kill -INT $subshell_pid
+if ps -p $subshell_pid | grep -q sleep; then
+  echo FAIL
+fi
+kill -TERM -$parent_pid 2>/dev//null ||: # Tear down.
+
+echo Scenario 1: resetting SIGINT handler.
+SubshellWith 'trap - INT'
+kill -INT -$parent_pid # kill the whole process group since that's the my use case
+if ps -p $subshell_pid | grep -q sleep; then
+  echo FAIL
+fi
+kill -TERM -$parent_pid 2>/dev//null ||: # Tear down.
+
+echo Scenario 2: ignoring SIGINT.
+SubshellWith 'trap "" INT'
+kill -INT $subshell_pid
+if ! ps -p $subshell_pid | grep -q sleep; then
+  echo FAIL
+fi
+kill -TERM -$parent_pid 2>/dev//null ||: # Tear down.
+
+echo OK
diff --git a/tests/backslash-outside-quotes/result.txt b/tests/backslash-outside-quotes/result.txt
new file mode 100644
index 0000000..030ebde
--- /dev/null
+++ b/tests/backslash-outside-quotes/result.txt
@@ -0,0 +1 @@
+/b/c/
diff --git a/tests/backslash-outside-quotes/test.sh b/tests/backslash-outside-quotes/test.sh
new file mode 100755
index 0000000..4b3a476
--- /dev/null
+++ b/tests/backslash-outside-quotes/test.sh
@@ -0,0 +1,4 @@
+#!./src/dash
+a=/b/c/*
+b=\\
+echo ${a%$b*}
diff --git a/tests/dollar-dash-expansion/result.txt b/tests/dollar-dash-expansion/result.txt
new file mode 100644
index 0000000..dfafdb2
--- /dev/null
+++ b/tests/dollar-dash-expansion/result.txt
@@ -0,0 +1,3 @@
+0: the options are e
+1: the options are fe
+2: the options are ufe
diff --git a/tests/dollar-dash-expansion/test.sh b/tests/dollar-dash-expansion/test.sh
new file mode 100755
index 0000000..ba72a12
--- /dev/null
+++ b/tests/dollar-dash-expansion/test.sh
@@ -0,0 +1,7 @@
+#!./src/dash
+set -e
+echo "0: the options are $-"
+set -fo debug
+echo "1: the options are $-"
+set +o debug -uo nolog
+echo "2: the options are $-"
diff --git a/tests/echo-backslash-c-spillage/result.txt b/tests/echo-backslash-c-spillage/result.txt
new file mode 100644
index 0000000..ecb747d
--- /dev/null
+++ b/tests/echo-backslash-c-spillage/result.txt
@@ -0,0 +1,2 @@
+test\ test
+test\ test
diff --git a/tests/echo-backslash-c-spillage/test.sh b/tests/echo-backslash-c-spillage/test.sh
new file mode 100755
index 0000000..f6f4886
--- /dev/null
+++ b/tests/echo-backslash-c-spillage/test.sh
@@ -0,0 +1,4 @@
+#!./src/dash
+echo test\\ test
+echo '\c'
+echo test\\ test
diff --git a/tests/eval-empty/result.txt b/tests/eval-empty/result.txt
new file mode 100644
index 0000000..d86bac9
--- /dev/null
+++ b/tests/eval-empty/result.txt
@@ -0,0 +1 @@
+OK
diff --git a/tests/eval-empty/test.sh b/tests/eval-empty/test.sh
new file mode 100755
index 0000000..d1d1772
--- /dev/null
+++ b/tests/eval-empty/test.sh
@@ -0,0 +1,7 @@
+#!./src/dash
+false
+if eval ''; then
+  echo OK
+else
+  echo not ok
+fi
diff --git a/tests/expmeta-nonleading-slash/result.txt b/tests/expmeta-nonleading-slash/result.txt
new file mode 100644
index 0000000..b555872
--- /dev/null
+++ b/tests/expmeta-nonleading-slash/result.txt
@@ -0,0 +1 @@
+/dev/null
diff --git a/tests/expmeta-nonleading-slash/test.sh b/tests/expmeta-nonleading-slash/test.sh
new file mode 100755
index 0000000..711e1a7
--- /dev/null
+++ b/tests/expmeta-nonleading-slash/test.sh
@@ -0,0 +1,2 @@
+#!./src/dash
+echo /*"/null"
diff --git a/tests/expmeta-slash-treatment/result.txt b/tests/expmeta-slash-treatment/result.txt
new file mode 100644
index 0000000..cd3d018
--- /dev/null
+++ b/tests/expmeta-slash-treatment/result.txt
@@ -0,0 +1 @@
+/root
diff --git a/tests/expmeta-slash-treatment/test.sh b/tests/expmeta-slash-treatment/test.sh
new file mode 100755
index 0000000..735f69b
--- /dev/null
+++ b/tests/expmeta-slash-treatment/test.sh
@@ -0,0 +1,2 @@
+#!./src/dash
+echo "/"root*
diff --git a/tests/ifs-after-heredoc/result.txt b/tests/ifs-after-heredoc/result.txt
new file mode 100644
index 0000000..3b7172a
--- /dev/null
+++ b/tests/ifs-after-heredoc/result.txt
@@ -0,0 +1,2 @@
+abcdefghijklmnopqrstuvwxyz
+OK
diff --git a/tests/ifs-after-heredoc/test.sh b/tests/ifs-after-heredoc/test.sh
new file mode 100755
index 0000000..2f0a96e
--- /dev/null
+++ b/tests/ifs-after-heredoc/test.sh
@@ -0,0 +1,7 @@
+#!./src/dash
+dash -c '
+cat <<EOF
+$@
+EOF
+echo OK
+' - abcdefghijklmnopqrstuvwxyz
diff --git a/tests/naked-backslash-leakage/result.txt b/tests/naked-backslash-leakage/result.txt
new file mode 100644
index 0000000..dcb7930
--- /dev/null
+++ b/tests/naked-backslash-leakage/result.txt
@@ -0,0 +1 @@
+<bc>
diff --git a/tests/naked-backslash-leakage/test.sh b/tests/naked-backslash-leakage/test.sh
new file mode 100755
index 0000000..66df7bd
--- /dev/null
+++ b/tests/naked-backslash-leakage/test.sh
@@ -0,0 +1,5 @@
+#!./src/dash
+a="\\*bc"
+b="\\"
+c="*"
+echo "<${a##$b"$c"}>"
diff --git a/tests/no-space/result.txt b/tests/no-space/result.txt
new file mode 100644
index 0000000..e714e38
--- /dev/null
+++ b/tests/no-space/result.txt
@@ -0,0 +1,2 @@
+./tests/no-space/test.sh: 2: echo: echo: I/O error
+(exit: 1)
diff --git a/tests/no-space/test.sh b/tests/no-space/test.sh
new file mode 100755
index 0000000..dc9cb42
--- /dev/null
+++ b/tests/no-space/test.sh
@@ -0,0 +1,2 @@
+#!./src/dash
+echo foo >>/dev/full
-- 
2.42.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.