The following commit has been merged in the master branch:
commit ed3dcf9c2b74c4a2a862a2dccf51d2c9ed3352e2
Author: Benjamin Drung <[email protected]>
Date:   Thu Oct 25 21:22:05 2012 +0200

    Add bashism test cases from Raphael Geissert.

diff --git a/test/bashisms/531327.sh b/test/bashisms/531327.sh
new file mode 100644
index 0000000..8dcc058
--- /dev/null
+++ b/test/bashisms/531327.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+foo() {}
+
+foo \
+source something
diff --git a/test/bashisms/535368.mk b/test/bashisms/535368.mk
new file mode 100644
index 0000000..adba007
--- /dev/null
+++ b/test/bashisms/535368.mk
@@ -0,0 +1,6 @@
+#!/usr/bin/make -f
+
+foo:
+       if [ "$$(< $(DEBIAN)/foo md5sum)" != "$$(cat $(DEBIAN)/foo.md5)" ] ; 
then \
+           echo moo; \
+       fi
diff --git a/test/bashisms/arith.sh b/test/bashisms/arith.sh
new file mode 100644
index 0000000..2cbe860
--- /dev/null
+++ b/test/bashisms/arith.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+metric=0
+echo $((metric=metric+1))
+
+m=0
+n=2
+echo $((n-m++)) # BASHISM
+echo $((++m))   # BASHISM
+echo $(( m-- )) # BASHISM
+echo $((--m))   # BASHISM
+
+foo_bar=0
+echo $((foo_bar++)) # BASHISM
+echo $((foo_bar=foo_bar*2))
+echo $((foo_bar*3/6))
+
+echo $((2*n++)) # BASHISM
+
+echo $(($n*n++)) # BASHISM
+
+echo $((3**2)) # BASHISM
diff --git a/test/bashisms/arith.sh.out b/test/bashisms/arith.sh.out
new file mode 100644
index 0000000..dae4b40
--- /dev/null
+++ b/test/bashisms/arith.sh.out
@@ -0,0 +1,16 @@
+possible bashism in bashisms/arith.sh line 7 ('$((n++))' should be '$n; 
$((n=n+1))'):
+echo $((n-m++)) # BASHISM
+possible bashism in bashisms/arith.sh line 8 ('$((++n))' should be 
'$((n=n+1))'):
+echo $((++m))   # BASHISM
+possible bashism in bashisms/arith.sh line 9 ('$((n--))' should be '$n; 
$((n=n-1))'):
+echo $(( m-- )) # BASHISM
+possible bashism in bashisms/arith.sh line 10 ('$((--n))' should be 
'$((n=n-1))'):
+echo $((--m))   # BASHISM
+possible bashism in bashisms/arith.sh line 13 ('$((n++))' should be '$n; 
$((n=n+1))'):
+echo $((foo_bar++)) # BASHISM
+possible bashism in bashisms/arith.sh line 17 ('$((n++))' should be '$n; 
$((n=n+1))'):
+echo $((2*n++)) # BASHISM
+possible bashism in bashisms/arith.sh line 19 ('$((n++))' should be '$n; 
$((n=n+1))'):
+echo $(($n*n++)) # BASHISM
+possible bashism in bashisms/arith.sh line 21 (exponentiation is not POSIX):
+echo $((3**2)) # BASHISM
diff --git a/test/bashisms/ash-setvar.sh b/test/bashisms/ash-setvar.sh
new file mode 100644
index 0000000..c0ae403
--- /dev/null
+++ b/test/bashisms/ash-setvar.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+setvar foo bar # BASHISM
+[ bar = "$foo" ]
diff --git a/test/bashisms/ash-setvar.sh.out b/test/bashisms/ash-setvar.sh.out
new file mode 100644
index 0000000..44de53d
--- /dev/null
+++ b/test/bashisms/ash-setvar.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/ash-setvar.sh line 3 (setvar 'foo' 'bar' should 
be eval \$'foo' 'bar'):
+setvar foo bar # BASHISM
diff --git a/test/bashisms/basic-bash-override.mk 
b/test/bashisms/basic-bash-override.mk
new file mode 100644
index 0000000..7904a5e
--- /dev/null
+++ b/test/bashisms/basic-bash-override.mk
@@ -0,0 +1,6 @@
+#!/usr/bin/make -f
+
+ override SHELL := bash
+
+test:
+       @echo -e foo
diff --git a/test/bashisms/basic-bash.mk b/test/bashisms/basic-bash.mk
new file mode 100644
index 0000000..7a16131
--- /dev/null
+++ b/test/bashisms/basic-bash.mk
@@ -0,0 +1,6 @@
+#!/usr/bin/make -f
+
+SHELL := bash
+
+test:
+       echo -e foo
diff --git a/test/bashisms/basic.mk b/test/bashisms/basic.mk
new file mode 100644
index 0000000..31d59a2
--- /dev/null
+++ b/test/bashisms/basic.mk
@@ -0,0 +1,21 @@
+#!/usr/bin/make -f
+
+# bug:
+overrideSHELL := bash
+
+test:
+       -echo -e "foo BASHISM"
+       @echo -e "bar BASHISM"
+       @-echo -e "bar BASHISM" && false
+       -@echo -e "bar BASHISM" && false
+       true
+
+dirs:
+source diff:
+source diff.gz::
+source file-stamp:
+caller %.so:
+       :
+
+foo: $(shell echo dir/BASHISM/{foo,bar})
+       :
diff --git a/test/bashisms/basic.mk.out b/test/bashisms/basic.mk.out
new file mode 100644
index 0000000..1fae795
--- /dev/null
+++ b/test/bashisms/basic.mk.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/basic.mk line 7 (echo -e):
+       -echo -e "foo BASHISM"
+possible bashism in bashisms/basic.mk line 8 (echo -e):
+       @echo -e "bar BASHISM"
+possible bashism in bashisms/basic.mk line 9 (echo -e):
+       @-echo -e "bar BASHISM" && false
+possible bashism in bashisms/basic.mk line 10 (echo -e):
+       -@echo -e "bar BASHISM" && false
+possible bashism in bashisms/basic.mk line 20 (brace expansion):
+foo: $(shell echo dir/BASHISM/{foo,bar})
diff --git a/test/bashisms/command.sh b/test/bashisms/command.sh
new file mode 100644
index 0000000..ae60c97
--- /dev/null
+++ b/test/bashisms/command.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+command test
+command -p test
+command -v test # BASHISM
+command -V test # BASHISM
diff --git a/test/bashisms/command.sh.out b/test/bashisms/command.sh.out
new file mode 100644
index 0000000..7a6b081
--- /dev/null
+++ b/test/bashisms/command.sh.out
@@ -0,0 +1,4 @@
+possible bashism in bashisms/command.sh line 5 ('command' with option other 
than -p):
+command -v test # BASHISM
+possible bashism in bashisms/command.sh line 6 ('command' with option other 
than -p):
+command -V test # BASHISM
diff --git a/test/bashisms/comments-parsing-fns.sh 
b/test/bashisms/comments-parsing-fns.sh
new file mode 100644
index 0000000..933caee
--- /dev/null
+++ b/test/bashisms/comments-parsing-fns.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo $# ; echo -e BASHISM
diff --git a/test/bashisms/comments-parsing-fns.sh.out 
b/test/bashisms/comments-parsing-fns.sh.out
new file mode 100644
index 0000000..e0a8f6b
--- /dev/null
+++ b/test/bashisms/comments-parsing-fns.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/comments-parsing-fns.sh line 3 (echo -e):
+echo $# ; echo -e BASHISM
diff --git a/test/bashisms/coproc.sh b/test/bashisms/coproc.sh
new file mode 100644
index 0000000..6d6edcc
--- /dev/null
+++ b/test/bashisms/coproc.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+coproc true # BASHISM
diff --git a/test/bashisms/coproc.sh.out b/test/bashisms/coproc.sh.out
new file mode 100644
index 0000000..63b4caa
--- /dev/null
+++ b/test/bashisms/coproc.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/coproc.sh line 3 (coproc):
+coproc true # BASHISM
diff --git a/test/bashisms/dynamic-length.sh b/test/bashisms/dynamic-length.sh
new file mode 100644
index 0000000..fa76729
--- /dev/null
+++ b/test/bashisms/dynamic-length.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+len=1
+f=foo
+
+echo "${f:1}" # BASHISM
+echo "${f:$len}" # BASHISM
+echo "${f:$len$len}" # BASHISM
+echo "${f:${len}}" # BASHISM
diff --git a/test/bashisms/dynamic-length.sh.out 
b/test/bashisms/dynamic-length.sh.out
new file mode 100644
index 0000000..ffd0b13
--- /dev/null
+++ b/test/bashisms/dynamic-length.sh.out
@@ -0,0 +1,8 @@
+possible bashism in bashisms/dynamic-length.sh line 6 (${foo:3[:1]}):
+echo "${f:1}" # BASHISM
+possible bashism in bashisms/dynamic-length.sh line 7 (${foo:3[:1]}):
+echo "${f:$len}" # BASHISM
+possible bashism in bashisms/dynamic-length.sh line 8 (${foo:3[:1]}):
+echo "${f:$len$len}" # BASHISM
+possible bashism in bashisms/dynamic-length.sh line 9 (${foo:3[:1]}):
+echo "${f:${len}}" # BASHISM
diff --git a/test/bashisms/fail2ban.sh b/test/bashisms/fail2ban.sh
new file mode 100644
index 0000000..1ab61f8
--- /dev/null
+++ b/test/bashisms/fail2ban.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+eval $_INITSCRIPT force-reload ${HIDEOUTPUT:+\>/dev/null 2\>&1}
diff --git a/test/bashisms/fps.sh b/test/bashisms/fps.sh
new file mode 100644
index 0000000..b1a619e
--- /dev/null
+++ b/test/bashisms/fps.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+echo -e "BASHISM" \
+    "something else \n"
+
+#exec ${loclibdir}/tkcon.tcl \
+#        -eval "source ${loclibdir}/console.tcl" \
+#        -slave "package require Tk; set argc $#; set argv [list $*]; \
+#        source ${loclibdir}/xcircuit.tcl"
diff --git a/test/bashisms/fps.sh.out b/test/bashisms/fps.sh.out
new file mode 100644
index 0000000..8f4b457
--- /dev/null
+++ b/test/bashisms/fps.sh.out
@@ -0,0 +1,3 @@
+possible bashism in bashisms/fps.sh line 4 (echo -e):
+echo -e "BASHISM" \
+    "something else \n"
diff --git a/test/bashisms/gettext.sh b/test/bashisms/gettext.sh
new file mode 100644
index 0000000..ebaec32
--- /dev/null
+++ b/test/bashisms/gettext.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+
+echo $"hello world -- BASHISM"
+
+echo "foo ' bar moo'$"
diff --git a/test/bashisms/gettext.sh.out b/test/bashisms/gettext.sh.out
new file mode 100644
index 0000000..a76578e
--- /dev/null
+++ b/test/bashisms/gettext.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/gettext.sh line 3 ($"foo" should be eval_gettext 
"foo"):
+echo $"hello world -- BASHISM"
diff --git a/test/bashisms/heredocs.sh b/test/bashisms/heredocs.sh
new file mode 100644
index 0000000..39dd076
--- /dev/null
+++ b/test/bashisms/heredocs.sh
@@ -0,0 +1,52 @@
+#!/bin/sh
+
+cat <<- FOO
+    foo
+       bar
+    moo
+FOO
+
+echo -e moo # BASHISM
+
+foo() {
+       cat <<- FOO
+       foo
+       bar
+       moo
+       FOO
+       echo -e BASHISM
+}
+
+bar() {
+       cat <<- FOO
+       foo
+       bar
+       moo
+    FOO
+    echo -e nothing wrong here
+FOO
+       echo -e BASHISM
+}
+
+
+moo() {
+       cat << FOO
+       foo
+       bar
+       moo
+    FOO
+    echo -e nothing wrong here
+       FOO
+       echo -e still nothing wrong here
+FOO
+       echo -e BASHISM
+}
+
+baz() {
+    cat << EOF1
+EOF1 
+    echo -e still inside the here doc
+EOF1 ; echo -e still inside...
+EOF1
+    echo -e BASHISM
+}
diff --git a/test/bashisms/heredocs.sh.out b/test/bashisms/heredocs.sh.out
new file mode 100644
index 0000000..15e3910
--- /dev/null
+++ b/test/bashisms/heredocs.sh.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/heredocs.sh line 9 (echo -e):
+echo -e moo # BASHISM
+possible bashism in bashisms/heredocs.sh line 17 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/heredocs.sh line 28 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/heredocs.sh line 42 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/heredocs.sh line 51 (echo -e):
+    echo -e BASHISM
diff --git a/test/bashisms/jobs.sh b/test/bashisms/jobs.sh
new file mode 100644
index 0000000..9e2df54
--- /dev/null
+++ b/test/bashisms/jobs.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+# POSIX+UP:
+jobs # BASHISM
+jobs -l # BASHISM
+jobs -p # BASHISM
+
+# Non-POSIX at all:
+
+sleep 10 &
+j=$(jobs -p) # possible BASHISM (context changes because of subshell)
+jobs -r # BASHISM
+jobs -s # BASHISM
+jobs -n # BASHISM
+jobs -x # BASHISM
\ No newline at end of file
diff --git a/test/bashisms/jobs.sh.out b/test/bashisms/jobs.sh.out
new file mode 100644
index 0000000..de8f8b3
--- /dev/null
+++ b/test/bashisms/jobs.sh.out
@@ -0,0 +1,16 @@
+possible bashism in bashisms/jobs.sh line 4 (jobs):
+jobs # BASHISM
+possible bashism in bashisms/jobs.sh line 5 (jobs):
+jobs -l # BASHISM
+possible bashism in bashisms/jobs.sh line 6 (jobs):
+jobs -p # BASHISM
+possible bashism in bashisms/jobs.sh line 11 (jobs):
+j=$(jobs -p) # possible BASHISM (context changes because of subshell)
+possible bashism in bashisms/jobs.sh line 12 (jobs):
+jobs -r # BASHISM
+possible bashism in bashisms/jobs.sh line 13 (jobs):
+jobs -s # BASHISM
+possible bashism in bashisms/jobs.sh line 14 (jobs):
+jobs -n # BASHISM
+possible bashism in bashisms/jobs.sh line 15 (jobs):
+jobs -x # BASHISM
diff --git a/test/bashisms/line-continuation.sh 
b/test/bashisms/line-continuation.sh
new file mode 100644
index 0000000..e83b6d4
--- /dev/null
+++ b/test/bashisms/line-continuation.sh
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+echo foo; \
+shopt something # BASHISM
+
+echo foo; echo \
+shopt something
+
+cat <<EOF \
+&>/dev/null #BASHISM
+bar
+moo
+EOF
+
+cat <<EOF
+foo\
+bar\
+moo
+EOF
diff --git a/test/bashisms/line-continuation.sh.out 
b/test/bashisms/line-continuation.sh.out
new file mode 100644
index 0000000..a243228
--- /dev/null
+++ b/test/bashisms/line-continuation.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/line-continuation.sh line 4 (shopt):
+echo foo; \
+shopt something # BASHISM
+possible bashism in bashisms/line-continuation.sh line 10 (should be >word 
2>&1):
+cat <<EOF \
+&>/dev/null #BASHISM
diff --git a/test/bashisms/negations.sh b/test/bashisms/negations.sh
new file mode 100644
index 0000000..8901357
--- /dev/null
+++ b/test/bashisms/negations.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+case "moo" in
+    [^f]oo) # BASHISM
+       echo hey
+       ;;
+    [!f]oo)
+       echo hey
+       ;;
+esac
+
diff --git a/test/bashisms/negations.sh.out b/test/bashisms/negations.sh.out
new file mode 100644
index 0000000..2a481c1
--- /dev/null
+++ b/test/bashisms/negations.sh.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/negations.sh line 4 ([^] should be [!]):
+    [^f]oo) # BASHISM
diff --git a/test/bashisms/printf.sh b/test/bashisms/printf.sh
new file mode 100644
index 0000000..59e0fcf
--- /dev/null
+++ b/test/bashisms/printf.sh
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+printf -v some_var "this is a BASHISM"
+
+printf "the use of %q is bad\n" "BASHISMS" >/dev/null
+
+printf "this is another BASHISM: %b" "\n" >/dev/null
diff --git a/test/bashisms/printf.sh.out b/test/bashisms/printf.sh.out
new file mode 100644
index 0000000..623c999
--- /dev/null
+++ b/test/bashisms/printf.sh.out
@@ -0,0 +1,6 @@
+possible bashism in bashisms/printf.sh line 3 ('printf -v var ...' should be 
var='$(printf ...)'):
+printf -v some_var "this is a BASHISM"
+possible bashism in bashisms/printf.sh line 5 (printf %q|%b):
+printf "the use of %q is bad\n" "BASHISMS" >/dev/null
+possible bashism in bashisms/printf.sh line 7 (printf %q|%b):
+printf "this is another BASHISM: %b" "\n" >/dev/null
diff --git a/test/bashisms/quoted-strings.sh b/test/bashisms/quoted-strings.sh
new file mode 100644
index 0000000..bf88104
--- /dev/null
+++ b/test/bashisms/quoted-strings.sh
@@ -0,0 +1,37 @@
+#!/bin/sh
+
+foo="
+echo -e nothing wrong here
+#crap"
+
+echo -e BASHISM
+
+foo="\
+#crap"
+
+echo -e BASHISM
+
+case foo in
+    *\'*)
+       echo -e BASHISM
+       ;;
+esac
+#'
+echo -e BASHISM
+
+case foo in
+    *\\"*")
+       echo -e BASHISM
+       ;;
+    *\\\"*)
+       echo -e BASHISM
+       ;;
+    *\"*)
+       echo -e BASHISM
+       ;;
+esac
+#"
+echo -e BASHISM
+
+foo='\'
+echo -e BASHISM
diff --git a/test/bashisms/quoted-strings.sh.out 
b/test/bashisms/quoted-strings.sh.out
new file mode 100644
index 0000000..a1fd9d7
--- /dev/null
+++ b/test/bashisms/quoted-strings.sh.out
@@ -0,0 +1,18 @@
+possible bashism in bashisms/quoted-strings.sh line 7 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 12 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 16 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 20 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 24 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 27 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 30 (echo -e):
+       echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 34 (echo -e):
+echo -e BASHISM
+possible bashism in bashisms/quoted-strings.sh line 37 (echo -e):
+echo -e BASHISM
diff --git a/test/bashisms/shell-vars.mk b/test/bashisms/shell-vars.mk
new file mode 100644
index 0000000..54b71cb
--- /dev/null
+++ b/test/bashisms/shell-vars.mk
@@ -0,0 +1,5 @@
+#!/usr/bin/make -f
+
+foo:
+       read foo bar | echo $$foo and $$bar
+       echo my pid: $$$$
diff --git a/test/bashisms/source.out b/test/bashisms/source.out
new file mode 100644
index 0000000..8584a6b
--- /dev/null
+++ b/test/bashisms/source.out
@@ -0,0 +1,2 @@
+possible bashism in bashisms/source line 2 (should be '.', not 'source'):
+source foo.sh
diff --git a/test/bashisms/special-case.sh b/test/bashisms/special-case.sh
new file mode 100644
index 0000000..5dd43e0
--- /dev/null
+++ b/test/bashisms/special-case.sh
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+case "foo" in
+    foo)
+       echo once
+       ;& # BASHISM
+    moo)
+       echo twice
+       ;;& # BASHISM
+    foo)
+       echo foo again
+       ;;
+esac
diff --git a/test/bashisms/special-case.sh.out 
b/test/bashisms/special-case.sh.out
new file mode 100644
index 0000000..2b0a5e3
--- /dev/null
+++ b/test/bashisms/special-case.sh.out
@@ -0,0 +1,4 @@
+possible bashism in bashisms/special-case.sh line 6 (;;& and ;& special case 
operators):
+       ;& # BASHISM
+possible bashism in bashisms/special-case.sh line 9 (;;& and ;& special case 
operators):
+       ;;& # BASHISM
diff --git a/test/bashisms/subshell-no-arith.sh 
b/test/bashisms/subshell-no-arith.sh
new file mode 100644
index 0000000..f3a5a29
--- /dev/null
+++ b/test/bashisms/subshell-no-arith.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+echo $((echo foo); echo bar)
diff --git a/test/bashisms/unknown-fns.sh b/test/bashisms/unknown-fns.sh
new file mode 100644
index 0000000..64d1b46
--- /dev/null
+++ b/test/bashisms/unknown-fns.sh
@@ -0,0 +1,297 @@
+#!/bin/sh
+
+################################################################################
+#                                                                              
#
+# Copyright (c) 2009 FUJITSU LIMITED                                           
#
+#                                                                              
#
+# 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 2 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, write to the Free Software                 
#
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA      
#
+#                                                                              
#
+# Author: Miao Xie <[email protected]>                                      
#
+#                                                                              
#
+################################################################################
+
+cd $LTPROOT/testcases/bin
+
+. ./cpuset_funcs.sh
+
+export TCID="cpuset01"
+export TST_TOTAL=97
+export TST_COUNT=1
+
+nr_cpus=$NR_CPUS
+nr_mems=$N_NODES
+
+cpus_all="$(seq -s, 0 $((nr_cpus-1)))"
+mems_all="$(seq -s, 0 $((nr_mems-1)))"
+
+exit_status=0
+
+cfile_name=
+
+# base_op_write_and_test <write_file_name> <write_string> <expect_string>
+base_op_write_and_test()
+{
+       local write_file="$1"
+       local write_string="$2"
+       local expect_string="$3"
+       local write_result=
+       local ret=0
+
+       mkdir -p "$(dirname $write_file)" || {
+               tst_brkm TFAIL "Failed to mkdir -p $(basename $write_file)"
+               return 1
+       }
+       [ "$write_string" = NULL ] && write_string=" "
+       
+       /bin/echo "$write_string" > "$write_file" 2> $CPUSET_TMP/stderr
+       ret=$?
+       write_result="$(cat "$write_file")"
+       
+       case "$expect_string" in
+       EMPTY)
+               test -z "$write_result" -a $ret = 0
+               ret=$?
+               ;;
+       WRITE_ERROR)
+               ret=$((!$ret))
+               ;;
+       *)
+               test "$expect_string" = "$write_result" -a $ret = 0
+               ret=$?
+               ;;
+       esac
+
+       if [ $ret -eq 0 ]; then
+               tst_resm TPASS "$cfile_name: Get the expected string"
+       else
+               tst_resm TFAIL "$cfile_name: Test result - $write_result 
Expected string - \"$expect_string\""
+       fi
+       return $ret
+}
+
+base_op_test()
+{
+       setup
+       if [ $? -ne 0 ]; then
+               exit_status=1
+       else
+               base_op_write_and_test "$@"
+               if [ $? -ne 0 ]; then
+                       exit_status=1
+               fi
+
+               cleanup
+               if [ $? -ne 0 ]; then
+                       exit_status=1
+               fi
+       fi
+       : $((TST_COUNT++)) #BASHISM
+}
+
+test_cpus()
+{
+       cfile_name="cpus"
+       while read cpus result
+       do
+               base_op_test "$CPUSET/1/cpus" "$cpus" "$result"
+       done <<- EOF
+               NULL                                    EMPTY
+               0                                       0
+               $nr_cpus                                WRITE_ERROR
+               $cpus_all                               0-$((nr_cpus-1))
+               ${cpus_all}$nr_cpus                     WRITE_ERROR
+               0,0                                     0
+               0-0                                     0
+               0-$((nr_cpus-1))                        0-$((nr_cpus-1))
+               -1                                      WRITE_ERROR
+               0-$nr_cpus                              WRITE_ERROR
+               0-                                      WRITE_ERROR
+               0--$((nr_cpus-1))                       WRITE_ERROR
+               0,1-$((nr_cpus-2)),$((nr_cpus-1))       0-$((nr_cpus-1))
+               0,1-$((nr_cpus-2)),                     0-$((nr_cpus-2))
+               0AAA                                    WRITE_ERROR
+               AAA                                     WRITE_ERROR
+       EOF
+       # while read cpus result
+}
+
+test_mems()
+{
+       cfile_name="mems"
+       while read mems result
+       do
+               base_op_test "$CPUSET/1/mems" "$mems" "$result"
+       done <<- EOF
+               NULL                                    EMPTY
+               0                                       0
+               $nr_mems                                WRITE_ERROR
+               $mems_all                               0-$((nr_mems-1))
+               ${mems_all}$nr_mems                     WRITE_ERROR
+               0,0                                     0
+               0-0                                     0
+               0-$((nr_mems-1))                        0-$((nr_mems-1))
+               -1                                      WRITE_ERROR
+               0-$nr_mems                              WRITE_ERROR
+               0-                                      WRITE_ERROR
+               0--$((nr_mems-1))                       WRITE_ERROR
+               0,1-$((nr_mems-2)),$((nr_mems-1))       0-$((nr_mems-1))
+               0,1-$((nr_mems-2)),                     0-$((nr_mems-2))
+               0AAA                                    WRITE_ERROR
+               AAA                                     WRITE_ERROR
+       EOF
+       # while read mems result
+}
+
+test_flags()
+{
+       for filename in cpu_exclusive mem_exclusive mem_hardwall \
+                       memory_migrate memory_spread_page memory_spread_slab \
+                       sched_load_balance memory_pressure_enabled
+       do
+               cfile_name="$filename"
+               while read flags result
+               do
+                       base_op_test "$CPUSET/$filename" "$flags" "$result"
+               done <<- EOF
+                       NULL    0
+                       0       0
+                       1       1
+                       -1      WRITE_ERROR
+                       A       WRITE_ERROR
+                       2       1
+               EOF
+               # while read flags, result
+       done # for filename in flagfiles
+}
+
+test_domain()
+{
+       cfile_name="sched_relax_domain_level"
+       while read domain_level result
+       do
+               base_op_test "$CPUSET/sched_relax_domain_level" "$domain_level" 
"$result"
+       done <<- EOF
+               NULL    0
+               0       0
+               1       1
+               2       2
+               3       3
+               4       4
+               5       5
+               6       WRITE_ERROR
+               -1      -1
+               -2      WRITE_ERROR
+               A       WRITE_ERROR
+       EOF
+       # while read domain_level result
+}
+
+# attach_task_test <cpus> <mems> <expect>
+attach_task_test()
+{
+       local cpus=$1
+       local mems=$2
+       local expect=$3
+
+       local pid=
+       local ret=
+
+       setup
+       if [ $? -ne 0 ]; then
+               exit_status=1
+               cleanup
+               ((TST_COUNT++)) #BASHISM
+               return
+       fi
+
+       # create sub cpuset
+       mkdir "$CPUSET/sub_cpuset" > /dev/null
+       if [ $? -ne 0 ]; then
+               exit_status=1
+               cleanup
+               ((TST_COUNT++)) # BASHISM
+               return
+       fi
+
+       if [ "$cpus" != "NULL" ]; then
+               echo $cpus > "$CPUSET/sub_cpuset/cpus"
+       fi
+       if [ "$mems" != "NULL" ]; then
+               echo $mems > "$CPUSET/sub_cpuset/mems"
+       fi
+
+       cat /dev/zero > /dev/null &
+       pid=$!
+
+       # attach task into the cpuset group
+       echo $pid > "$CPUSET/sub_cpuset/tasks" 2> /dev/null
+       if [ $? -eq $expect ]; then
+               tst_resm TPASS "Attaching Task Test successed!!"
+       else
+               tst_resm TFAIL "Attaching Task Test failed!! cpus - \"$cpus\", 
mems - \"$mems\", Expect - \"$expect\", Fact - \"$ret\". (0 - Attach Success, 1 
- Attach Fail)"
+               exit_status=1
+       fi
+
+       /bin/kill $pid &> /dev/null # BASHISM
+       cleanup
+       if [ $? -ne 0 ]; then
+               exit_status=1
+       fi
+       ((TST_COUNT++)) # BASHISM
+}
+
+
+test_attach_task()
+{
+       cfile_name="tasks"
+       while read cpus mems expect
+       do
+               attach_task_test "$cpus" "$mems" "$expect"
+       done <<- EOF
+               0       NULL    1
+               0       0       0
+               NULL    0       1
+       EOF
+       # while read cpus mems expect
+}
+
+test_readonly_cfiles()
+{
+       for filename in cpus mems memory_pressure
+       do
+               cfile_name="$filename(READONLY)"
+               base_op_test "$CPUSET/$filename" "0" "WRITE_ERROR"
+       done # for filename in readonly cfiles
+}
+
+# Case 1-3
+test_readonly_cfiles
+
+# Case 4-19
+test_cpus
+
+# Case 20-35
+test_mems
+
+# Case 36-83
+test_flags
+
+# Case 84-94
+test_domain
+
+# Case 95-97
+test_attach_task
+
+exit $exit_status
diff --git a/test/bashisms/unknown-fns.sh.out b/test/bashisms/unknown-fns.sh.out
new file mode 100644
index 0000000..82f0896
--- /dev/null
+++ b/test/bashisms/unknown-fns.sh.out
@@ -0,0 +1,10 @@
+possible bashism in bashisms/unknown-fns.sh line 100 ('$((n++))' should be 
'$n; $((n=n+1))'):
+       : $((TST_COUNT++)) #BASHISM
+possible bashism in bashisms/unknown-fns.sh line 215 ('((' should be '$(('):
+               ((TST_COUNT++)) #BASHISM
+possible bashism in bashisms/unknown-fns.sh line 224 ('((' should be '$(('):
+               ((TST_COUNT++)) # BASHISM
+possible bashism in bashisms/unknown-fns.sh line 247 (should be >word 2>&1):
+       /bin/kill $pid &> /dev/null # BASHISM
+possible bashism in bashisms/unknown-fns.sh line 252 ('((' should be '$(('):
+       ((TST_COUNT++)) # BASHISM
diff --git a/test/test_checkbashisms b/test/test_checkbashisms
index ded8a72..e510f08 100755
--- a/test/test_checkbashisms
+++ b/test/test_checkbashisms
@@ -19,15 +19,116 @@ WORKDIR="$(readlink -f "${0%/*}")"
 
 . "${0%/*}/shunit2-helper-functions.sh"
 
+clean() {
+    cd "$WORKDIR"
+    runCommand "$1" "" "" 0
+}
+
 found() {
     cd "$WORKDIR"
     runCommand "$1" "" "$2" 1
 }
 
-testSource() {
+test_531327() {
+    clean "bashisms/531327.sh"
+}
+
+test_535368() {
+    clean "-f bashisms/535368.mk"
+}
+
+test_arith() {
+    found "bashisms/arith.sh" "$(cat bashisms/arith.sh.out)"
+}
+
+test_ash_setvar() {
+    found "bashisms/ash-setvar.sh" "$(cat bashisms/ash-setvar.sh.out)"
+}
+
+test_basic() {
+    found "-f bashisms/basic.mk" "$(cat bashisms/basic.mk.out)"
+}
+
+test_basic_bash() {
+    clean "-f bashisms/basic-bash.mk"
+}
+
+test_basic_bash_override() {
+    clean "-f bashisms/basic-bash-override.mk"
+}
+
+test_command() {
+    found "bashisms/command.sh" "$(cat bashisms/command.sh.out)"
+}
+
+test_comments_parsing_fns() {
+    found "bashisms/comments-parsing-fns.sh" "$(cat 
bashisms/comments-parsing-fns.sh.out)"
+}
+
+test_coproc() {
+    found "bashisms/coproc.sh" "$(cat bashisms/coproc.sh.out)"
+}
+
+test_dynamic_length() {
+    found "bashisms/dynamic-length.sh" "$(cat bashisms/dynamic-length.sh.out)"
+}
+
+test_fail2ban() {
+    clean "bashisms/fail2ban.sh"
+}
+
+test_fps() {
+    found "bashisms/fps.sh" "$(cat bashisms/fps.sh.out)"
+}
+
+test_gettext() {
+    found "bashisms/gettext.sh" "$(cat bashisms/gettext.sh.out)"
+}
+
+test_heredocs() {
+    found "bashisms/heredocs.sh" "$(cat bashisms/heredocs.sh.out)"
+}
+
+test_jobs() {
+    found "bashisms/jobs.sh" "$(cat bashisms/jobs.sh.out)"
+}
+
+test_line_continuation() {
+    found "bashisms/line-continuation.sh" "$(cat 
bashisms/line-continuation.sh.out)"
+}
+
+test_negations() {
+    found "bashisms/negations.sh" "$(cat bashisms/negations.sh.out)"
+}
+
+test_printf() {
+    found "bashisms/printf.sh" "$(cat bashisms/printf.sh.out)"
+}
+
+test_quoted_strings() {
+    found "bashisms/quoted-strings.sh" "$(cat bashisms/quoted-strings.sh.out)"
+}
+
+test_shell_vars() {
+    clean "-f bashisms/shell-vars.mk"
+}
+
+test_source() {
     local result="possible bashism in bashisms/source line 2 (should be '.', 
not 'source'):
 source foo.sh"
     found "bashisms/source" "$result"
 }
 
+test_special_case() {
+    found "bashisms/special-case.sh" "$(cat bashisms/special-case.sh.out)"
+}
+
+test_subshell_no_arith() {
+    clean "bashisms/subshell-no-arith.sh"
+}
+
+test_unknown_fns() {
+    found "bashisms/unknown-fns.sh" "$(cat bashisms/unknown-fns.sh.out)"
+}
+
 . shunit2

-- 
Git repository for devscripts

_______________________________________________
devscripts-devel mailing list
[email protected]
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/devscripts-devel

Reply via email to