~ubuntu-branches/ubuntu/trusty/bash/trusty-security

« back to all changes in this revision

Viewing changes to tests/posix2.tests

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2014-03-03 22:52:05 UTC
  • mfrom: (1.3.5) (2.2.6 experimental)
  • Revision ID: package-import@ubuntu.com-20140303225205-87ltrt5kspeq0g1b
Tags: 4.3-1ubuntu1
* Merge with Debian; remaining changes:
  - skel.bashrc:
    - Run lesspipe.
    - Enable ls aliases.
    - Set options in ll alias to -alF.
    - Define an alert alias.
    - Enabled colored grep aliases.
  - etc.bash.bashrc:
    - Add sudo hint.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /bin/sh
 
2
# posix-2.sh - Simple identification tests for POSIX.2 features
 
3
# commonly missing or incorrectly implemented.
 
4
# Time-stamp: <96/04/10 16:43:48 gildea>
 
5
# By Stephen Gildea <gildea@x.org> March 1995
 
6
#
 
7
# Copyright (c) 1995  Stephen Gildea
 
8
# Permission is hereby granted to deal in this Software without restriction.
 
9
# THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND.
 
10
#
 
11
# MODIFIED BY chet@po.cwru.edu to make part of the bash test suite.
 
12
# last change: Wed Jun 19 12:24:24 EDT 1996
 
13
#
 
14
# some of the tests:
 
15
#
 
16
# shell functions (do we care?)
 
17
# var=${var:-val}
 
18
# unset
 
19
# set --
 
20
# IFS parsing
 
21
## not exiting with -e and failed "if", the way Ultrix does (Ultrix 4.2?)
 
22
# "$@" expands to zero arguments if passed zero arguments
 
23
# $SHELL -c 'echo $1' bad good
 
24
# test -x
 
25
# positional parameters greater than 9
 
26
# arithmetic expansion $(( ... ))
 
27
# getopts
 
28
 
 
29
# For some tests we must run a sub-shell; $TESTSHELL says what to use.
 
30
# If set, TESTSHELL must be an absolute pathname.
 
31
# For example, on HP-UX 9, /bin/posix/sh is the supposedly-compliant shell.
 
32
TESTSHELL=${THIS_SH:-$PWD/../bash}
 
33
 
 
34
# these tests create temp files with names $TMPDIR/conf*
 
35
: ${TMPDIR:=/tmp}
 
36
 
 
37
exitval=0
 
38
numtests=0
 
39
 
 
40
echo "Testing for POSIX.2 conformance"
 
41
 
 
42
newtest()
 
43
{
 
44
    numtests=$(($numtests + 1))
 
45
}
 
46
 
 
47
testfail()
 
48
{
 
49
    echo "$1 test failed"
 
50
    exitval=$(($exitval + 1))
 
51
}
 
52
 
 
53
newtest
 
54
empty=""
 
55
test "${empty:-ok}" = ok || testfail "empty var colon"
 
56
newtest
 
57
test "${empty-bad}" = "" || testfail "got \"${empty-bad}\": empty var nocolon"
 
58
newtest
 
59
test "${unsetvar-ok}" = ok || testfail "unset var"
 
60
newtest
 
61
unset empty
 
62
test "${empty-ok}" = ok || testfail "unset"
 
63
 
 
64
newtest
 
65
set -- -Z
 
66
test "x$1" = x-Z || testfail '\"set -- arg\"'
 
67
# this should empty the argument list
 
68
newtest
 
69
set --
 
70
test $# = 0 || testfail "still $# args: \"set --\""
 
71
 
 
72
# IFS parsing:
 
73
newtest
 
74
names=one/good/three
 
75
saved_ifs="$IFS"
 
76
IFS=/
 
77
set $names lose
 
78
test "$2" = good || testfail "got \"$2\": IFS parsing"
 
79
IFS="$saved_ifs"
 
80
 
 
81
# "$@" with 0 arguments should expand to 0 arguments
 
82
newtest
 
83
cat > $TMPDIR/conftest1 << EOF
 
84
$TMPDIR/conftest2 "\$@"
 
85
EOF
 
86
cat > $TMPDIR/conftest2 << "EOF"
 
87
#! /bin/sh
 
88
echo $#
 
89
EOF
 
90
chmod +x $TMPDIR/conftest1 $TMPDIR/conftest2
 
91
numargs=$($TESTSHELL $TMPDIR/conftest1)
 
92
if [ "$?" != 0 ]; then
 
93
    testfail 'running $@'
 
94
else
 
95
    test "$numargs" = 0 || testfail '"$@" got '"$numargs args: expansion w 0 args"
 
96
fi
 
97
rm -f $TMPDIR/conftest1 $TMPDIR/conftest2
 
98
 
 
99
newtest
 
100
val=$("$TESTSHELL" -c 'echo $1' csh good)
 
101
test "$val" = good || testfail "got \"$val\": sh -c"
 
102
 
 
103
newtest
 
104
# do these tests in a sub-shell because failure will exit
 
105
val=$("$TESTSHELL" -c 'echo ${10}' 0  1 2 3 4 5 6 7 8 9 ten 11 2> /dev/null)
 
106
test "$val" = ten || testfail "accessing more than 9 positional params"
 
107
 
 
108
a=abc_def_ghi
 
109
export a
 
110
newtest; val=`"$TESTSHELL" -c 'echo "${a%_*}"' 2> /dev/null`
 
111
test "$val" = abc_def || testfail "parameter % op"
 
112
newtest; val=`"$TESTSHELL" -c 'echo "${a%%_*}"' 2> /dev/null`
 
113
test "$val" = abc || testfail "parameter %% op"
 
114
newtest; val=`"$TESTSHELL" -c 'echo "${a#*_}"' 2> /dev/null`
 
115
test "$val" = def_ghi || testfail "parameter # op"
 
116
newtest; val=`"$TESTSHELL" -c 'echo "${a##*_}"' 2> /dev/null`
 
117
test "$val" = ghi || testfail "parameter ## op"
 
118
 
 
119
newtest
 
120
"$TESTSHELL" -c 'export a=value' 2> /dev/null || testfail "export with value"
 
121
 
 
122
newtest
 
123
a=5; test "$(( ($a+1)/2 ))" = 3 || testfail "arithmetic expansion"
 
124
 
 
125
# does "test" support the -x switch?
 
126
newtest
 
127
touch $TMPDIR/conftest
 
128
chmod -x $TMPDIR/conftest
 
129
test -x $TMPDIR/conftest && testfail "negative test -x"
 
130
chmod +x $TMPDIR/conftest
 
131
test -x $TMPDIR/conftest || testfail "positive test -x"
 
132
rm -f $TMPDIR/conftest
 
133
 
 
134
newtest
 
135
test "$OPTIND" = 1 || testfail "OPTIND initial value"
 
136
 
 
137
newtest
 
138
getopts a: store -a aoptval
 
139
if [ "$OPTIND" != 3 ] || [ "$store" != a ] || [ "$OPTARG" != aoptval ]; then
 
140
    testfail "getopts"
 
141
fi
 
142
 
 
143
# if I change the default quoting style for variable values, these
 
144
# next four must change
 
145
 
 
146
newtest
 
147
SQUOTE="'"
 
148
val1=$(set | sed -n 's:^SQUOTE=::p')
 
149
if [ "$val1" != "\'" ]; then
 
150
        testfail "variable quoting 1"
 
151
fi
 
152
 
 
153
newtest
 
154
VTILDE='~'
 
155
val1=$(set | sed -n 's:^VTILDE=::p')
 
156
if [ "$val1" != "'~'" ]; then
 
157
        testfail "variable quoting 2"
 
158
fi
 
159
 
 
160
newtest
 
161
VHASH=ab#cd
 
162
val1=$(set | sed -n 's:^VHASH=::p')
 
163
if [ "$val1" != "ab#cd" ]; then
 
164
        testfail "variable quoting 3"
 
165
fi
 
166
 
 
167
newtest
 
168
VHASH2=#abcd
 
169
val1=$(set | sed -n 's:^VHASH2=::p')
 
170
if [ "$val1" != "'#abcd'" ]; then
 
171
        testfail "variable quoting 4"
 
172
fi
 
173
 
 
174
if [ $exitval = 0 ]; then
 
175
    echo "All tests passed"
 
176
else
 
177
    echo "$exitval of $numtests tests failed"
 
178
fi
 
179
exit $exitval