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