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