Home | History | Annotate | Download | only in pcre
      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 do11=no
     48 do12=no
     49 
     50 while [ $# -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
     68 done
     69 
     70 if [ $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
     83 fi
     84 
     85 if [ $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
    102 fi
    103 
    104 if [ $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
    109 fi
    110 
    111 # If no specific tests were requested, select all that are relevant.
    112 
    113 if [ $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
    128 fi
    129 
    130 # Show which release
    131 
    132 echo ""
    133 echo PCRE C library tests
    134 ./pcretest /dev/null
    135 
    136 # Primary test, compatible with all versions of Perl >= 5.8
    137 
    138 if [ $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"
    147 fi
    148 
    149 # PCRE tests that are not Perl-compatible - API, errors, internals
    150 
    151 if [ $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"
    167 fi
    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 
    173 if [ $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
    213 fi
    214 
    215 # Additional tests for UTF8 support
    216 
    217 if [ $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"
    226 fi
    227 
    228 if [ $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"
    237 fi
    238 
    239 if [ $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"
    248 fi
    249 
    250 # Tests for DFA matching support
    251 
    252 if [ $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"
    261 fi
    262 
    263 if [ $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"
    272 fi
    273 
    274 if [ $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"
    283 fi
    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 
    291 if [ $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"
    300 fi
    301 
    302 # Test of Perl >= 5.10 features
    303 
    304 if [ $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"
    313 fi
    314 
    315 # Test non-Perl-compatible Unicode property support
    316 
    317 if [ $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"
    326 fi
    327 
    328 # End
    329