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