libraries/spcre/libpcre/pcre/RunTest
author Tom Sutcliffe <thomas.sutcliffe@accenture.com>
Thu, 26 Aug 2010 00:49:35 +0100
changeset 45 534b01198c2d
parent 0 7f656887cf89
permissions -rw-r--r--
Added ENotifyKeypresses and ECaptureCtrlC flags to CCommandBase. Commands can now get keypresses and handle ctrl-C via callbacks instead of having to implement custom active objects. As part of this extended the CCommandBase extension interface to MCommandExtensionsV2 for the new virtual functions KeyPressed(TUint aKeyCode, TUint aModifiers) and CtrlCPressed(). sudo now cleans up correctly by using ECaptureCtrlC.

#! /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
    echo " "
    echo "** Test 2 requires a lot of stack. If it has crashed with a"
    echo "** segmentation fault, it may be that you do not have enough"
    echo "** stack available by default. Please see the 'pcrestack' man"
    echo "** page for a discussion of PCRE's stack usage."
    echo " "
    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