|
1 #! /bin/sh |
|
2 |
|
3 # Run PCRE tests. |
|
4 |
|
5 valgrind= |
|
6 |
|
7 # Set up a suitable "diff" command for comparison. Some systems |
|
8 # have a diff that lacks a -u option. Try to deal with this. |
|
9 |
|
10 if diff -u /dev/null /dev/null; then cf="diff -u"; else cf="diff"; fi |
|
11 |
|
12 # Find the test data |
|
13 |
|
14 testdata=testdata |
|
15 if [ -n "$srcdir" -a -d "$srcdir" ] ; then |
|
16 testdata="$srcdir/testdata" |
|
17 fi |
|
18 |
|
19 # Find which optional facilities are available |
|
20 |
|
21 case `./pcretest -C | ./pcregrep 'Internal link size'` in |
|
22 *2) link_size=2;; |
|
23 *3) link_size=3;; |
|
24 *4) link_size=4;; |
|
25 *) echo "Failed to find internal link size"; exit 1;; |
|
26 esac |
|
27 |
|
28 ./pcretest -C | ./pcregrep 'No UTF-8 support' >/dev/null |
|
29 utf8=$? |
|
30 |
|
31 ./pcretest -C | ./pcregrep 'No Unicode properties support' >/dev/null |
|
32 ucp=$? |
|
33 |
|
34 # Select which tests to run; for those that are explicitly requested, check |
|
35 # that the necessary optional facilities are available. |
|
36 |
|
37 do1=no |
|
38 do2=no |
|
39 do3=no |
|
40 do4=no |
|
41 do5=no |
|
42 do6=no |
|
43 do7=no |
|
44 do8=no |
|
45 do9=no |
|
46 do10=no |
|
47 |
|
48 while [ $# -gt 0 ] ; do |
|
49 case $1 in |
|
50 1) do1=yes;; |
|
51 2) do2=yes;; |
|
52 3) do3=yes;; |
|
53 4) do4=yes;; |
|
54 5) do5=yes;; |
|
55 6) do6=yes;; |
|
56 7) do7=yes;; |
|
57 8) do8=yes;; |
|
58 9) do9=yes;; |
|
59 10) do10=yes;; |
|
60 valgrind) valgrind="valgrind -q";; |
|
61 *) echo "Unknown test number $1"; exit 1;; |
|
62 esac |
|
63 shift |
|
64 done |
|
65 |
|
66 if [ $utf8 -eq 0 ] ; then |
|
67 if [ $do4 = yes ] ; then |
|
68 echo "Can't run test 4 because UTF-8 support is not configured" |
|
69 exit 1 |
|
70 fi |
|
71 if [ $do5 = yes ] ; then |
|
72 echo "Can't run test 5 because UTF-8 support is not configured" |
|
73 exit 1 |
|
74 fi |
|
75 if [ $do8 = yes ] ; then |
|
76 echo "Can't run test 8 because UTF-8 support is not configured" |
|
77 exit 1 |
|
78 fi |
|
79 fi |
|
80 |
|
81 if [ $ucp -eq 0 ] ; then |
|
82 if [ $do6 = yes ] ; then |
|
83 echo "Can't run test 6 because Unicode property support is not configured" |
|
84 exit 1 |
|
85 fi |
|
86 if [ $do9 = yes ] ; then |
|
87 echo "Can't run test 9 because Unicode property support is not configured" |
|
88 exit 1 |
|
89 fi |
|
90 if [ $do10 = yes ] ; then |
|
91 echo "Can't run test 10 because Unicode property support is not configured" |
|
92 exit 1 |
|
93 fi |
|
94 fi |
|
95 |
|
96 if [ $link_size -ne 2 ] ; then |
|
97 if [ $do10 = yes ] ; then |
|
98 echo "Can't run test 10 because the link size ($link_size) is not 2" |
|
99 exit 1 |
|
100 fi |
|
101 fi |
|
102 |
|
103 # If no specific tests were requested, select all that are relevant. |
|
104 |
|
105 if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \ |
|
106 $do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \ |
|
107 $do9 = no -a $do10 = no ] ; then |
|
108 do1=yes |
|
109 do2=yes |
|
110 do3=yes |
|
111 if [ $utf8 -ne 0 ] ; then do4=yes; fi |
|
112 if [ $utf8 -ne 0 ] ; then do5=yes; fi |
|
113 if [ $utf8 -ne 0 -a $ucp -ne 0 ] ; then do6=yes; fi |
|
114 do7=yes |
|
115 if [ $utf8 -ne 0 ] ; then do8=yes; fi |
|
116 if [ $utf8 -ne 0 -a $ucp -ne 0 ] ; then do9=yes; fi |
|
117 if [ $link_size -eq 2 -a $ucp -ne 0 ] ; then do10=yes; fi |
|
118 fi |
|
119 |
|
120 # Show which release |
|
121 |
|
122 echo "" |
|
123 echo PCRE C library tests |
|
124 ./pcretest /dev/null |
|
125 |
|
126 # Primary test, Perl-compatible |
|
127 |
|
128 if [ $do1 = yes ] ; then |
|
129 echo "Test 1: main functionality (Perl compatible)" |
|
130 $valgrind ./pcretest -q $testdata/testinput1 testtry |
|
131 if [ $? = 0 ] ; then |
|
132 $cf $testdata/testoutput1 testtry |
|
133 if [ $? != 0 ] ; then exit 1; fi |
|
134 else exit 1 |
|
135 fi |
|
136 echo "OK" |
|
137 fi |
|
138 |
|
139 # PCRE tests that are not Perl-compatible - API & error tests, mostly |
|
140 |
|
141 if [ $do2 = yes ] ; then |
|
142 echo "Test 2: API and error handling (not Perl compatible)" |
|
143 $valgrind ./pcretest -q $testdata/testinput2 testtry |
|
144 if [ $? = 0 ] ; then |
|
145 $cf $testdata/testoutput2 testtry |
|
146 if [ $? != 0 ] ; then exit 1; fi |
|
147 else |
|
148 echo " " |
|
149 echo "** Test 2 requires a lot of stack. If it has crashed with a" |
|
150 echo "** segmentation fault, it may be that you do not have enough" |
|
151 echo "** stack available by default. Please see the 'pcrestack' man" |
|
152 echo "** page for a discussion of PCRE's stack usage." |
|
153 echo " " |
|
154 exit 1 |
|
155 fi |
|
156 echo "OK" |
|
157 fi |
|
158 |
|
159 # Locale-specific tests, provided that either the "fr_FR" or the "french" |
|
160 # locale is available. The former is the Unix-like standard; the latter is |
|
161 # for Windows. |
|
162 |
|
163 if [ $do3 = yes ] ; then |
|
164 locale -a | grep '^fr_FR$' >/dev/null |
|
165 if [ $? -eq 0 ] ; then |
|
166 locale=fr_FR |
|
167 infile=$testdata/testinput3 |
|
168 outfile=$testdata/testoutput3 |
|
169 else |
|
170 locale -a | grep '^french$' >/dev/null |
|
171 if [ $? -eq 0 ] ; then |
|
172 locale=french |
|
173 sed 's/fr_FR/french/' $testdata/testinput3 >test3input |
|
174 sed 's/fr_FR/french/' $testdata/testoutput3 >test3output |
|
175 infile=test3input |
|
176 outfile=test3output |
|
177 else |
|
178 locale= |
|
179 fi |
|
180 fi |
|
181 |
|
182 if [ "$locale" != "" ] ; then |
|
183 echo "Test 3: locale-specific features (using '$locale' locale)" |
|
184 $valgrind ./pcretest -q $infile testtry |
|
185 if [ $? = 0 ] ; then |
|
186 $cf $outfile testtry |
|
187 if [ $? != 0 ] ; then |
|
188 echo " " |
|
189 echo "Locale test did not run entirely successfully." |
|
190 echo "This usually means that there is a problem with the locale" |
|
191 echo "settings rather than a bug in PCRE." |
|
192 else |
|
193 echo "OK" |
|
194 fi |
|
195 else exit 1 |
|
196 fi |
|
197 else |
|
198 echo "Cannot test locale-specific features - neither the 'fr_FR' nor the" |
|
199 echo "'french' locale exists, or the \"locale\" command is not available" |
|
200 echo "to check for them." |
|
201 echo " " |
|
202 fi |
|
203 fi |
|
204 |
|
205 # Additional tests for UTF8 support |
|
206 |
|
207 if [ $do4 = yes ] ; then |
|
208 echo "Test 4: UTF-8 support (Perl compatible)" |
|
209 $valgrind ./pcretest -q $testdata/testinput4 testtry |
|
210 if [ $? = 0 ] ; then |
|
211 $cf $testdata/testoutput4 testtry |
|
212 if [ $? != 0 ] ; then exit 1; fi |
|
213 else exit 1 |
|
214 fi |
|
215 echo "OK" |
|
216 fi |
|
217 |
|
218 if [ $do5 = yes ] ; then |
|
219 echo "Test 5: API and internals for UTF-8 support (not Perl compatible)" |
|
220 $valgrind ./pcretest -q $testdata/testinput5 testtry |
|
221 if [ $? = 0 ] ; then |
|
222 $cf $testdata/testoutput5 testtry |
|
223 if [ $? != 0 ] ; then exit 1; fi |
|
224 else exit 1 |
|
225 fi |
|
226 echo "OK" |
|
227 fi |
|
228 |
|
229 if [ $do6 = yes ] ; then |
|
230 echo "Test 6: Unicode property support" |
|
231 $valgrind ./pcretest -q $testdata/testinput6 testtry |
|
232 if [ $? = 0 ] ; then |
|
233 $cf $testdata/testoutput6 testtry |
|
234 if [ $? != 0 ] ; then exit 1; fi |
|
235 else exit 1 |
|
236 fi |
|
237 echo "OK" |
|
238 fi |
|
239 |
|
240 # Tests for DFA matching support |
|
241 |
|
242 if [ $do7 = yes ] ; then |
|
243 echo "Test 7: DFA matching" |
|
244 $valgrind ./pcretest -q -dfa $testdata/testinput7 testtry |
|
245 if [ $? = 0 ] ; then |
|
246 $cf $testdata/testoutput7 testtry |
|
247 if [ $? != 0 ] ; then exit 1; fi |
|
248 else exit 1 |
|
249 fi |
|
250 echo "OK" |
|
251 fi |
|
252 |
|
253 if [ $do8 = yes ] ; then |
|
254 echo "Test 8: DFA matching with UTF-8" |
|
255 $valgrind ./pcretest -q -dfa $testdata/testinput8 testtry |
|
256 if [ $? = 0 ] ; then |
|
257 $cf $testdata/testoutput8 testtry |
|
258 if [ $? != 0 ] ; then exit 1; fi |
|
259 else exit 1 |
|
260 fi |
|
261 echo "OK" |
|
262 fi |
|
263 |
|
264 if [ $do9 = yes ] ; then |
|
265 echo "Test 9: DFA matching with Unicode properties" |
|
266 $valgrind ./pcretest -q -dfa $testdata/testinput9 testtry |
|
267 if [ $? = 0 ] ; then |
|
268 $cf $testdata/testoutput9 testtry |
|
269 if [ $? != 0 ] ; then exit 1; fi |
|
270 else exit 1 |
|
271 fi |
|
272 echo "OK" |
|
273 fi |
|
274 |
|
275 # Test of internal offsets and code sizes. This test is run only when there |
|
276 # is Unicode property support and the link size is 2. The actual tests are |
|
277 # mostly the same as in some of the above, but in this test we inspect some |
|
278 # offsets and sizes that require a known link size. This is a doublecheck for |
|
279 # the maintainer, just in case something changes unexpectely. |
|
280 |
|
281 if [ $do10 = yes ] ; then |
|
282 echo "Test 10: Internal offsets and code size tests" |
|
283 $valgrind ./pcretest -q $testdata/testinput10 testtry |
|
284 if [ $? = 0 ] ; then |
|
285 $cf $testdata/testoutput10 testtry |
|
286 if [ $? != 0 ] ; then exit 1; fi |
|
287 else exit 1 |
|
288 fi |
|
289 echo "OK" |
|
290 fi |
|
291 |
|
292 # End |