Nick Kralevich | 0f17c8f | 2014-09-27 12:41:49 -0700 | [diff] [blame] | 1 | #! /bin/sh |
| 2 | |
| 3 | ############################################################################### |
| 4 | # Run the PCRE tests using the pcretest program. The appropriate tests are |
| 5 | # selected, depending on which build-time options were used. |
| 6 | # |
| 7 | # All tests are now run both with and without -s, to ensure that everything is |
| 8 | # tested with and without studying. However, there are some tests that produce |
| 9 | # different output after studying, typically when we are tracing the actual |
| 10 | # matching process (for example, using auto-callouts). In these few cases, the |
| 11 | # tests are duplicated in the files, one with /S to force studying always, and |
| 12 | # one with /SS to force *not* studying always. The use of -s doesn't then make |
| 13 | # any difference to their output. There is also one test which compiles invalid |
| 14 | # UTF-8 with the UTF-8 check turned off; for this, studying must also be |
| 15 | # disabled with /SS. |
| 16 | # |
| 17 | # When JIT support is available, all appropriate tests are also run with -s+ to |
| 18 | # test (again, almost) everything with studying and the JIT option, unless |
| 19 | # "nojit" is given on the command line. There are also two tests for |
| 20 | # JIT-specific features, one to be run when JIT support is available (unless |
| 21 | # "nojit" is specified), and one when it is not. |
| 22 | # |
| 23 | # Whichever of the 8-, 16- and 32-bit libraries exist are tested. It is also |
| 24 | # possible to select which to test by giving "-8", "-16" or "-32" on the |
| 25 | # command line. |
| 26 | # |
| 27 | # As well as "nojit", "-8", "-16", and "-32", arguments for this script are |
| 28 | # individual test numbers, ranges of tests such as 3-6 or 3- (meaning 3 to the |
| 29 | # end), or a number preceded by ~ to exclude a test. For example, "3-15 ~10" |
| 30 | # runs tests 3 to 15, excluding test 10, and just "~10" runs all the tests |
| 31 | # except test 10. Whatever order the arguments are in, the tests are always run |
| 32 | # in numerical order. |
| 33 | # |
| 34 | # The special argument "3S" runs test 3, stopping if it fails. Test 3 is the |
| 35 | # locale test, and failure usually means there's an issue with the locale |
| 36 | # rather than a bug in PCRE, so normally subsequent tests are run. "3S" is |
| 37 | # useful when you want to debug or update the test. |
| 38 | # |
| 39 | # Inappropriate tests are automatically skipped (with a comment to say so): for |
| 40 | # example, if JIT support is not compiled, test 12 is skipped, whereas if JIT |
| 41 | # support is compiled, test 13 is skipped. |
| 42 | # |
| 43 | # Other arguments can be one of the words "valgrind", "valgrind-log", or "sim" |
| 44 | # followed by an argument to run cross-compiled executables under a simulator, |
| 45 | # for example: |
| 46 | # |
| 47 | # RunTest 3 sim "qemu-arm -s 8388608" |
| 48 | # |
| 49 | # There are two special cases where only one argument is allowed: |
| 50 | # |
| 51 | # If the first and only argument is "ebcdic", the script runs the special |
| 52 | # EBCDIC test that can be useful for checking certain EBCDIC features, even |
| 53 | # when run in an ASCII environment. |
| 54 | # |
| 55 | # If the script is obeyed as "RunTest list", a list of available tests is |
| 56 | # output, but none of them are run. |
| 57 | ############################################################################### |
| 58 | |
| 59 | # Define test titles in variables so that they can be output as a list. Some |
| 60 | # of them are modified (e.g. with -8 or -16) when used in the actual tests. |
| 61 | |
| 62 | title1="Test 1: Main functionality (Compatible with Perl >= 5.10)" |
| 63 | title2="Test 2: API, errors, internals, and non-Perl stuff" |
| 64 | title3="Test 3: Locale-specific features" |
| 65 | title4A="Test 4: UTF" |
| 66 | title4B=" support (Compatible with Perl >= 5.10)" |
| 67 | title5="Test 5: API, internals, and non-Perl stuff for UTF" |
| 68 | title6="Test 6: Unicode property support (Compatible with Perl >= 5.10)" |
| 69 | title7="Test 7: API, internals, and non-Perl stuff for Unicode property support" |
| 70 | title8="Test 8: DFA matching main functionality" |
| 71 | title9="Test 9: DFA matching with UTF" |
| 72 | title10="Test 10: DFA matching with Unicode properties" |
| 73 | title11="Test 11: Internal offsets and code size tests" |
| 74 | title12="Test 12: JIT-specific features (when JIT is available)" |
| 75 | title13="Test 13: JIT-specific features (when JIT is not available)" |
| 76 | title14="Test 14: Specials for the basic 8-bit library" |
| 77 | title15="Test 15: Specials for the 8-bit library with UTF-8 support" |
| 78 | title16="Test 16: Specials for the 8-bit library with Unicode propery support" |
| 79 | title17="Test 17: Specials for the basic 16/32-bit library" |
| 80 | title18="Test 18: Specials for the 16/32-bit library with UTF-16/32 support" |
| 81 | title19="Test 19: Specials for the 16/32-bit library with Unicode property support" |
| 82 | title20="Test 20: DFA specials for the basic 16/32-bit library" |
| 83 | title21="Test 21: Reloads for the basic 16/32-bit library" |
| 84 | title22="Test 22: Reloads for the 16/32-bit library with UTF-16/32 support" |
| 85 | title23="Test 23: Specials for the 16-bit library" |
| 86 | title24="Test 24: Specials for the 16-bit library with UTF-16 support" |
| 87 | title25="Test 25: Specials for the 32-bit library" |
| 88 | title26="Test 26: Specials for the 32-bit library with UTF-32 support" |
| 89 | |
| 90 | maxtest=26 |
| 91 | |
| 92 | if [ $# -eq 1 -a "$1" = "list" ]; then |
| 93 | echo $title1 |
| 94 | echo $title2 "(not UTF)" |
| 95 | echo $title3 |
| 96 | echo $title4A $title4B |
| 97 | echo $title5 support |
| 98 | echo $title6 |
| 99 | echo $title7 |
| 100 | echo $title8 |
| 101 | echo $title9 |
| 102 | echo $title10 |
| 103 | echo $title11 |
| 104 | echo $title12 |
| 105 | echo $title13 |
| 106 | echo $title14 |
| 107 | echo $title15 |
| 108 | echo $title16 |
| 109 | echo $title17 |
| 110 | echo $title18 |
| 111 | echo $title19 |
| 112 | echo $title20 |
| 113 | echo $title21 |
| 114 | echo $title22 |
| 115 | echo $title23 |
| 116 | echo $title24 |
| 117 | echo $title25 |
| 118 | echo $title26 |
| 119 | exit 0 |
| 120 | fi |
| 121 | |
| 122 | # Set up a suitable "diff" command for comparison. Some systems |
| 123 | # have a diff that lacks a -u option. Try to deal with this. |
| 124 | |
| 125 | cf="diff" |
| 126 | diff -u /dev/null /dev/null 2>/dev/null && cf="diff -u" |
| 127 | |
| 128 | # Find the test data |
| 129 | |
| 130 | if [ -n "$srcdir" -a -d "$srcdir" ] ; then |
| 131 | testdata="$srcdir/testdata" |
| 132 | elif [ -d "./testdata" ] ; then |
| 133 | testdata=./testdata |
| 134 | elif [ -d "../testdata" ] ; then |
| 135 | testdata=../testdata |
| 136 | else |
| 137 | echo "Cannot find the testdata directory" |
| 138 | exit 1 |
| 139 | fi |
| 140 | |
| 141 | |
| 142 | # ------ Special EBCDIC Test ------- |
| 143 | |
| 144 | if [ $# -eq 1 -a "$1" = "ebcdic" ]; then |
| 145 | ./pcretest -C ebcdic >/dev/null |
| 146 | ebcdic=$? |
| 147 | if [ $ebcdic -ne 1 ] ; then |
| 148 | echo "Cannot run EBCDIC tests: EBCDIC support not compiled" |
| 149 | exit 1 |
| 150 | fi |
| 151 | |
| 152 | for opt in "" "-s" "-dfa" "-s -dfa"; do |
| 153 | ./pcretest -q $opt $testdata/testinputEBC >testtry |
| 154 | if [ $? = 0 ] ; then |
| 155 | $cf $testdata/testoutputEBC testtry |
| 156 | if [ $? != 0 ] ; then exit 1; fi |
| 157 | else exit 1 |
| 158 | fi |
| 159 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 160 | elif [ "$opt" = "-dfa" ] ; then echo " OK using DFA" |
| 161 | elif [ "$opt" = "-s -dfa" ] ; then echo " OK using DFA with study" |
| 162 | else echo " OK" |
| 163 | fi |
| 164 | done |
| 165 | |
| 166 | exit 0 |
| 167 | fi |
| 168 | |
| 169 | |
| 170 | # ------ Normal Tests ------ |
| 171 | |
| 172 | # Default values |
| 173 | |
| 174 | arg8= |
| 175 | arg16= |
| 176 | arg32= |
| 177 | nojit= |
| 178 | sim= |
| 179 | skip= |
| 180 | valgrind= |
| 181 | |
| 182 | # This is in case the caller has set aliases (as I do - PH) |
| 183 | unset cp ls mv rm |
| 184 | |
| 185 | # Process options and select which tests to run; for those that are explicitly |
| 186 | # requested, check that the necessary optional facilities are available. |
| 187 | |
| 188 | do1=no |
| 189 | do2=no |
| 190 | do3=no |
| 191 | do4=no |
| 192 | do5=no |
| 193 | do6=no |
| 194 | do7=no |
| 195 | do8=no |
| 196 | do9=no |
| 197 | do10=no |
| 198 | do11=no |
| 199 | do12=no |
| 200 | do13=no |
| 201 | do14=no |
| 202 | do15=no |
| 203 | do16=no |
| 204 | do17=no |
| 205 | do18=no |
| 206 | do19=no |
| 207 | do20=no |
| 208 | do21=no |
| 209 | do22=no |
| 210 | do23=no |
| 211 | do24=no |
| 212 | do25=no |
| 213 | do26=no |
| 214 | |
| 215 | while [ $# -gt 0 ] ; do |
| 216 | case $1 in |
| 217 | 1) do1=yes;; |
| 218 | 2) do2=yes;; |
| 219 | 3) do3=yes;; |
| 220 | 4) do4=yes;; |
| 221 | 5) do5=yes;; |
| 222 | 6) do6=yes;; |
| 223 | 7) do7=yes;; |
| 224 | 8) do8=yes;; |
| 225 | 9) do9=yes;; |
| 226 | 10) do10=yes;; |
| 227 | 11) do11=yes;; |
| 228 | 12) do12=yes;; |
| 229 | 13) do13=yes;; |
| 230 | 14) do14=yes;; |
| 231 | 15) do15=yes;; |
| 232 | 16) do16=yes;; |
| 233 | 17) do17=yes;; |
| 234 | 18) do18=yes;; |
| 235 | 19) do19=yes;; |
| 236 | 20) do20=yes;; |
| 237 | 21) do21=yes;; |
| 238 | 22) do22=yes;; |
| 239 | 23) do23=yes;; |
| 240 | 24) do24=yes;; |
| 241 | 25) do25=yes;; |
| 242 | 26) do26=yes;; |
| 243 | -8) arg8=yes;; |
| 244 | -16) arg16=yes;; |
| 245 | -32) arg32=yes;; |
| 246 | nojit) nojit=yes;; |
| 247 | sim) shift; sim=$1;; |
| 248 | valgrind) valgrind="valgrind --tool=memcheck -q --smc-check=all";; |
| 249 | valgrind-log) valgrind="valgrind --tool=memcheck --num-callers=30 --leak-check=no --error-limit=no --smc-check=all --log-file=report.%p ";; |
| 250 | ~*) |
| 251 | if expr "$1" : '~[0-9][0-9]*$' >/dev/null; then |
| 252 | skip="$skip `expr "$1" : '~\([0-9]*\)*$'`" |
| 253 | else |
| 254 | echo "Unknown option or test selector '$1'"; exit 1 |
| 255 | fi |
| 256 | ;; |
| 257 | *-*) |
| 258 | if expr "$1" : '[0-9][0-9]*-[0-9]*$' >/dev/null; then |
| 259 | tf=`expr "$1" : '\([0-9]*\)'` |
| 260 | tt=`expr "$1" : '.*-\([0-9]*\)'` |
| 261 | if [ "$tt" = "" ] ; then tt=$maxtest; fi |
| 262 | if expr \( "$tf" "<" 1 \) \| \( "$tt" ">" "$maxtest" \) >/dev/null; then |
| 263 | echo "Invalid test range '$1'"; exit 1 |
| 264 | fi |
| 265 | while expr "$tf" "<=" "$tt" >/dev/null; do |
| 266 | eval do${tf}=yes |
| 267 | tf=`expr $tf + 1` |
| 268 | done |
| 269 | else |
| 270 | echo "Invalid test range '$1'"; exit 1 |
| 271 | fi |
| 272 | ;; |
| 273 | *) echo "Unknown option or test selector '$1'"; exit 1;; |
| 274 | esac |
| 275 | shift |
| 276 | done |
| 277 | |
| 278 | # Find which optional facilities are available. |
| 279 | |
| 280 | $sim ./pcretest -C linksize >/dev/null |
| 281 | link_size=$? |
| 282 | if [ $link_size -lt 2 ] ; then |
| 283 | echo "Failed to find internal link size" |
| 284 | exit 1 |
| 285 | fi |
| 286 | if [ $link_size -gt 4 ] ; then |
| 287 | echo "Failed to find internal link size" |
| 288 | exit 1 |
| 289 | fi |
| 290 | |
| 291 | # All of 8-bit, 16-bit, and 32-bit character strings may be supported, but only |
| 292 | # one need be. |
| 293 | |
| 294 | $sim ./pcretest -C pcre8 >/dev/null |
| 295 | support8=$? |
| 296 | $sim ./pcretest -C pcre16 >/dev/null |
| 297 | support16=$? |
| 298 | $sim ./pcretest -C pcre32 >/dev/null |
| 299 | support32=$? |
| 300 | |
| 301 | # Initialize all bitsizes skipped |
| 302 | |
| 303 | test8=skip |
| 304 | test16=skip |
| 305 | test32=skip |
| 306 | |
| 307 | # If no bitsize arguments, select all that are available |
| 308 | |
| 309 | if [ "$arg8$arg16$arg32" = "" ] ; then |
| 310 | if [ $support8 -ne 0 ] ; then |
| 311 | test8= |
| 312 | fi |
| 313 | if [ $support16 -ne 0 ] ; then |
| 314 | test16=-16 |
| 315 | fi |
| 316 | if [ $support32 -ne 0 ] ; then |
| 317 | test32=-32 |
| 318 | fi |
| 319 | |
| 320 | # Select requested bit sizes |
| 321 | |
| 322 | else |
| 323 | if [ "$arg8" = yes ] ; then |
| 324 | if [ $support8 -eq 0 ] ; then |
| 325 | echo "Cannot run 8-bit library tests: 8-bit library not compiled" |
| 326 | exit 1 |
| 327 | fi |
| 328 | test8= |
| 329 | fi |
| 330 | if [ "$arg16" = yes ] ; then |
| 331 | if [ $support16 -eq 0 ] ; then |
| 332 | echo "Cannot run 16-bit library tests: 16-bit library not compiled" |
| 333 | exit 1 |
| 334 | fi |
| 335 | test16=-16 |
| 336 | fi |
| 337 | if [ "$arg32" = yes ] ; then |
| 338 | if [ $support32 -eq 0 ] ; then |
| 339 | echo "Cannot run 32-bit library tests: 32-bit library not compiled" |
| 340 | exit 1 |
| 341 | fi |
| 342 | test32=-32 |
| 343 | fi |
| 344 | fi |
| 345 | |
| 346 | # UTF support always applies to all bit sizes if both are supported; we can't |
| 347 | # have UTF-8 support without UTF-16 support (for example). |
| 348 | |
| 349 | $sim ./pcretest -C utf >/dev/null |
| 350 | utf=$? |
| 351 | |
| 352 | $sim ./pcretest -C ucp >/dev/null |
| 353 | ucp=$? |
| 354 | |
| 355 | jitopt= |
| 356 | $sim ./pcretest -C jit >/dev/null |
| 357 | jit=$? |
| 358 | if [ $jit -ne 0 -a "$nojit" != "yes" ] ; then |
| 359 | jitopt=-s+ |
| 360 | fi |
| 361 | |
| 362 | # If no specific tests were requested, select all. Those that are not |
| 363 | # relevant will be automatically skipped. |
| 364 | |
| 365 | if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \ |
| 366 | $do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \ |
| 367 | $do9 = no -a $do10 = no -a $do11 = no -a $do12 = no -a \ |
| 368 | $do13 = no -a $do14 = no -a $do15 = no -a $do16 = no -a \ |
| 369 | $do17 = no -a $do18 = no -a $do19 = no -a $do20 = no -a \ |
| 370 | $do21 = no -a $do22 = no -a $do23 = no -a $do24 = no -a \ |
| 371 | $do25 = no -a $do26 = no ] ; then |
| 372 | do1=yes |
| 373 | do2=yes |
| 374 | do3=yes |
| 375 | do4=yes |
| 376 | do5=yes |
| 377 | do6=yes |
| 378 | do7=yes |
| 379 | do8=yes |
| 380 | do9=yes |
| 381 | do10=yes |
| 382 | do11=yes |
| 383 | do12=yes |
| 384 | do13=yes |
| 385 | do14=yes |
| 386 | do15=yes |
| 387 | do16=yes |
| 388 | do17=yes |
| 389 | do18=yes |
| 390 | do19=yes |
| 391 | do20=yes |
| 392 | do21=yes |
| 393 | do22=yes |
| 394 | do23=yes |
| 395 | do24=yes |
| 396 | do25=yes |
| 397 | do26=yes |
| 398 | fi |
| 399 | |
| 400 | # Handle any explicit skips at this stage, so that an argument list may consist |
| 401 | # only of explicit skips. |
| 402 | |
| 403 | for i in $skip; do eval do$i=no; done |
| 404 | |
| 405 | # Show which release and which test data |
| 406 | |
| 407 | echo "" |
| 408 | echo PCRE C library tests using test data from $testdata |
| 409 | $sim ./pcretest /dev/null |
| 410 | |
| 411 | for bmode in "$test8" "$test16" "$test32"; do |
| 412 | case "$bmode" in |
| 413 | skip) continue;; |
| 414 | -16) if [ "$test8$test32" != "skipskip" ] ; then echo ""; fi |
| 415 | bits=16; echo "---- Testing 16-bit library ----"; echo "";; |
| 416 | -32) if [ "$test8$test16" != "skipskip" ] ; then echo ""; fi |
| 417 | bits=32; echo "---- Testing 32-bit library ----"; echo "";; |
| 418 | *) bits=8; echo "---- Testing 8-bit library ----"; echo "";; |
| 419 | esac |
| 420 | |
| 421 | # Primary test, compatible with JIT and all versions of Perl >= 5.8 |
| 422 | |
| 423 | if [ $do1 = yes ] ; then |
| 424 | echo $title1 |
| 425 | for opt in "" "-s" $jitopt; do |
| 426 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput1 testtry |
| 427 | if [ $? = 0 ] ; then |
| 428 | $cf $testdata/testoutput1 testtry |
| 429 | if [ $? != 0 ] ; then exit 1; fi |
| 430 | else exit 1 |
| 431 | fi |
| 432 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 433 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 434 | else echo " OK" |
| 435 | fi |
| 436 | done |
| 437 | fi |
| 438 | |
| 439 | # PCRE tests that are not JIT or Perl-compatible: API, errors, internals |
| 440 | |
| 441 | if [ $do2 = yes ] ; then |
| 442 | echo $title2 "(not UTF-$bits)" |
| 443 | for opt in "" "-s" $jitopt; do |
| 444 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput2 testtry |
| 445 | if [ $? = 0 ] ; then |
| 446 | $cf $testdata/testoutput2 testtry |
| 447 | if [ $? != 0 ] ; then exit 1; fi |
| 448 | else |
| 449 | echo " " |
| 450 | echo "** Test 2 requires a lot of stack. If it has crashed with a" |
| 451 | echo "** segmentation fault, it may be that you do not have enough" |
| 452 | echo "** stack available by default. Please see the 'pcrestack' man" |
| 453 | echo "** page for a discussion of PCRE's stack usage." |
| 454 | echo " " |
| 455 | exit 1 |
| 456 | fi |
| 457 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 458 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 459 | else echo " OK" |
| 460 | fi |
| 461 | done |
| 462 | fi |
| 463 | |
| 464 | # Locale-specific tests, provided that either the "fr_FR" or the "french" |
| 465 | # locale is available. The former is the Unix-like standard; the latter is |
| 466 | # for Windows. Another possibility is "fr". Unfortunately, different versions |
| 467 | # of the French locale give different outputs for some items. This test passes |
| 468 | # if the output matches any one of the alternative output files. |
| 469 | |
| 470 | if [ $do3 = yes ] ; then |
| 471 | locale -a | grep '^fr_FR$' >/dev/null |
| 472 | if [ $? -eq 0 ] ; then |
| 473 | locale=fr_FR |
| 474 | infile=$testdata/testinput3 |
| 475 | outfile=$testdata/testoutput3 |
| 476 | outfile2=$testdata/testoutput3A |
| 477 | outfile3=$testdata/testoutput3B |
| 478 | else |
| 479 | infile=test3input |
| 480 | outfile=test3output |
| 481 | outfile2=test3outputA |
| 482 | outfile3=test3outputB |
| 483 | locale -a | grep '^french$' >/dev/null |
| 484 | if [ $? -eq 0 ] ; then |
| 485 | locale=french |
| 486 | sed 's/fr_FR/french/' $testdata/testinput3 >test3input |
| 487 | sed 's/fr_FR/french/' $testdata/testoutput3 >test3output |
| 488 | sed 's/fr_FR/french/' $testdata/testoutput3A >test3outputA |
| 489 | sed 's/fr_FR/french/' $testdata/testoutput3B >test3outputB |
| 490 | else |
| 491 | locale -a | grep '^fr$' >/dev/null |
| 492 | if [ $? -eq 0 ] ; then |
| 493 | locale=fr |
| 494 | sed 's/fr_FR/fr/' $testdata/intestinput3 >test3input |
| 495 | sed 's/fr_FR/fr/' $testdata/intestoutput3 >test3output |
| 496 | sed 's/fr_FR/fr/' $testdata/intestoutput3A >test3outputA |
| 497 | sed 's/fr_FR/fr/' $testdata/intestoutput3B >test3outputB |
| 498 | else |
| 499 | locale= |
| 500 | fi |
| 501 | fi |
| 502 | fi |
| 503 | |
| 504 | if [ "$locale" != "" ] ; then |
| 505 | echo $title3 "(using '$locale' locale)" |
| 506 | for opt in "" "-s" $jitopt; do |
| 507 | $sim $valgrind ./pcretest -q $bmode $opt $infile testtry |
| 508 | if [ $? = 0 ] ; then |
| 509 | if $cf $outfile testtry >teststdout || \ |
| 510 | $cf $outfile2 testtry >teststdout || \ |
| 511 | $cf $outfile3 testtry >teststdout |
| 512 | then |
| 513 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 514 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 515 | else echo " OK" |
| 516 | fi |
| 517 | else |
| 518 | echo "** Locale test did not run successfully. The output did not match" |
| 519 | echo " $outfile, $outfile2 or $outfile3." |
| 520 | echo " This may mean that there is a problem with the locale settings rather" |
| 521 | echo " than a bug in PCRE." |
| 522 | exit 1 |
| 523 | fi |
| 524 | else exit 1 |
| 525 | fi |
| 526 | done |
| 527 | else |
| 528 | echo "Cannot test locale-specific features - none of the 'fr_FR', 'fr' or" |
| 529 | echo "'french' locales exist, or the \"locale\" command is not available" |
| 530 | echo "to check for them." |
| 531 | echo " " |
| 532 | fi |
| 533 | fi |
| 534 | |
| 535 | # Additional tests for UTF support |
| 536 | |
| 537 | if [ $do4 = yes ] ; then |
| 538 | echo ${title4A}-${bits}${title4B} |
| 539 | if [ $utf -eq 0 ] ; then |
| 540 | echo " Skipped because UTF-$bits support is not available" |
| 541 | else |
| 542 | for opt in "" "-s" $jitopt; do |
| 543 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput4 testtry |
| 544 | if [ $? = 0 ] ; then |
| 545 | $cf $testdata/testoutput4 testtry |
| 546 | if [ $? != 0 ] ; then exit 1; fi |
| 547 | else exit 1 |
| 548 | fi |
| 549 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 550 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 551 | else echo " OK" |
| 552 | fi |
| 553 | done |
| 554 | fi |
| 555 | fi |
| 556 | |
| 557 | if [ $do5 = yes ] ; then |
| 558 | echo ${title5}-${bits} support |
| 559 | if [ $utf -eq 0 ] ; then |
| 560 | echo " Skipped because UTF-$bits support is not available" |
| 561 | else |
| 562 | for opt in "" "-s" $jitopt; do |
| 563 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput5 testtry |
| 564 | if [ $? = 0 ] ; then |
| 565 | $cf $testdata/testoutput5 testtry |
| 566 | if [ $? != 0 ] ; then exit 1; fi |
| 567 | else exit 1 |
| 568 | fi |
| 569 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 570 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 571 | else echo " OK" |
| 572 | fi |
| 573 | done |
| 574 | fi |
| 575 | fi |
| 576 | |
| 577 | if [ $do6 = yes ] ; then |
| 578 | echo $title6 |
| 579 | if [ $utf -eq 0 -o $ucp -eq 0 ] ; then |
| 580 | echo " Skipped because Unicode property support is not available" |
| 581 | else |
| 582 | for opt in "" "-s" $jitopt; do |
| 583 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput6 testtry |
| 584 | if [ $? = 0 ] ; then |
| 585 | $cf $testdata/testoutput6 testtry |
| 586 | if [ $? != 0 ] ; then exit 1; fi |
| 587 | else exit 1 |
| 588 | fi |
| 589 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 590 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 591 | else echo " OK" |
| 592 | fi |
| 593 | done |
| 594 | fi |
| 595 | fi |
| 596 | |
| 597 | # Test non-Perl-compatible Unicode property support |
| 598 | |
| 599 | if [ $do7 = yes ] ; then |
| 600 | echo $title7 |
| 601 | if [ $utf -eq 0 -o $ucp -eq 0 ] ; then |
| 602 | echo " Skipped because Unicode property support is not available" |
| 603 | else |
| 604 | for opt in "" "-s" $jitopt; do |
| 605 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput7 testtry |
| 606 | if [ $? = 0 ] ; then |
| 607 | $cf $testdata/testoutput7 testtry |
| 608 | if [ $? != 0 ] ; then exit 1; fi |
| 609 | else exit 1 |
| 610 | fi |
| 611 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 612 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 613 | else echo " OK" |
| 614 | fi |
| 615 | done |
| 616 | fi |
| 617 | fi |
| 618 | |
| 619 | # Tests for DFA matching support |
| 620 | |
| 621 | if [ $do8 = yes ] ; then |
| 622 | echo $title8 |
| 623 | for opt in "" "-s"; do |
| 624 | $sim $valgrind ./pcretest -q $bmode $opt -dfa $testdata/testinput8 testtry |
| 625 | if [ $? = 0 ] ; then |
| 626 | $cf $testdata/testoutput8 testtry |
| 627 | if [ $? != 0 ] ; then exit 1; fi |
| 628 | else exit 1 |
| 629 | fi |
| 630 | if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi |
| 631 | done |
| 632 | fi |
| 633 | |
| 634 | if [ $do9 = yes ] ; then |
| 635 | echo ${title9}-${bits} |
| 636 | if [ $utf -eq 0 ] ; then |
| 637 | echo " Skipped because UTF-$bits support is not available" |
| 638 | else |
| 639 | for opt in "" "-s"; do |
| 640 | $sim $valgrind ./pcretest -q $bmode $opt -dfa $testdata/testinput9 testtry |
| 641 | if [ $? = 0 ] ; then |
| 642 | $cf $testdata/testoutput9 testtry |
| 643 | if [ $? != 0 ] ; then exit 1; fi |
| 644 | else exit 1 |
| 645 | fi |
| 646 | if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi |
| 647 | done |
| 648 | fi |
| 649 | fi |
| 650 | |
| 651 | if [ $do10 = yes ] ; then |
| 652 | echo $title10 |
| 653 | if [ $utf -eq 0 -o $ucp -eq 0 ] ; then |
| 654 | echo " Skipped because Unicode property support is not available" |
| 655 | else |
| 656 | for opt in "" "-s"; do |
| 657 | $sim $valgrind ./pcretest -q $bmode $opt -dfa $testdata/testinput10 testtry |
| 658 | if [ $? = 0 ] ; then |
| 659 | $cf $testdata/testoutput10 testtry |
| 660 | if [ $? != 0 ] ; then exit 1; fi |
| 661 | else exit 1 |
| 662 | fi |
| 663 | if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi |
| 664 | done |
| 665 | fi |
| 666 | fi |
| 667 | |
| 668 | # Test of internal offsets and code sizes. This test is run only when there |
| 669 | # is Unicode property support and the link size is 2. The actual tests are |
| 670 | # mostly the same as in some of the above, but in this test we inspect some |
| 671 | # offsets and sizes that require a known link size. This is a doublecheck for |
| 672 | # the maintainer, just in case something changes unexpectely. The output from |
| 673 | # this test is not the same in 8-bit and 16-bit modes. |
| 674 | |
| 675 | if [ $do11 = yes ] ; then |
| 676 | echo $title11 |
| 677 | if [ $link_size -ne 2 ] ; then |
| 678 | echo " Skipped because link size is not 2" |
| 679 | elif [ $ucp -eq 0 ] ; then |
| 680 | echo " Skipped because Unicode property support is not available" |
| 681 | else |
| 682 | for opt in "" "-s"; do |
| 683 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput11 testtry |
| 684 | if [ $? = 0 ] ; then |
| 685 | $cf $testdata/testoutput11-$bits testtry |
| 686 | if [ $? != 0 ] ; then exit 1; fi |
| 687 | else exit 1 |
| 688 | fi |
| 689 | if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi |
| 690 | done |
| 691 | fi |
| 692 | fi |
| 693 | |
| 694 | # Test JIT-specific features when JIT is available |
| 695 | |
| 696 | if [ $do12 = yes ] ; then |
| 697 | echo $title12 |
| 698 | if [ $jit -eq 0 -o "$nojit" = "yes" ] ; then |
| 699 | echo " Skipped because JIT is not available or not usable" |
| 700 | else |
| 701 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput12 testtry |
| 702 | if [ $? = 0 ] ; then |
| 703 | $cf $testdata/testoutput12 testtry |
| 704 | if [ $? != 0 ] ; then exit 1; fi |
| 705 | else exit 1 |
| 706 | fi |
| 707 | echo " OK" |
| 708 | fi |
| 709 | fi |
| 710 | |
| 711 | # Test JIT-specific features when JIT is not available |
| 712 | |
| 713 | if [ $do13 = yes ] ; then |
| 714 | echo $title13 |
| 715 | if [ $jit -ne 0 ] ; then |
| 716 | echo " Skipped because JIT is available" |
| 717 | else |
| 718 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput13 testtry |
| 719 | if [ $? = 0 ] ; then |
| 720 | $cf $testdata/testoutput13 testtry |
| 721 | if [ $? != 0 ] ; then exit 1; fi |
| 722 | else exit 1 |
| 723 | fi |
| 724 | echo " OK" |
| 725 | fi |
| 726 | fi |
| 727 | |
| 728 | # Tests for 8-bit-specific features |
| 729 | |
| 730 | if [ "$do14" = yes ] ; then |
| 731 | echo $title14 |
| 732 | if [ "$bits" = "16" -o "$bits" = "32" ] ; then |
| 733 | echo " Skipped when running 16/32-bit tests" |
| 734 | else |
| 735 | cp -f $testdata/saved16 testsaved16 |
| 736 | cp -f $testdata/saved32 testsaved32 |
| 737 | for opt in "" "-s" $jitopt; do |
| 738 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput14 testtry |
| 739 | if [ $? = 0 ] ; then |
| 740 | $cf $testdata/testoutput14 testtry |
| 741 | if [ $? != 0 ] ; then exit 1; fi |
| 742 | else exit 1 |
| 743 | fi |
| 744 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 745 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 746 | else echo " OK" |
| 747 | fi |
| 748 | done |
| 749 | fi |
| 750 | fi |
| 751 | |
| 752 | # Tests for 8-bit-specific features (needs UTF-8 support) |
| 753 | |
| 754 | if [ "$do15" = yes ] ; then |
| 755 | echo $title15 |
| 756 | if [ "$bits" = "16" -o "$bits" = "32" ] ; then |
| 757 | echo " Skipped when running 16/32-bit tests" |
| 758 | elif [ $utf -eq 0 ] ; then |
| 759 | echo " Skipped because UTF-$bits support is not available" |
| 760 | else |
| 761 | for opt in "" "-s" $jitopt; do |
| 762 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput15 testtry |
| 763 | if [ $? = 0 ] ; then |
| 764 | $cf $testdata/testoutput15 testtry |
| 765 | if [ $? != 0 ] ; then exit 1; fi |
| 766 | else exit 1 |
| 767 | fi |
| 768 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 769 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 770 | else echo " OK" |
| 771 | fi |
| 772 | done |
| 773 | fi |
| 774 | fi |
| 775 | |
| 776 | # Tests for 8-bit-specific features (Unicode property support) |
| 777 | |
| 778 | if [ $do16 = yes ] ; then |
| 779 | echo $title16 |
| 780 | if [ "$bits" = "16" -o "$bits" = "32" ] ; then |
| 781 | echo " Skipped when running 16/32-bit tests" |
| 782 | elif [ $ucp -eq 0 ] ; then |
| 783 | echo " Skipped because Unicode property support is not available" |
| 784 | else |
| 785 | for opt in "" "-s" $jitopt; do |
| 786 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput16 testtry |
| 787 | if [ $? = 0 ] ; then |
| 788 | $cf $testdata/testoutput16 testtry |
| 789 | if [ $? != 0 ] ; then exit 1; fi |
| 790 | else exit 1 |
| 791 | fi |
| 792 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 793 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 794 | else echo " OK" |
| 795 | fi |
| 796 | done |
| 797 | fi |
| 798 | fi |
| 799 | |
| 800 | # Tests for 16/32-bit-specific features |
| 801 | |
| 802 | if [ $do17 = yes ] ; then |
| 803 | echo $title17 |
| 804 | if [ "$bits" = "8" ] ; then |
| 805 | echo " Skipped when running 8-bit tests" |
| 806 | else |
| 807 | for opt in "" "-s" $jitopt; do |
| 808 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput17 testtry |
| 809 | if [ $? = 0 ] ; then |
| 810 | $cf $testdata/testoutput17 testtry |
| 811 | if [ $? != 0 ] ; then exit 1; fi |
| 812 | else exit 1 |
| 813 | fi |
| 814 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 815 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 816 | else echo " OK" |
| 817 | fi |
| 818 | done |
| 819 | fi |
| 820 | fi |
| 821 | |
| 822 | # Tests for 16/32-bit-specific features (UTF-16/32 support) |
| 823 | |
| 824 | if [ $do18 = yes ] ; then |
| 825 | echo $title18 |
| 826 | if [ "$bits" = "8" ] ; then |
| 827 | echo " Skipped when running 8-bit tests" |
| 828 | elif [ $utf -eq 0 ] ; then |
| 829 | echo " Skipped because UTF-$bits support is not available" |
| 830 | else |
| 831 | for opt in "" "-s" $jitopt; do |
| 832 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput18 testtry |
| 833 | if [ $? = 0 ] ; then |
| 834 | $cf $testdata/testoutput18-$bits testtry |
| 835 | if [ $? != 0 ] ; then exit 1; fi |
| 836 | else exit 1 |
| 837 | fi |
| 838 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 839 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 840 | else echo " OK" |
| 841 | fi |
| 842 | done |
| 843 | fi |
| 844 | fi |
| 845 | |
| 846 | # Tests for 16/32-bit-specific features (Unicode property support) |
| 847 | |
| 848 | if [ $do19 = yes ] ; then |
| 849 | echo $title19 |
| 850 | if [ "$bits" = "8" ] ; then |
| 851 | echo " Skipped when running 8-bit tests" |
| 852 | elif [ $ucp -eq 0 ] ; then |
| 853 | echo " Skipped because Unicode property support is not available" |
| 854 | else |
| 855 | for opt in "" "-s" $jitopt; do |
| 856 | $sim $valgrind ./pcretest -q $bmode $opt $testdata/testinput19 testtry |
| 857 | if [ $? = 0 ] ; then |
| 858 | $cf $testdata/testoutput19 testtry |
| 859 | if [ $? != 0 ] ; then exit 1; fi |
| 860 | else exit 1 |
| 861 | fi |
| 862 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 863 | elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study" |
| 864 | else echo " OK" |
| 865 | fi |
| 866 | done |
| 867 | fi |
| 868 | fi |
| 869 | |
| 870 | # Tests for 16/32-bit-specific features in DFA non-UTF-16/32 mode |
| 871 | |
| 872 | if [ $do20 = yes ] ; then |
| 873 | echo $title20 |
| 874 | if [ "$bits" = "8" ] ; then |
| 875 | echo " Skipped when running 8-bit tests" |
| 876 | else |
| 877 | for opt in "" "-s"; do |
| 878 | $sim $valgrind ./pcretest -q $bmode $opt -dfa $testdata/testinput20 testtry |
| 879 | if [ $? = 0 ] ; then |
| 880 | $cf $testdata/testoutput20 testtry |
| 881 | if [ $? != 0 ] ; then exit 1; fi |
| 882 | else exit 1 |
| 883 | fi |
| 884 | if [ "$opt" = "-s" ] ; then echo " OK with study" |
| 885 | else echo " OK" |
| 886 | fi |
| 887 | done |
| 888 | fi |
| 889 | fi |
| 890 | |
| 891 | # Tests for reloads with 16/32-bit library |
| 892 | |
| 893 | if [ $do21 = yes ] ; then |
| 894 | echo $title21 |
| 895 | if [ "$bits" = "8" ] ; then |
| 896 | echo " Skipped when running 8-bit tests" |
| 897 | elif [ $link_size -ne 2 ] ; then |
| 898 | echo " Skipped because link size is not 2" |
| 899 | else |
| 900 | cp -f $testdata/saved8 testsaved8 |
| 901 | cp -f $testdata/saved16LE-1 testsaved16LE-1 |
| 902 | cp -f $testdata/saved16BE-1 testsaved16BE-1 |
| 903 | cp -f $testdata/saved32LE-1 testsaved32LE-1 |
| 904 | cp -f $testdata/saved32BE-1 testsaved32BE-1 |
| 905 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput21 testtry |
| 906 | if [ $? = 0 ] ; then |
| 907 | $cf $testdata/testoutput21-$bits testtry |
| 908 | if [ $? != 0 ] ; then exit 1; fi |
| 909 | else exit 1 |
| 910 | fi |
| 911 | echo " OK" |
| 912 | fi |
| 913 | fi |
| 914 | |
| 915 | # Tests for reloads with 16/32-bit library (UTF-16 support) |
| 916 | |
| 917 | if [ $do22 = yes ] ; then |
| 918 | echo $title22 |
| 919 | if [ "$bits" = "8" ] ; then |
| 920 | echo " Skipped when running 8-bit tests" |
| 921 | elif [ $utf -eq 0 ] ; then |
| 922 | echo " Skipped because UTF-$bits support is not available" |
| 923 | elif [ $link_size -ne 2 ] ; then |
| 924 | echo " Skipped because link size is not 2" |
| 925 | else |
| 926 | cp -f $testdata/saved16LE-2 testsaved16LE-2 |
| 927 | cp -f $testdata/saved16BE-2 testsaved16BE-2 |
| 928 | cp -f $testdata/saved32LE-2 testsaved32LE-2 |
| 929 | cp -f $testdata/saved32BE-2 testsaved32BE-2 |
| 930 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput22 testtry |
| 931 | if [ $? = 0 ] ; then |
| 932 | $cf $testdata/testoutput22-$bits testtry |
| 933 | if [ $? != 0 ] ; then exit 1; fi |
| 934 | else exit 1 |
| 935 | fi |
| 936 | echo " OK" |
| 937 | fi |
| 938 | fi |
| 939 | |
| 940 | if [ $do23 = yes ] ; then |
| 941 | echo $title23 |
| 942 | if [ "$bits" = "8" -o "$bits" = "32" ] ; then |
| 943 | echo " Skipped when running 8/32-bit tests" |
| 944 | else |
| 945 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput23 testtry |
| 946 | if [ $? = 0 ] ; then |
| 947 | $cf $testdata/testoutput23 testtry |
| 948 | if [ $? != 0 ] ; then exit 1; fi |
| 949 | else exit 1 |
| 950 | fi |
| 951 | echo " OK" |
| 952 | fi |
| 953 | fi |
| 954 | |
| 955 | if [ $do24 = yes ] ; then |
| 956 | echo $title24 |
| 957 | if [ "$bits" = "8" -o "$bits" = "32" ] ; then |
| 958 | echo " Skipped when running 8/32-bit tests" |
| 959 | elif [ $utf -eq 0 ] ; then |
| 960 | echo " Skipped because UTF-$bits support is not available" |
| 961 | else |
| 962 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput24 testtry |
| 963 | if [ $? = 0 ] ; then |
| 964 | $cf $testdata/testoutput24 testtry |
| 965 | if [ $? != 0 ] ; then exit 1; fi |
| 966 | else exit 1 |
| 967 | fi |
| 968 | echo " OK" |
| 969 | fi |
| 970 | fi |
| 971 | |
| 972 | if [ $do25 = yes ] ; then |
| 973 | echo $title25 |
| 974 | if [ "$bits" = "8" -o "$bits" = "16" ] ; then |
| 975 | echo " Skipped when running 8/16-bit tests" |
| 976 | else |
| 977 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput25 testtry |
| 978 | if [ $? = 0 ] ; then |
| 979 | $cf $testdata/testoutput25 testtry |
| 980 | if [ $? != 0 ] ; then exit 1; fi |
| 981 | else exit 1 |
| 982 | fi |
| 983 | echo " OK" |
| 984 | fi |
| 985 | fi |
| 986 | |
| 987 | if [ $do26 = yes ] ; then |
| 988 | echo $title26 |
| 989 | if [ "$bits" = "8" -o "$bits" = "16" ] ; then |
| 990 | echo " Skipped when running 8/16-bit tests" |
| 991 | elif [ $utf -eq 0 ] ; then |
| 992 | echo " Skipped because UTF-$bits support is not available" |
| 993 | else |
| 994 | $sim $valgrind ./pcretest -q $bmode $testdata/testinput26 testtry |
| 995 | if [ $? = 0 ] ; then |
| 996 | $cf $testdata/testoutput26 testtry |
| 997 | if [ $? != 0 ] ; then exit 1; fi |
| 998 | else exit 1 |
| 999 | fi |
| 1000 | echo " OK" |
| 1001 | fi |
| 1002 | fi |
| 1003 | |
| 1004 | # End of loop for 8/16/32-bit tests |
| 1005 | done |
| 1006 | |
| 1007 | # Clean up local working files |
| 1008 | rm -f test3input test3output test3outputA testNinput testsaved* teststderr teststdout testtry |
| 1009 | |
| 1010 | # End |