blob: 708fce55aace4271672e2619715d6768660285f2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
#!/bin/sh
total=0
pass=0
# This supports a pipe that doesn't destroy the exit status of first command
#
# http://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another
stdintoexitstatus() {
read exitstatus
return $exitstatus
}
run_test ()
{
cmd="$1"
total=$((total+1))
if [ "$VERBOSE" = "yes" ]; then
if $cmd; then
echo "PASS"
pass=$((pass+1))
else
echo "FAIL"
fi
else
# This is "$cmd | tail -2" but with the exit status of "$cmd" not "tail -2"
if (((($cmd; echo $? >&3) | tail -2 | head -1 >&4) 3>&1) | stdintoexitstatus) 4>&1; then
echo "PASS"
pass=$((pass+1))
else
echo "FAIL"
fi
fi
}
usage ()
{
cat <<EOF
Usage: glcpp-cr-lf [options...]
Run the entire glcpp-test suite several times, each time with each source
file transformed to use a non-standard line-termination character. Each
entire run with a different line-termination character is considered a
single test.
Valid options include:
-v|--verbose Print all output from the various sub-tests
EOF
}
# Parse command-line options
for option; do
case "${option}" in
-v|--verbose)
VERBOSE=yes;
;;
*)
echo "Unrecognized option: $option" >&2
echo >&2
usage
exit 1
;;
esac
done
# All tests depend on the .out files being present. So first do a
# normal run of the test suite, (silently) just to create the .out
# files as a side effect.
./glcpp-test >/dev/null 2>&1
echo "===== Testing with \\\\r line terminators (old Mac format) ====="
# Prepare test files with '\r' instead of '\n'
rm -rf ./subtest-cr
mkdir subtest-cr
for file in *.c; do
tr "\n" "\r" < "$file" > subtest-cr/"$file"
cp "$file".out subtest-cr/"$file".expected
done
run_test "./glcpp-test --testdir=subtest-cr"
echo "===== Testing with \\\\r\\\\n line terminators (DOS format) ====="
# Prepare test files with '\r\n' instead of '\n'
rm -rf ./subtest-cr-lf
mkdir subtest-cr-lf
for file in *.c; do
sed -e 's/$/\r/' < "$file" > subtest-cr-lf/"$file"
cp "$file".out subtest-cr-lf/"$file".expected
done
run_test "./glcpp-test --testdir=subtest-cr-lf"
echo "===== Testing with \\\\n\\\\r (bizarre, but allowed by GLSL spec.) ====="
# Prepare test files with '\n\r' instead of '\n'
rm -rf ./subtest-lf-cr
mkdir subtest-lf-cr
for file in *.c; do
tr "\n" "\r" < "$file" | sed -e 's/\r/\n\r/g' > subtest-lf-cr/"$file"
cp "$file".out subtest-lf-cr/"$file".expected
done
run_test "./glcpp-test --testdir=subtest-lf-cr"
echo ""
echo "$pass/$total tests returned correct results"
echo ""
if [ "$pass" = "$total" ]; then
exit 0
else
exit 1
fi
|