Annotation of embedaddon/pcre/RunTest, revision 1.1
1.1 ! misho 1: #! /bin/sh
! 2:
! 3: # Run the PCRE tests using the pcretest program. The appropriate tests are
! 4: # selected, depending on which build-time options were used.
! 5:
! 6: # All tests are now run both with and without -s, to ensure that everything is
! 7: # tested with and without studying. However, there are some tests that produce
! 8: # different output after studying, typically when we are tracing the actual
! 9: # matching process (for example, using auto-callouts). In these few cases, the
! 10: # tests are duplicated in the files, one with /S to force studying always, and
! 11: # one with /SS to force *not* studying always. The use of -s doesn't then make
! 12: # any difference to their output. There is also one test which compiles invalid
! 13: # UTF-8 with the UTF-8 check turned off; for this, studying must also be
! 14: # disabled with /SS.
! 15:
! 16: # When JIT support is available, all the tests are also run with -s+ to test
! 17: # (again, almost) everything with studying and the JIT option. There are also
! 18: # two tests for JIT-specific features, one to be run when JIT support is
! 19: # available, and one when it is not.
! 20:
! 21: # The arguments for this script can be individual test numbers, or the word
! 22: # "valgrind", or "sim" followed by an argument to run cross-compiled
! 23: # executables under a simulator, for example:
! 24: #
! 25: # RunTest 3 sim "qemu-arm -s 8388608"
! 26:
! 27: valgrind=
! 28: sim=
! 29:
! 30: # Select which tests to run; for those that are explicitly requested, check
! 31: # that the necessary optional facilities are available.
! 32:
! 33: do1=no
! 34: do2=no
! 35: do3=no
! 36: do4=no
! 37: do5=no
! 38: do6=no
! 39: do7=no
! 40: do8=no
! 41: do9=no
! 42: do10=no
! 43: do11=no
! 44: do12=no
! 45: do13=no
! 46: do14=no
! 47: do15=no
! 48:
! 49: while [ $# -gt 0 ] ; do
! 50: case $1 in
! 51: 1) do1=yes;;
! 52: 2) do2=yes;;
! 53: 3) do3=yes;;
! 54: 4) do4=yes;;
! 55: 5) do5=yes;;
! 56: 6) do6=yes;;
! 57: 7) do7=yes;;
! 58: 8) do8=yes;;
! 59: 9) do9=yes;;
! 60: 10) do10=yes;;
! 61: 11) do11=yes;;
! 62: 12) do12=yes;;
! 63: 13) do13=yes;;
! 64: 14) do14=yes;;
! 65: 15) do15=yes;;
! 66: valgrind) valgrind="valgrind -q --smc-check=all";;
! 67: sim) shift; sim=$1;;
! 68: *) echo "Unknown test number $1"; exit 1;;
! 69: esac
! 70: shift
! 71: done
! 72:
! 73: # Set up a suitable "diff" command for comparison. Some systems
! 74: # have a diff that lacks a -u option. Try to deal with this.
! 75:
! 76: if diff -u /dev/null /dev/null; then cf="diff -u"; else cf="diff"; fi
! 77:
! 78: # Find the test data
! 79:
! 80: if [ -n "$srcdir" -a -d "$srcdir" ] ; then
! 81: testdata="$srcdir/testdata"
! 82: elif [ -d "./testdata" ] ; then
! 83: testdata=./testdata
! 84: elif [ -d "../testdata" ] ; then
! 85: testdata=../testdata
! 86: else
! 87: echo "Cannot find the testdata directory"
! 88: exit 1
! 89: fi
! 90:
! 91: # Find which optional facilities are available. In some Windows environments
! 92: # the output of pcretest -C has CRLF at the end of each line, but the shell
! 93: # strips only linefeeds from the output of a `backquoted` command. Hence the
! 94: # alternative patterns.
! 95:
! 96: case `$sim ./pcretest -C | $sim ./pcregrep 'Internal link size'` in
! 97: *2|*2[[:space:]]) link_size=2;;
! 98: *3|*3[[:space:]]) link_size=3;;
! 99: *4|*4[[:space:]]) link_size=4;;
! 100: *) echo "Failed to find internal link size"; exit 1;;
! 101: esac
! 102:
! 103: $sim ./pcretest -C | $sim ./pcregrep 'No UTF-8 support' >/dev/null
! 104: utf8=$?
! 105:
! 106: $sim ./pcretest -C | $sim ./pcregrep 'No Unicode properties support' >/dev/null
! 107: ucp=$?
! 108:
! 109: jitopt=
! 110: $sim ./pcretest -C | $sim ./pcregrep 'No just-in-time compiler support' \
! 111: >/dev/null
! 112: jit=$?
! 113: if [ $jit -ne 0 ] ; then
! 114: jitopt=-s+
! 115: fi
! 116:
! 117: if [ $utf8 -eq 0 ] ; then
! 118: if [ $do4 = yes ] ; then
! 119: echo "Can't run test 4 because UTF-8 support is not configured"
! 120: exit 1
! 121: fi
! 122: if [ $do5 = yes ] ; then
! 123: echo "Can't run test 5 because UTF-8 support is not configured"
! 124: exit 1
! 125: fi
! 126: if [ $do8 = yes ] ; then
! 127: echo "Can't run test 8 because UTF-8 support is not configured"
! 128: exit 1
! 129: fi
! 130: if [ $do12 = yes ] ; then
! 131: echo "Can't run test 12 because UTF-8 support is not configured"
! 132: exit 1
! 133: fi
! 134: fi
! 135:
! 136: if [ $ucp -eq 0 ] ; then
! 137: if [ $do6 = yes ] ; then
! 138: echo "Can't run test 6 because Unicode property support is not configured"
! 139: exit 1
! 140: fi
! 141: if [ $do9 = yes ] ; then
! 142: echo "Can't run test 9 because Unicode property support is not configured"
! 143: exit 1
! 144: fi
! 145: if [ $do10 = yes ] ; then
! 146: echo "Can't run test 10 because Unicode property support is not configured"
! 147: exit 1
! 148: fi
! 149: if [ $do13 = yes ] ; then
! 150: echo "Can't run test 12 because Unicode property support is not configured"
! 151: exit 1
! 152: fi
! 153: fi
! 154:
! 155: if [ $link_size -ne 2 ] ; then
! 156: if [ $do10 = yes ] ; then
! 157: echo "Can't run test 10 because the link size ($link_size) is not 2"
! 158: exit 1
! 159: fi
! 160: fi
! 161:
! 162: if [ $jit -eq 0 ] ; then
! 163: if [ $do14 = "yes" ] ; then
! 164: echo "Can't run test 14 because JIT support is not configured"
! 165: exit 1
! 166: fi
! 167: else
! 168: if [ $do15 = "yes" ] ; then
! 169: echo "Can't run test 15 because JIT support is configured"
! 170: exit 1
! 171: fi
! 172: fi
! 173:
! 174: # If no specific tests were requested, select all. Those that are not
! 175: # relevant will be skipped.
! 176:
! 177: if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \
! 178: $do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \
! 179: $do9 = no -a $do10 = no -a $do11 = no -a $do12 = no -a \
! 180: $do13 = no -a $do14 = no -a $do15 = no ] ; then
! 181: do1=yes
! 182: do2=yes
! 183: do3=yes
! 184: do4=yes
! 185: do5=yes
! 186: do6=yes
! 187: do7=yes
! 188: do8=yes
! 189: do9=yes
! 190: do10=yes
! 191: do11=yes
! 192: do12=yes
! 193: do13=yes
! 194: do14=yes
! 195: do15=yes
! 196: fi
! 197:
! 198: # Show which release and which test data
! 199:
! 200: echo ""
! 201: echo PCRE C library tests using test data from $testdata
! 202: $sim ./pcretest /dev/null
! 203:
! 204: # Primary test, compatible with JIT and all versions of Perl >= 5.8
! 205:
! 206: if [ $do1 = yes ] ; then
! 207: echo "Test 1: main functionality (Compatible with Perl >= 5.8)"
! 208: for opt in "" "-s" $jitopt; do
! 209: $sim $valgrind ./pcretest -q $opt $testdata/testinput1 testtry
! 210: if [ $? = 0 ] ; then
! 211: $cf $testdata/testoutput1 testtry
! 212: if [ $? != 0 ] ; then exit 1; fi
! 213: else exit 1
! 214: fi
! 215: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 216: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 217: else echo " OK"
! 218: fi
! 219: done
! 220: fi
! 221:
! 222: # PCRE tests that are not JIT or Perl-compatible: API, errors, internals
! 223:
! 224: if [ $do2 = yes ] ; then
! 225: echo "Test 2: API, errors, internals, and non-Perl stuff (not UTF-8)"
! 226: for opt in "" "-s" $jitopt; do
! 227: $sim $valgrind ./pcretest -q $opt $testdata/testinput2 testtry
! 228: if [ $? = 0 ] ; then
! 229: $cf $testdata/testoutput2 testtry
! 230: if [ $? != 0 ] ; then exit 1; fi
! 231: else
! 232: echo " "
! 233: echo "** Test 2 requires a lot of stack. If it has crashed with a"
! 234: echo "** segmentation fault, it may be that you do not have enough"
! 235: echo "** stack available by default. Please see the 'pcrestack' man"
! 236: echo "** page for a discussion of PCRE's stack usage."
! 237: echo " "
! 238: exit 1
! 239: fi
! 240: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 241: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 242: else echo " OK"
! 243: fi
! 244: done
! 245: fi
! 246:
! 247: # Locale-specific tests, provided that either the "fr_FR" or the "french"
! 248: # locale is available. The former is the Unix-like standard; the latter is
! 249: # for Windows. Another possibility is "fr", which needs to be run against
! 250: # the Windows-specific input and output files.
! 251:
! 252: if [ $do3 = yes ] ; then
! 253: locale -a | grep '^fr_FR$' >/dev/null
! 254: if [ $? -eq 0 ] ; then
! 255: locale=fr_FR
! 256: infile=$testdata/testinput3
! 257: outfile=$testdata/testoutput3
! 258: else
! 259: infile=test3input
! 260: outfile=test3output
! 261: locale -a | grep '^french$' >/dev/null
! 262: if [ $? -eq 0 ] ; then
! 263: locale=french
! 264: sed 's/fr_FR/french/' $testdata/testinput3 >test3input
! 265: sed 's/fr_FR/french/' $testdata/testoutput3 >test3output
! 266: else
! 267: locale -a | grep '^fr$' >/dev/null
! 268: if [ $? -eq 0 ] ; then
! 269: locale=fr
! 270: sed 's/fr_FR/fr/' $testdata/wintestinput3 >test3input
! 271: sed 's/fr_FR/fr/' $testdata/wintestoutput3 >test3output
! 272: else
! 273: locale=
! 274: fi
! 275: fi
! 276: fi
! 277:
! 278: if [ "$locale" != "" ] ; then
! 279: echo "Test 3: locale-specific features (using '$locale' locale)"
! 280: for opt in "" "-s" $jitopt; do
! 281: $sim $valgrind ./pcretest -q $opt $infile testtry
! 282: if [ $? = 0 ] ; then
! 283: $cf $outfile testtry
! 284: if [ $? != 0 ] ; then
! 285: echo " "
! 286: echo "Locale test did not run entirely successfully."
! 287: echo "This usually means that there is a problem with the locale"
! 288: echo "settings rather than a bug in PCRE."
! 289: break;
! 290: else
! 291: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 292: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 293: else echo " OK"
! 294: fi
! 295: fi
! 296: else exit 1
! 297: fi
! 298: done
! 299: else
! 300: echo "Cannot test locale-specific features - none of the 'fr_FR', 'fr' or"
! 301: echo "'french' locales exist, or the \"locale\" command is not available"
! 302: echo "to check for them."
! 303: echo " "
! 304: fi
! 305: fi
! 306:
! 307: # Additional tests for UTF8 support
! 308:
! 309: if [ $do4 = yes ] ; then
! 310: echo "Test 4: UTF-8 support (Compatible with Perl >= 5.8)"
! 311: if [ $utf8 -eq 0 ] ; then
! 312: echo " Skipped because UTF-8 support is not available"
! 313: else
! 314: for opt in "" "-s" $jitopt; do
! 315: $sim $valgrind ./pcretest -q $opt $testdata/testinput4 testtry
! 316: if [ $? = 0 ] ; then
! 317: $cf $testdata/testoutput4 testtry
! 318: if [ $? != 0 ] ; then exit 1; fi
! 319: else exit 1
! 320: fi
! 321: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 322: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 323: else echo " OK"
! 324: fi
! 325: done
! 326: fi
! 327: fi
! 328:
! 329: if [ $do5 = yes ] ; then
! 330: echo "Test 5: API, internals, and non-Perl stuff for UTF-8 support"
! 331: if [ $utf8 -eq 0 ] ; then
! 332: echo " Skipped because UTF-8 support is not available"
! 333: else
! 334: for opt in "" "-s" $jitopt; do
! 335: $sim $valgrind ./pcretest -q $opt $testdata/testinput5 testtry
! 336: if [ $? = 0 ] ; then
! 337: $cf $testdata/testoutput5 testtry
! 338: if [ $? != 0 ] ; then exit 1; fi
! 339: else exit 1
! 340: fi
! 341: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 342: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 343: else echo " OK"
! 344: fi
! 345: done
! 346: fi
! 347: fi
! 348:
! 349: if [ $do6 = yes ] ; then
! 350: echo "Test 6: Unicode property support (Compatible with Perl >= 5.10)"
! 351: if [ $utf8 -eq 0 -o $ucp -eq 0 ] ; then
! 352: echo " Skipped because Unicode property support is not available"
! 353: else
! 354: for opt in "" "-s" $jitopt; do
! 355: $sim $valgrind ./pcretest -q $opt $testdata/testinput6 testtry
! 356: if [ $? = 0 ] ; then
! 357: $cf $testdata/testoutput6 testtry
! 358: if [ $? != 0 ] ; then exit 1; fi
! 359: else exit 1
! 360: fi
! 361: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 362: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 363: else echo " OK"
! 364: fi
! 365: done
! 366: fi
! 367: fi
! 368:
! 369: # Tests for DFA matching support
! 370:
! 371: if [ $do7 = yes ] ; then
! 372: echo "Test 7: DFA matching"
! 373: for opt in "" "-s"; do
! 374: $sim $valgrind ./pcretest -q $opt -dfa $testdata/testinput7 testtry
! 375: if [ $? = 0 ] ; then
! 376: $cf $testdata/testoutput7 testtry
! 377: if [ $? != 0 ] ; then exit 1; fi
! 378: else exit 1
! 379: fi
! 380: if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
! 381: done
! 382: fi
! 383:
! 384: if [ $do8 = yes ] ; then
! 385: echo "Test 8: DFA matching with UTF-8"
! 386: if [ $utf8 -eq 0 ] ; then
! 387: echo " Skipped because UTF-8 support is not available"
! 388: else
! 389: for opt in "" "-s"; do
! 390: $sim $valgrind ./pcretest -q $opt -dfa $testdata/testinput8 testtry
! 391: if [ $? = 0 ] ; then
! 392: $cf $testdata/testoutput8 testtry
! 393: if [ $? != 0 ] ; then exit 1; fi
! 394: else exit 1
! 395: fi
! 396: if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
! 397: done
! 398: fi
! 399: fi
! 400:
! 401: if [ $do9 = yes ] ; then
! 402: echo "Test 9: DFA matching with Unicode properties"
! 403: if [ $utf8 -eq 0 -o $ucp -eq 0 ] ; then
! 404: echo " Skipped because Unicode property support is not available"
! 405: else
! 406: for opt in "" "-s"; do
! 407: $sim $valgrind ./pcretest -q $opt -dfa $testdata/testinput9 testtry
! 408: if [ $? = 0 ] ; then
! 409: $cf $testdata/testoutput9 testtry
! 410: if [ $? != 0 ] ; then exit 1; fi
! 411: else exit 1
! 412: fi
! 413: if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
! 414: done
! 415: fi
! 416: fi
! 417:
! 418: # Test of internal offsets and code sizes. This test is run only when there
! 419: # is Unicode property support and the link size is 2. The actual tests are
! 420: # mostly the same as in some of the above, but in this test we inspect some
! 421: # offsets and sizes that require a known link size. This is a doublecheck for
! 422: # the maintainer, just in case something changes unexpectely.
! 423:
! 424: if [ $do10 = yes ] ; then
! 425: echo "Test 10: Internal offsets and code size tests"
! 426: if [ $link_size -ne 2 ] ; then
! 427: echo " Skipped because link size is not 2"
! 428: elif [ $ucp -eq 0 ] ; then
! 429: echo " Skipped because Unicode property support is not available"
! 430: else
! 431: for opt in "" "-s"; do
! 432: $sim $valgrind ./pcretest -q $opt $testdata/testinput10 testtry
! 433: if [ $? = 0 ] ; then
! 434: $cf $testdata/testoutput10 testtry
! 435: if [ $? != 0 ] ; then exit 1; fi
! 436: else exit 1
! 437: fi
! 438: if [ "$opt" = "-s" ] ; then echo " OK with study" ; else echo " OK"; fi
! 439: done
! 440: fi
! 441: fi
! 442:
! 443: # Test of Perl >= 5.10 features without UTF8 support
! 444:
! 445: if [ $do11 = yes ] ; then
! 446: echo "Test 11: Features from Perl >= 5.10 without UTF8 support"
! 447: for opt in "" "-s" $jitopt; do
! 448: $sim $valgrind ./pcretest -q $opt $testdata/testinput11 testtry
! 449: if [ $? = 0 ] ; then
! 450: $cf $testdata/testoutput11 testtry
! 451: if [ $? != 0 ] ; then exit 1; fi
! 452: else exit 1
! 453: fi
! 454: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 455: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 456: else echo " OK"
! 457: fi
! 458: done
! 459: fi
! 460:
! 461: # Test of Perl >= 5.10 features with UTF8 support
! 462:
! 463: if [ $do12 = yes ] ; then
! 464: echo "Test 12: Features from Perl >= 5.10 with UTF8 support"
! 465: if [ $utf8 -eq 0 ] ; then
! 466: echo " Skipped because UTF-8 support is not available"
! 467: else
! 468: for opt in "" "-s" $jitopt; do
! 469: $sim $valgrind ./pcretest -q $opt $testdata/testinput12 testtry
! 470: if [ $? = 0 ] ; then
! 471: $cf $testdata/testoutput12 testtry
! 472: if [ $? != 0 ] ; then exit 1; fi
! 473: else exit 1
! 474: fi
! 475: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 476: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 477: else echo " OK"
! 478: fi
! 479: done
! 480: fi
! 481: fi
! 482:
! 483: # Test non-Perl-compatible Unicode property support
! 484:
! 485: if [ $do13 = yes ] ; then
! 486: echo "Test 13: API, internals, and non-Perl stuff for Unicode property support"
! 487: if [ $utf8 -eq 0 -o $ucp -eq 0 ] ; then
! 488: echo " Skipped because Unicode property support is not available"
! 489: else
! 490: for opt in "" "-s" $jitopt; do
! 491: $sim $valgrind ./pcretest -q $opt $testdata/testinput13 testtry
! 492: if [ $? = 0 ] ; then
! 493: $cf $testdata/testoutput13 testtry
! 494: if [ $? != 0 ] ; then exit 1; fi
! 495: else exit 1
! 496: fi
! 497: if [ "$opt" = "-s" ] ; then echo " OK with study"
! 498: elif [ "$opt" = "-s+" ] ; then echo " OK with JIT study"
! 499: else echo " OK"
! 500: fi
! 501: done
! 502: fi
! 503: fi
! 504:
! 505: # Test JIT-specific features when JIT is available
! 506:
! 507: if [ $do14 = yes ] ; then
! 508: echo "Test 14: JIT-specific features (JIT available)"
! 509: if [ $jit -eq 0 ] ; then
! 510: echo " Skipped because JIT is not available or not usable"
! 511: else
! 512: $sim $valgrind ./pcretest -q $testdata/testinput14 testtry
! 513: if [ $? = 0 ] ; then
! 514: $cf $testdata/testoutput14 testtry
! 515: if [ $? != 0 ] ; then exit 1; fi
! 516: else exit 1
! 517: fi
! 518: echo " OK"
! 519: fi
! 520: fi
! 521:
! 522: # Test JIT-specific features when JIT is not available
! 523:
! 524: if [ $do15 = yes ] ; then
! 525: echo "Test 15: JIT-specific features (JIT not available)"
! 526: if [ $jit -ne 0 ] ; then
! 527: echo " Skipped because JIT is available"
! 528: else
! 529: $sim $valgrind ./pcretest -q $testdata/testinput15 testtry
! 530: if [ $? = 0 ] ; then
! 531: $cf $testdata/testoutput15 testtry
! 532: if [ $? != 0 ] ; then exit 1; fi
! 533: else exit 1
! 534: fi
! 535: echo " OK"
! 536: fi
! 537: fi
! 538:
! 539: # End
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>