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