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