summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/util/pcre/RunTest
blob: 5ae334a05e9964b1c79d350d346bcc1ab7538078 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
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