/[pcre]/code/trunk/RunTest
ViewVC logotype

Contents of /code/trunk/RunTest

Parent Directory Parent Directory | Revision Log Revision Log


Revision 612 - (show annotations) (download)
Sat Jul 2 15:20:59 2011 UTC (3 years ago) by ph10
File size: 10474 byte(s)
Fix two study bugs concerned with minimum subject lengths; add features to 
pcretest so that all tests can be run with or without study; adjust tests so 
that this happens.

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

Properties

Name Value
svn:executable *
svn:keywords "Author Date Id Revision Url"

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12