diff options
Diffstat (limited to 'crawl-ref/source/util/pcre/RunTest')
-rw-r--r-- | crawl-ref/source/util/pcre/RunTest | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/crawl-ref/source/util/pcre/RunTest b/crawl-ref/source/util/pcre/RunTest new file mode 100644 index 0000000000..5ae334a05e --- /dev/null +++ b/crawl-ref/source/util/pcre/RunTest @@ -0,0 +1,285 @@ +#! /bin/sh + +# Run PCRE tests. + +valgrind= + +# Set up a suitable "diff" command for comparison. Some systems +# have a diff that lacks a -u option. Try to deal with this. + +if diff -u /dev/null /dev/null; then cf="diff -u"; else cf="diff"; fi + +# Find the test data + +testdata=testdata +if [ -n "$srcdir" -a -d "$srcdir" ] ; then + testdata="$srcdir/testdata" +fi + +# Find which optional facilities are available + +case `./pcretest -C | ./pcregrep 'Internal link size'` in + *2) link_size=2;; + *3) link_size=3;; + *4) link_size=4;; + *) echo "Failed to find internal link size"; exit 1;; +esac + +./pcretest -C | ./pcregrep 'No UTF-8 support' >/dev/null +utf8=$? + +./pcretest -C | ./pcregrep 'No Unicode properties support' >/dev/null +ucp=$? + +# Select which tests to run; for those that are explicitly requested, check +# that the necessary optional facilities are available. + +do1=no +do2=no +do3=no +do4=no +do5=no +do6=no +do7=no +do8=no +do9=no +do10=no + +while [ $# -gt 0 ] ; do + case $1 in + 1) do1=yes;; + 2) do2=yes;; + 3) do3=yes;; + 4) do4=yes;; + 5) do5=yes;; + 6) do6=yes;; + 7) do7=yes;; + 8) do8=yes;; + 9) do9=yes;; + 10) do10=yes;; + valgrind) valgrind="valgrind -q";; + *) echo "Unknown test number $1"; exit 1;; + esac + shift +done + +if [ $utf8 -eq 0 ] ; then + if [ $do4 = yes ] ; then + echo "Can't run test 4 because UTF-8 support is not configured" + exit 1 + fi + if [ $do5 = yes ] ; then + echo "Can't run test 5 because UTF-8 support is not configured" + exit 1 + fi + if [ $do8 = yes ] ; then + echo "Can't run test 8 because UTF-8 support is not configured" + exit 1 + fi +fi + +if [ $ucp -eq 0 ] ; then + if [ $do6 = yes ] ; then + echo "Can't run test 6 because Unicode property support is not configured" + exit 1 + fi + if [ $do9 = yes ] ; then + echo "Can't run test 9 because Unicode property support is not configured" + exit 1 + fi + if [ $do10 = yes ] ; then + echo "Can't run test 10 because Unicode property support is not configured" + exit 1 + fi +fi + +if [ $link_size -ne 2 ] ; then + if [ $do10 = yes ] ; then + echo "Can't run test 10 because the link size ($link_size) is not 2" + exit 1 + fi +fi + +# If no specific tests were requested, select all that are relevant. + +if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \ + $do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \ + $do9 = no -a $do10 = no ] ; then + do1=yes + do2=yes + do3=yes + if [ $utf8 -ne 0 ] ; then do4=yes; fi + if [ $utf8 -ne 0 ] ; then do5=yes; fi + if [ $utf8 -ne 0 -a $ucp -ne 0 ] ; then do6=yes; fi + do7=yes + if [ $utf8 -ne 0 ] ; then do8=yes; fi + if [ $utf8 -ne 0 -a $ucp -ne 0 ] ; then do9=yes; fi + if [ $link_size -eq 2 -a $ucp -ne 0 ] ; then do10=yes; fi +fi + +# Show which release + +echo "" +echo PCRE C library tests +./pcretest /dev/null + +# Primary test, Perl-compatible + +if [ $do1 = yes ] ; then + echo "Test 1: main functionality (Perl compatible)" + $valgrind ./pcretest -q $testdata/testinput1 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput1 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +# PCRE tests that are not Perl-compatible - API & error tests, mostly + +if [ $do2 = yes ] ; then + echo "Test 2: API and error handling (not Perl compatible)" + $valgrind ./pcretest -q $testdata/testinput2 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput2 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +# Locale-specific tests, provided that either the "fr_FR" or the "french" +# locale is available. The former is the Unix-like standard; the latter is +# for Windows. + +if [ $do3 = yes ] ; then + locale -a | grep '^fr_FR$' >/dev/null + if [ $? -eq 0 ] ; then + locale=fr_FR + infile=$testdata/testinput3 + outfile=$testdata/testoutput3 + else + locale -a | grep '^french$' >/dev/null + if [ $? -eq 0 ] ; then + locale=french + sed 's/fr_FR/french/' $testdata/testinput3 >test3input + sed 's/fr_FR/french/' $testdata/testoutput3 >test3output + infile=test3input + outfile=test3output + else + locale= + fi + fi + + if [ "$locale" != "" ] ; then + echo "Test 3: locale-specific features (using '$locale' locale)" + $valgrind ./pcretest -q $infile testtry + if [ $? = 0 ] ; then + $cf $outfile testtry + if [ $? != 0 ] ; then + echo " " + echo "Locale test did not run entirely successfully." + echo "This usually means that there is a problem with the locale" + echo "settings rather than a bug in PCRE." + else + echo "OK" + fi + else exit 1 + fi + else + echo "Cannot test locale-specific features - neither the 'fr_FR' nor the" + echo "'french' locale exists, or the \"locale\" command is not available" + echo "to check for them." + echo " " + fi +fi + +# Additional tests for UTF8 support + +if [ $do4 = yes ] ; then + echo "Test 4: UTF-8 support (Perl compatible)" + $valgrind ./pcretest -q $testdata/testinput4 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput4 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +if [ $do5 = yes ] ; then + echo "Test 5: API and internals for UTF-8 support (not Perl compatible)" + $valgrind ./pcretest -q $testdata/testinput5 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput5 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +if [ $do6 = yes ] ; then + echo "Test 6: Unicode property support" + $valgrind ./pcretest -q $testdata/testinput6 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput6 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +# Tests for DFA matching support + +if [ $do7 = yes ] ; then + echo "Test 7: DFA matching" + $valgrind ./pcretest -q -dfa $testdata/testinput7 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput7 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +if [ $do8 = yes ] ; then + echo "Test 8: DFA matching with UTF-8" + $valgrind ./pcretest -q -dfa $testdata/testinput8 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput8 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +if [ $do9 = yes ] ; then + echo "Test 9: DFA matching with Unicode properties" + $valgrind ./pcretest -q -dfa $testdata/testinput9 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput9 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +# Test of internal offsets and code sizes. This test is run only when there +# is Unicode property support and the link size is 2. The actual tests are +# mostly the same as in some of the above, but in this test we inspect some +# offsets and sizes that require a known link size. This is a doublecheck for +# the maintainer, just in case something changes unexpectely. + +if [ $do10 = yes ] ; then + echo "Test 10: Internal offsets and code size tests" + $valgrind ./pcretest -q $testdata/testinput10 testtry + if [ $? = 0 ] ; then + $cf $testdata/testoutput10 testtry + if [ $? != 0 ] ; then exit 1; fi + else exit 1 + fi + echo "OK" +fi + +# End |