1@echo off
2@rem This file must use CRLF linebreaks to function properly
3@rem and requires both pcretest and pcregrep
4@rem  This file was originally contributed by Ralf Junker, and touched up by
5@rem  Daniel Richard G. Tests 10-12 added by Philip H.
6@rem  Philip H also changed test 3 to use "wintest" files.
7@rem
8@rem  Updated by Tom Fortmann to support explicit test numbers on the command line.
9@rem  Added argument validation and added error reporting.
10@rem
11@rem  MS Windows batch file to run pcretest on testfiles with the correct
12@rem  options.
13@rem
14@rem Sheri Pierce added logic to skip feature dependent tests
15@rem tests 4 5 9 15 and 18 require utf support
16@rem tests 6 7 10 16 and 19 require ucp support
17@rem 11 requires ucp and link size 2
18@rem 12 requires presense of jit support
19@rem 13 requires absence of jit support
20@rem Sheri P also added override tests for study and jit testing
21@rem Zoltan Herczeg added libpcre16 support
22
23setlocal enabledelayedexpansion
24if [%srcdir%]==[] (
25if exist testdata\ set srcdir=.)
26if [%srcdir%]==[] (
27if exist ..\testdata\ set srcdir=..)
28if [%srcdir%]==[] (
29if exist ..\..\testdata\ set srcdir=..\..)
30if NOT exist "%srcdir%\testdata\" (
31Error: echo distribution testdata folder not found!
32call :conferror
33exit /b 1
34goto :eof
35)
36
37if "%pcretest%"=="" set pcretest=.\pcretest.exe
38
39echo source dir is %srcdir%
40echo pcretest=%pcretest%
41
42if NOT exist "%pcretest%" (
43echo Error: "%pcretest%" not found!
44echo.
45call :conferror
46exit /b 1
47)
48
49"%pcretest%" -C linksize >NUL
50set link_size=%ERRORLEVEL%
51"%pcretest%" -C pcre8 >NUL
52set support8=%ERRORLEVEL%
53"%pcretest%" -C pcre16 >NUL
54set support16=%ERRORLEVEL%
55"%pcretest%" -C utf >NUL
56set utf=%ERRORLEVEL%
57"%pcretest%" -C ucp >NUL
58set ucp=%ERRORLEVEL%
59"%pcretest%" -C jit >NUL
60set jit=%ERRORLEVEL%
61
62if %support8% EQU 1 (
63if not exist testout8 md testout8
64if not exist testoutstudy8 md testoutstudy8
65if not exist testoutjit8 md testoutjit8
66)
67
68if %support16% EQU 1 (
69if not exist testout16 md testout16
70if not exist testoutstudy16 md testoutstudy16
71if not exist testoutjit16 md testoutjit16
72)
73
74set do1=no
75set do2=no
76set do3=no
77set do4=no
78set do5=no
79set do6=no
80set do7=no
81set do8=no
82set do9=no
83set do10=no
84set do11=no
85set do12=no
86set do13=no
87set do14=no
88set do15=no
89set do16=no
90set do17=no
91set do18=no
92set do19=no
93set do20=no
94set all=yes
95
96for %%a in (%*) do (
97  set valid=no
98  for %%v in (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20) do if %%v == %%a set valid=yes
99  if "!valid!" == "yes" (
100    set do%%a=yes
101    set all=no
102) else (
103    echo Invalid test number - %%a!
104        echo Usage %0 [ test_number ] ...
105        echo Where test_number is one or more optional test numbers 1 through 20, default is all tests.
106        exit /b 1
107)
108)
109set failed="no"
110
111if "%all%" == "yes" (
112  set do1=yes
113  set do2=yes
114  set do3=yes
115  set do4=yes
116  set do5=yes
117  set do6=yes
118  set do7=yes
119  set do8=yes
120  set do9=yes
121  set do10=yes
122  set do11=yes
123  set do12=yes
124  set do13=yes
125  set do14=yes
126  set do15=yes
127  set do16=yes
128  set do17=yes
129  set do18=yes
130  set do19=yes
131  set do20=yes
132)
133
134@echo RunTest.bat's pcretest output is written to newly created subfolders named
135@echo testout, testoutstudy and testoutjit.
136@echo.
137
138set mode=
139set bits=8
140
141:nextMode
142if "%mode%" == "" (
143  if %support8% EQU 0 goto modeSkip
144  echo.
145  echo ---- Testing 8-bit library ----
146  echo.
147) else (
148  if %support16% EQU 0 goto modeSkip
149  echo.
150  echo ---- Testing 16-bit library ----
151  echo.
152)
153if "%do1%" == "yes" call :do1
154if "%do2%" == "yes" call :do2
155if "%do3%" == "yes" call :do3
156if "%do4%" == "yes" call :do4
157if "%do5%" == "yes" call :do5
158if "%do6%" == "yes" call :do6
159if "%do7%" == "yes" call :do7
160if "%do8%" == "yes" call :do8
161if "%do9%" == "yes" call :do9
162if "%do10%" == "yes" call :do10
163if "%do11%" == "yes" call :do11
164if "%do12%" == "yes" call :do12
165if "%do13%" == "yes" call :do13
166if "%do14%" == "yes" call :do14
167if "%do15%" == "yes" call :do15
168if "%do16%" == "yes" call :do16
169if "%do17%" == "yes" call :do17
170if "%do18%" == "yes" call :do18
171if "%do19%" == "yes" call :do19
172if "%do20%" == "yes" call :do20
173:modeSkip
174if "%mode%" == "" (
175  set mode=-16
176  set bits=16
177  goto nextMode
178)
179
180if %failed% == "yes" (
181echo In above output, one or more of the various tests failed!
182exit /b 1
183)
184echo All OK
185goto :eof
186
187:runsub
188@rem Function to execute pcretest and compare the output
189@rem Arguments are as follows:
190@rem
191@rem       1 = test number
192@rem       2 = outputdir
193@rem       3 = test name use double quotes
194@rem   4 - 9 = pcretest options
195
196if [%1] == [] (
197  echo Missing test number argument!
198  exit /b 1
199)
200
201if [%2] == [] (
202  echo Missing outputdir!
203  exit /b 1
204)
205
206if [%3] == [] (
207  echo Missing test name argument!
208  exit /b 1
209)
210
211set testinput=testinput%1
212set testoutput=testoutput%1
213if exist %srcdir%\testdata\win%testinput% (
214  set testinput=wintestinput%1
215  set testoutput=wintestoutput%1
216)
217
218echo Test %1: %3
219"%pcretest%" %mode% %4 %5 %6 %7 %8 %9 "%srcdir%\testdata\%testinput%">%2%bits%\%testoutput%
220if errorlevel 1 (
221  echo.          failed executing command-line:
222  echo.            "%pcretest%" %mode% %4 %5 %6 %7 %8 %9 "%srcdir%\testdata\%testinput%"^>%2%bits%\%testoutput%
223  set failed="yes"
224  goto :eof
225)
226
227if [%1]==[11] (
228  fc /n "%srcdir%\testdata\%testoutput%-%bits%" "%2%bits%\%testoutput%">NUL
229) else (
230  fc /n "%srcdir%\testdata\%testoutput%" "%2%bits%\%testoutput%">NUL
231)
232if errorlevel 1 (
233  echo.          failed comparison: fc /n "%srcdir%\testdata\%testoutput%" "%2%bits%\%testoutput%"
234  if [%1]==[2] (
235    echo.
236    echo ** Test 2 requires a lot of stack. PCRE can be configured to
237    echo ** use heap for recursion. Otherwise, to pass Test 2
238    echo ** you generally need to allocate 8 mb stack to PCRE.
239    echo ** See the 'pcrestack' page for a discussion of PCRE's
240    echo ** stack usage.
241    echo.
242)
243  if [%1]==[3] (
244    echo.
245    echo ** Test 3 failure usually means french locale is not
246    echo ** available on the system, rather than a bug or problem with PCRE.
247    echo.
248    goto :eof
249)
250
251  set failed="yes"
252  goto :eof
253)
254
255echo.          Passed.
256goto :eof
257
258:do1
259call :runsub 1 testout "Main functionality - Compatible with Perl 5.8 and above" -q
260call :runsub 1 testoutstudy "Test with Study Override" -q -s
261if %jit% EQU 1 call :runsub 1 testoutjit "Test with JIT Override" -q -s+
262goto :eof
263
264:do2
265  call :runsub 2 testout "API, errors, internals, and non-Perl stuff (not UTF-8)" -q
266  call :runsub 2 testoutstudy "Test with Study Override" -q -s
267  if %jit% EQU 1 call :runsub 2 testoutjit "Test with JIT Override" -q -s+
268goto :eof
269
270:do3
271  call :runsub 3 testout "Locale-specific features" -q
272  call :runsub 3 testoutstudy "Test with Study Override" -q -s
273  if %jit% EQU 1 call :runsub 3 testoutjit "Test with JIT Override" -q -s+
274goto :eof
275
276:do4
277  if %utf% EQU 0 (
278  echo Test 4 Skipped due to absence of UTF-%bits% support.
279  goto :eof
280)
281  call :runsub 4 testout "UTF-%bits% support - Compatible with Perl 5.8 and above" -q
282  call :runsub 4 testoutstudy "Test with Study Override" -q -s
283  if %jit% EQU 1 call :runsub 4 testoutjit "Test with JIT Override" -q -s+
284goto :eof
285
286:do5
287  if %utf% EQU 0 (
288  echo Test 5 Skipped due to absence of UTF-%bits% support.
289  goto :eof
290)
291  call :runsub 5 testout "API, internals, and non-Perl stuff for UTF-%bits% support" -q
292  call :runsub 5 testoutstudy "Test with Study Override" -q -s
293  if %jit% EQU 1 call :runsub 5 testoutjit "Test with JIT Override" -q -s+
294goto :eof
295
296:do6
297if %ucp% EQU 0 (
298  echo Test 6 Skipped due to absence of Unicode property support.
299  goto :eof
300)
301  call :runsub 6 testout "Unicode property support (Compatible with Perl >= 5.10)" -q
302  call :runsub 6 testoutstudy "Test with Study Override" -q -s
303  if %jit% EQU 1 call :runsub 6 testoutjit "Test with JIT Override" -q -s+
304goto :eof
305
306:do7
307if %ucp% EQU 0 (
308  echo Test 7 Skipped due to absence of Unicode property support.
309  goto :eof
310)
311  call :runsub 7 testout "API, internals, and non-Perl stuff for Unicode property support" -q
312  call :runsub 7 testoutstudy "Test with Study Override" -q -s
313  if %jit% EQU 1 call :runsub 7 testoutjit "Test with JIT Override" -q -s+
314goto :eof
315
316:do8
317  call :runsub 8 testout "DFA matching main functionality" -q -dfa
318  call :runsub 8 testoutstudy "Test with Study Override" -q -dfa -s
319goto :eof
320
321:do9
322  if %utf% EQU 0 (
323  echo Test 9 Skipped due to absence of UTF-%bits% support.
324  goto :eof
325)
326  call :runsub 9 testout "DFA matching with UTF-%bits%" -q -dfa
327  call :runsub 9 testoutstudy "Test with Study Override" -q -dfa -s
328  goto :eof
329
330:do10
331  if %ucp% EQU 0 (
332  echo Test 10 Skipped due to absence of Unicode property support.
333  goto :eof
334)
335  call :runsub 10 testout "DFA matching with Unicode properties" -q -dfa
336  call :runsub 10 testoutstudy "Test with Study Override" -q -dfa -s
337goto :eof
338
339:do11
340  if NOT %link_size% EQU 2 (
341  echo Test 11 Skipped because link size is not 2.
342  goto :eof
343)
344  if %ucp% EQU 0 (
345  echo Test 11 Skipped due to absence of Unicode property support.
346  goto :eof
347)
348  call :runsub 11 testout "Internal offsets and code size tests" -q
349  call :runsub 11 testoutstudy "Test with Study Override" -q -s
350goto :eof
351
352:do12
353if %jit% EQU 0 (
354  echo Test 12 Skipped due to absence of JIT support.
355  goto :eof
356)
357  call :runsub 12 testout "JIT-specific features - have JIT" -q
358goto :eof
359
360:do13
361  if %jit% EQU 1 (
362  echo Test 13 Skipped due to presence of JIT support.
363  goto :eof
364)
365  call :runsub 13 testout "JIT-specific features - no JIT" -q
366goto :eof
367
368:do14
369  if NOT %bits% EQU 8 (
370  echo Test 14 Skipped when running 16-bit tests.
371  goto :eof
372)
373  copy /Y "%srcdir%\testdata\saved16" testsaved16
374  call :runsub 14 testout "Specials for the basic 8-bit library" -q
375  call :runsub 14 testoutstudy "Test with Study Override" -q -s
376  if %jit% EQU 1 call :runsub 14 testoutjit "Test with JIT Override" -q -s+
377goto :eof
378
379:do15
380  if NOT %bits% EQU 8 (
381  echo Test 15 Skipped when running 16-bit tests.
382  goto :eof
383)
384  if %utf% EQU 0 (
385  echo Test 15 Skipped due to absence of UTF-8 support.
386  goto :eof
387)
388  call :runsub 15 testout "Specials for the 8-bit library with UTF-8 support" -q
389  call :runsub 15 testoutstudy "Test with Study Override" -q -s
390  if %jit% EQU 1 call :runsub 15 testoutjit "Test with JIT Override" -q -s+
391goto :eof
392
393:do16
394  if NOT %bits% EQU 8 (
395  echo Test 16 Skipped when running 16-bit tests.
396  goto :eof
397)
398  if %ucp% EQU 0 (
399  echo Test 16 Skipped due to absence of Unicode property support.
400  goto :eof
401)
402  call :runsub 16 testout "Specials for the 8-bit library with Unicode propery support" -q
403  call :runsub 16 testoutstudy "Test with Study Override" -q -s
404  if %jit% EQU 1 call :runsub 16 testoutjit "Test with JIT Override" -q -s+
405goto :eof
406
407:do17
408  if NOT %bits% EQU 16 (
409  echo Test 17 Skipped when running 8-bit tests.
410  goto :eof
411)
412  copy /Y "%srcdir%\testdata\saved8" testsaved8
413  copy /Y "%srcdir%\testdata\saved16LE-1" testsaved16LE-1
414  copy /Y "%srcdir%\testdata\saved16BE-1" testsaved16BE-1
415  call :runsub 17 testout "Specials for the basic 8-bit library" -q
416  call :runsub 17 testoutstudy "Test with Study Override" -q -s
417  if %jit% EQU 1 call :runsub 17 testoutjit "Test with JIT Override" -q -s+
418goto :eof
419
420:do18
421  if NOT %bits% EQU 16 (
422  echo Test 18 Skipped when running 8-bit tests.
423  goto :eof
424)
425  if %utf% EQU 0 (
426  echo Test 18 Skipped due to absence of UTF-8 support.
427  goto :eof
428)
429  copy /Y "%srcdir%\testdata\saved16LE-2" testsaved16LE-2
430  copy /Y "%srcdir%\testdata\saved16BE-2" testsaved16BE-2
431  call :runsub 18 testout "Specials for the basic 8-bit library" -q
432  call :runsub 18 testoutstudy "Test with Study Override" -q -s
433  if %jit% EQU 1 call :runsub 18 testoutjit "Test with JIT Override" -q -s+
434goto :eof
435
436:do19
437  if NOT %bits% EQU 16 (
438  echo Test 19 Skipped when running 8-bit tests.
439  goto :eof
440)
441  if %ucp% EQU 0 (
442  echo Test 19 Skipped due to absence of Unicode property support.
443  goto :eof
444)
445  call :runsub 19 testout "Specials for the basic 8-bit library" -q
446  call :runsub 19 testoutstudy "Test with Study Override" -q -s
447  if %jit% EQU 1 call :runsub 19 testoutjit "Test with JIT Override" -q -s+
448goto :eof
449
450:do20
451  if NOT %bits% EQU 16 (
452  echo Test 20 Skipped when running 8-bit tests.
453  goto :eof
454)
455  call :runsub 20 testout "DFA specials for the basic 16-bit library" -q
456  call :runsub 20 testoutstudy "Test with Study Override" -q -s
457goto :eof
458
459:conferror
460@echo.
461@echo Either your build is incomplete or you have a configuration error.
462@echo.
463@echo If configured with cmake and executed via "make test" or the MSVC "RUN_TESTS"
464@echo project, pcre_test.bat defines variables and automatically calls RunTest.bat.
465@echo For manual testing of all available features, after configuring with cmake
466@echo and building, you can run the built pcre_test.bat. For best results with
467@echo cmake builds and tests avoid directories with full path names that include
468@echo spaces for source or build.
469@echo.
470@echo Otherwise, if the build dir is in a subdir of the source dir, testdata needed
471@echo for input and verification should be found automatically when (from the
472@echo location of the the built exes) you call RunTest.bat. By default RunTest.bat
473@echo runs all tests compatible with the linked pcre library but it can be given
474@echo a test number as an argument.
475@echo.
476@echo If the build dir is not under the source dir you can either copy your exes
477@echo to the source folder or copy RunTest.bat and the testdata folder to the
478@echo location of your built exes and then run RunTest.bat.
479@echo.
480goto :eof
481