1 #!/bin/sh -e |
1 #!/bin/sh -e |
2 |
2 |
3 export LANG=C |
3 LANG="C"; export LANG |
4 export LC_CTYPE="C" |
4 LC_CTYPE="C"; export LC_CTYPE |
5 export LC_NUMERIC="C" |
5 LC_NUMERIC="C"; export LC_NUMERIC |
6 export LC_TIME="C" |
6 LC_TIME="C"; export LC_TIME |
7 export LC_COLLATE="C" |
7 LC_COLLATE="C"; export LC_COLLATE |
8 export LC_MONETARY="C" |
8 LC_MONETARY="C"; export LC_MONETARY |
9 export LC_MESSAGES="C" |
9 LC_MESSAGES="C"; export LC_MESSAGES |
10 export LC_PAPER="C" |
10 LC_PAPER="C"; export LC_PAPER |
11 export LC_NAME="C" |
11 LC_NAME="C"; export LC_NAME |
12 export LC_ADDRESS="C" |
12 LC_ADDRESS="C"; export LC_ADDRESS |
13 export LC_TELEPHONE="C" |
13 LC_TELEPHONE="C"; export LC_TELEPHONE |
14 export LC_MEASUREMENT="C" |
14 LC_MEASUREMENT="C"; export LC_MEASUREMENT |
15 export LC_IDENTIFICATION="C" |
15 LC_IDENTIFICATION="C"; export LC_IDENTIFICATION |
16 export LC_ALL="" |
16 LC_ALL=""; export LC_ALL |
17 export HGEDITOR=true |
17 TZ=GMT; export TZ |
18 export HGMERGE=true |
18 HGEDITOR=true; export HGEDITOR |
19 export HGUSER=test |
19 HGMERGE=true; export HGMERGE |
|
20 HGUSER="test"; export HGUSER |
20 |
21 |
21 umask 022 |
22 umask 022 |
22 |
23 |
|
24 if [ "$[1+1]" = "2" ]; then |
|
25 use_arithmetic=true |
|
26 else |
|
27 use_arithmetic=false |
|
28 fi |
|
29 |
23 tests=0 |
30 tests=0 |
24 failed=0 |
31 failed=0 |
25 H=$PWD |
32 |
|
33 HGTMP="" |
|
34 cleanup_exit() { |
|
35 rm -rf "$HGTMP" |
|
36 exit $1 |
|
37 } |
|
38 |
|
39 # Remove temporary files even if we get interrupted |
|
40 trap "cleanup_exit 255" TERM KILL INT QUIT ABRT |
|
41 |
|
42 HGTMP="${TMPDIR-/tmp}/hgtests.$RANDOM.$RANDOM.$RANDOM.$$" |
|
43 (umask 077 && mkdir "$HGTMP") || { |
|
44 echo "Could not create temporary directory! Exiting." 1>&2 |
|
45 exit 1 |
|
46 } |
|
47 |
|
48 TESTDIR="$PWD" |
26 |
49 |
27 if [ -d /usr/lib64 ]; then |
50 if [ -d /usr/lib64 ]; then |
28 lib=lib64 |
51 lib=lib64 |
29 else |
52 else |
30 lib=lib |
53 lib=lib |
31 fi |
54 fi |
32 |
55 |
33 TESTPATH=$PWD/install/bin |
56 INST="$HGTMP/install" |
34 export PATH=$TESTPATH:$PATH |
57 cd .. |
35 export PYTHONPATH=$PWD/install/$lib/python |
58 if ${PYTHON:-python} setup.py install --home="$INST" > tests/install.err 2>&1 |
|
59 then |
|
60 rm tests/install.err |
|
61 mv "$INST/bin/hg" "$INST/bin/hg.real" |
|
62 ( |
|
63 echo '#!/bin/sh' |
|
64 echo 'echo "+ hg $@"' |
|
65 echo 'exec hg.real "$@"' |
|
66 ) > "$INST/bin/hg" |
|
67 chmod 755 "$INST/bin/hg" |
|
68 else |
|
69 cat tests/install.err |
|
70 cleanup_exit 1 |
|
71 fi |
|
72 cd "$TESTDIR" |
36 |
73 |
37 rm -rf install |
74 PATH="$INST/bin:$PATH"; export PATH |
38 cd .. |
75 PYTHONPATH="$INST/$lib/python"; export PYTHONPATH |
39 ${PYTHON:-python} setup.py install --home=tests/install > tests/install.err |
|
40 if [ $? != 0 ] ; then |
|
41 cat tests/install.err |
|
42 fi |
|
43 cd $H |
|
44 rm install.err |
|
45 |
76 |
46 function run_one |
|
47 { |
|
48 rm -f $1.err |
|
49 export TZ=GMT |
|
50 D=`mktemp -d ${TMP-/tmp}/tmp.XXXXXX` |
|
51 if [ "$D" = "" ] ; then |
|
52 echo mktemp failed! |
|
53 fi |
|
54 |
77 |
55 cd $D |
78 run_one() { |
|
79 rm -f "$1.err" |
|
80 |
|
81 mkdir "$HGTMP/$1" |
|
82 cd "$HGTMP/$1" |
56 fail=0 |
83 fail=0 |
57 export HOME=$D |
84 HOME="$HGTMP/$1"; export HOME |
|
85 OUT="$HGTMP/$1.out" |
|
86 OUTOK="$TESTDIR/$1.out" |
|
87 ERR="$TESTDIR/$1.err" |
58 |
88 |
59 if ! $H/$1 > .out 2>&1 ; then |
89 if "$TESTDIR/$1" > "$OUT" 2>&1; then |
60 echo $1 failed with error code $? |
90 : no error |
|
91 else |
|
92 echo "$1 failed with error code $?" |
61 fail=1 |
93 fail=1 |
62 fi |
94 fi |
63 |
95 |
64 if [ -s .out -a ! -r $H/$1.out ] ; then |
96 if [ -s "$OUT" -a ! -s "$OUTOK" ] ; then |
65 echo $1 generated unexpected output: |
97 cp "$OUT" "$ERR" |
66 cat .out |
98 echo |
67 cp .out $H/$1.err |
99 echo "$1 generated unexpected output:" |
|
100 cat "$ERR" |
68 fail=1 |
101 fail=1 |
69 elif [ -r $H/$1.out ] && ! diff -u $H/$1.out .out > /dev/null ; then |
102 elif [ -r "$OUTOK" ]; then |
70 echo $1 output changed: |
103 if diff -u "$OUTOK" "$OUT" > /dev/null; then |
71 diff -u $H/$1.out .out && true |
104 : no differences |
72 cp .out $H/$1.err |
105 else |
73 fail=1 |
106 cp "$OUT" "$ERR" |
|
107 echo |
|
108 echo "$1 output changed:" |
|
109 diff -u "$OUTOK" "$ERR" || true |
|
110 fail=1 |
|
111 fi |
74 fi |
112 fi |
75 |
113 |
76 cd $H |
114 cd "$TESTDIR" |
77 rm -r $D |
115 rm -f "$HGTMP/$1.out" |
|
116 rm -rf "$HGTMP/$1" |
78 return $fail |
117 return $fail |
79 } |
118 } |
80 |
119 |
81 TESTS=$@ |
120 TESTS="$@" |
82 if [ "$TESTS" = "" ] ; then |
121 if [ -z "$TESTS" ] ; then |
83 TESTS=`ls test-* | grep -Ev "\.|~"` |
122 TESTS=`ls test-* | grep -Ev "\.|~"` |
84 fi |
123 fi |
85 |
124 |
86 for f in $TESTS ; do |
125 for f in $TESTS ; do |
87 echo -n "." |
126 echo -n "." |
88 if ! run_one $f ; then |
127 if $use_arithmetic; then |
89 failed=$[$failed + 1] |
128 run_one $f || failed=$[$failed + 1] |
|
129 tests=$[$tests + 1] |
|
130 else |
|
131 run_one $f || failed=1 |
90 fi |
132 fi |
91 tests=$[$tests + 1] |
|
92 done |
133 done |
93 |
134 |
94 rm -rf install |
135 if $use_arithmetic; then |
|
136 echo |
|
137 echo "Ran $tests tests, $failed failed." |
95 |
138 |
96 echo |
139 if [ $failed -gt 0 ] ; then |
97 echo Ran $tests tests, $failed failed |
140 cleanup_exit 1 |
98 |
141 fi |
99 if [ $failed -gt 0 ] ; then |
142 else |
100 exit 1 |
143 echo |
|
144 if [ "$failed" = "1" ] ; then |
|
145 echo "Ran tests, at least one failed." |
|
146 cleanup_exit 1 |
|
147 else |
|
148 echo "Ran tests, none failed." |
|
149 fi |
101 fi |
150 fi |
102 |
151 cleanup_exit 0 |