testreg1.pp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
  1. {$IFDEF FPC}
  2. {$MODE OBJFPC}
  3. {$ENDIF}
  4. {$DEFINE UseRegexCompat}
  5. program testreg1;
  6. uses
  7. {$IFDEF UseRegexCompat}
  8. regexprcompat;
  9. {$ELSE}
  10. regexpr;
  11. {$ENDIF}
  12. var
  13. r : tregexprengine;
  14. index,len : longint;
  15. S : String;
  16. Dest : AnsiString;
  17. procedure do_error(i : longint);
  18. begin
  19. writeln('error near ',i,' index: ',index,' len: ',len);
  20. halt(1);
  21. end;
  22. var
  23. initok: boolean;
  24. begin
  25. writeln('*** Testing unit regexpr ***');
  26. writeln('*** Searching tests ***');
  27. { basic tests }
  28. initok:=GenerateRegExprEngine('.*',[],r);
  29. if not initok then
  30. do_error(90);
  31. if not(RegExprPos(r,'CXXXX',index,len)) or
  32. (index<>0) or (len<>5) then
  33. do_error(91);
  34. DestroyregExprEngine(r);
  35. { java package name }
  36. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  37. if not initok then
  38. do_error(92);
  39. if not(RegExprPos(r,'CXXXX',index,len)) or
  40. (index<>0) or (len<>5) then
  41. do_error(92);
  42. DestroyregExprEngine(r);
  43. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  44. if not initok then
  45. do_error(92);
  46. if not(RegExprPos(r,'CXXXX.A',index,len)) or
  47. (index<>0) or (len<>7) then
  48. do_error(92);
  49. DestroyregExprEngine(r);
  50. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  51. if not initok then
  52. do_error(92);
  53. if not(RegExprPos(r,'CXXXX.A9Package',index,len)) or
  54. (index<>0) or (len<>15) then
  55. do_error(92);
  56. DestroyregExprEngine(r);
  57. initok:=GenerateRegExprEngine('[A-Za-z]+([.][0-9A-Za-z]+)*',[],r);
  58. if not initok then
  59. do_error(92);
  60. if not(RegExprPos(r,'1CXXXX.A9Package',index,len)) or
  61. (index<>1) or (len<>15) then
  62. do_error(92);
  63. DestroyregExprEngine(r);
  64. { singleline }
  65. initok:=GenerateRegExprEngine('^TEST1',[],r);
  66. if not initok then
  67. do_error(101);
  68. if (RegExprPos(r,'THISISATEST1TEST1THIS',index,len)) then
  69. do_error(101);
  70. DestroyregExprEngine(r);
  71. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
  72. if not initok then
  73. do_error(102);
  74. if (RegExprPos(r,'THISISATEST1ANOTHER',index,len)) then
  75. do_error(102);
  76. DestroyregExprEngine(r);
  77. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
  78. if not initok then
  79. do_error(103);
  80. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  81. (index<>0) or (len<>12) then
  82. do_error(103);
  83. DestroyregExprEngine(r);
  84. { multiline }
  85. { UNIX Newline }
  86. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  87. if not initok then
  88. do_error(120);
  89. if not(RegExprPos(r,'THISISATEST1'#10'TEST12',index,len)) or
  90. (index<>13) or (len<>5) then
  91. do_error(120);
  92. DestroyregExprEngine(r);
  93. { Apple Newline }
  94. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  95. if not initok then
  96. do_error(121);
  97. if not(RegExprPos(r,'THISISATEST1'#13'TEST12',index,len)) or
  98. (index<>13) or (len<>5) then
  99. do_error(121);
  100. DestroyregExprEngine(r);
  101. { DOS Newline }
  102. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  103. if not initok then
  104. do_error(122);
  105. if not(RegExprPos(r,'THISISATEST1'#13#10'TEST12',index,len)) or
  106. (index<>14) or (len<>5) then
  107. do_error(122);
  108. DestroyregExprEngine(r);
  109. { IBM Mainframe Newline }
  110. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  111. if not initok then
  112. do_error(123);
  113. if not(RegExprPos(r,'THISISATEST1'#$85'TEST12',index,len)) or
  114. (index<>13) or (len<>5) then
  115. do_error(123);
  116. DestroyregExprEngine(r);
  117. { Some weird cases }
  118. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  119. if not initok then
  120. do_error(124);
  121. if not(RegExprPos(r,#13#10#13#10'TEST12',index,len)) or
  122. (index<>4) or (len<>5) then
  123. do_error(124);
  124. DestroyregExprEngine(r);
  125. initok:=GenerateRegExprEngine('^TEST1',[ref_multiline],r);
  126. if not initok then
  127. do_error(125);
  128. if RegExprPos(r,#13#10#13#10'F',index,len) then
  129. do_error(125);
  130. DestroyregExprEngine(r);
  131. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[ref_multiline],r);
  132. if not initok then
  133. do_error(102);
  134. if (RegExprPos(r,'THISISATEST1ANOTHER',index,len)) then
  135. do_error(102);
  136. DestroyregExprEngine(r);
  137. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)',[],r);
  138. if not initok then
  139. do_error(103);
  140. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  141. (index<>0) or (len<>12) then
  142. do_error(103);
  143. DestroyregExprEngine(r);
  144. { END OF LINE CASES }
  145. initok:=GenerateRegExprEngine('TEST1$',[],r);
  146. if not initok then
  147. do_error(101);
  148. if (RegExprPos(r,'THISISATEST1TEST1THIS',index,len)) then
  149. do_error(101);
  150. DestroyregExprEngine(r);
  151. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
  152. if not initok then
  153. do_error(102);
  154. if not(RegExprPos(r,'!TEST1ANOTHER',index,len)) or
  155. (index<>1) or (len<>12) then
  156. DestroyregExprEngine(r);
  157. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
  158. if not initok then
  159. do_error(102);
  160. if not(RegExprPos(r,'!TEST1ANOTHERFOOBARTEST1ANOTHER',index,len)) or
  161. (index<>19) or (len<>12) then
  162. DestroyregExprEngine(r);
  163. { UNIX Newline }
  164. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  165. if not initok then
  166. do_error(120);
  167. if not(RegExprPos(r,'THISISATEST1'#10'TEST12',index,len)) or
  168. (index<>7) or (len<>5) then
  169. do_error(120);
  170. DestroyregExprEngine(r);
  171. { Apple Newline }
  172. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  173. if not initok then
  174. do_error(121);
  175. if not(RegExprPos(r,'THISISATEST1'#13'TEST12',index,len)) or
  176. (index<>7) or (len<>5) then
  177. do_error(121);
  178. DestroyregExprEngine(r);
  179. { DOS Newline }
  180. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  181. if not initok then
  182. do_error(122);
  183. if not(RegExprPos(r,'THISISATEST1'#13#10'TEST12',index,len)) or
  184. (index<>7) or (len<>5) then
  185. do_error(122);
  186. DestroyregExprEngine(r);
  187. { IBM Mainframe Newline }
  188. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  189. if not initok then
  190. do_error(123);
  191. if not(RegExprPos(r,'THISISATEST1'#$85'TEST12',index,len)) or
  192. (index<>7) or (len<>5) then
  193. do_error(123);
  194. DestroyregExprEngine(r);
  195. { Some weird cases }
  196. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  197. if not initok then
  198. do_error(124);
  199. if not(RegExprPos(r,#13#10#13#10'TEST1'#13#10,index,len)) or
  200. (index<>4) or (len<>5) then
  201. do_error(124);
  202. DestroyregExprEngine(r);
  203. initok:=GenerateRegExprEngine('TEST1$',[ref_multiline],r);
  204. if not initok then
  205. do_error(125);
  206. if RegExprPos(r,#13#10#13#10'F'#13#10#13#10,index,len) then
  207. do_error(125);
  208. DestroyregExprEngine(r);
  209. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[ref_multiline],r);
  210. if not initok then
  211. do_error(102);
  212. if (RegExprPos(r,'THISISATEST1ANOTHERFOO',index,len)) then
  213. do_error(102);
  214. DestroyregExprEngine(r);
  215. initok:=GenerateRegExprEngine('TEST1(ANOTHER)$',[],r);
  216. if not initok then
  217. do_error(103);
  218. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  219. (index<>0) or (len<>12) then
  220. do_error(103);
  221. DestroyregExprEngine(r);
  222. { start and end of string handling }
  223. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)$',[],r);
  224. if not initok then
  225. do_error(103);
  226. if not(RegExprPos(r,'TEST1ANOTHER',index,len)) or
  227. (index<>0) or (len<>12) then
  228. do_error(103);
  229. DestroyregExprEngine(r);
  230. initok:=GenerateRegExprEngine('^TEST1(ANOTHER)$',[],r);
  231. if not initok then
  232. do_error(103);
  233. if RegExprPos(r,'FOOTEST1ANOTHER',index,len) then
  234. do_error(103);
  235. DestroyregExprEngine(r);
  236. (* {n,} tests *)
  237. initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
  238. if not initok then
  239. do_error(700);
  240. if not(RegExprPos(r,'C',index,len)) or
  241. (index<>0) or (len<>0) then
  242. do_error(700);
  243. DestroyregExprEngine(r);
  244. initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
  245. if not initok then
  246. do_error(701);
  247. if not(RegExprPos(r,'AZ',index,len)) or
  248. (index<>0) or (len<>2) then
  249. do_error(701);
  250. DestroyregExprEngine(r);
  251. initok:=GenerateRegExprEngine('(AZ){0,}',[],r);
  252. if not initok then
  253. do_error(702);
  254. if not(RegExprPos(r,'AZAZ',index,len)) or
  255. (index<>0) or (len<>4) then
  256. do_error(702);
  257. DestroyregExprEngine(r);
  258. initok:=GenerateRegExprEngine('Cat(AZ){0,}',[],r);
  259. if not initok then
  260. do_error(703);
  261. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  262. (index<>0) or (len<>7) then
  263. do_error(703);
  264. DestroyregExprEngine(r);
  265. initok:=GenerateRegExprEngine('C(AZ){3,}',[],r);
  266. if not initok then
  267. do_error(704);
  268. if (RegExprPos(r,'AZAZAZ',index,len)) then
  269. do_error(704);
  270. DestroyregExprEngine(r);
  271. initok:=GenerateRegExprEngine('Cat(AZ){3,}',[],r);
  272. if not initok then
  273. do_error(705);
  274. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  275. (index<>1) or (len<>9) then
  276. do_error(705);
  277. DestroyregExprEngine(r);
  278. {$IFDEF UseRegexCompat}
  279. initok:=GenerateRegExprEngine('Cat(AZ){2,}Q',[],r);
  280. if not initok then
  281. do_error(705);
  282. if not(RegExprPos(r,'BCatAZAZAZAZQDABCD',index,len)) or
  283. (index<>1) or (len<>12) then
  284. do_error(705);
  285. DestroyregExprEngine(r);
  286. {$ENDIF}
  287. initok:=GenerateRegExprEngine('CatAZ{0,}',[],r);
  288. if not initok then
  289. do_error(706);
  290. if RegExprPos(r,'BCatDAZZZBCD',index,len) then
  291. do_error(706);
  292. DestroyregExprEngine(r);
  293. (* {n} tests *)
  294. initok:=GenerateRegExprEngine('Cat(AZ){3}',[],r);
  295. if not initok then
  296. do_error(715);
  297. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  298. (index<>1) or (len<>9) then
  299. do_error(715);
  300. DestroyregExprEngine(r);
  301. initok:=GenerateRegExprEngine('CatAz{5}',[],r);
  302. if not initok then
  303. do_error(716);
  304. if not(RegExprPos(r,'BCatAzzzzzDABCD',index,len)) or
  305. (index<>1) or (len<>9) then
  306. do_error(716);
  307. initok:=GenerateRegExprEngine('CatAz{5}',[],r);
  308. if not initok then
  309. do_error(717);
  310. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  311. do_error(717);
  312. DestroyregExprEngine(r);
  313. initok:=GenerateRegExprEngine('CatAz{0}',[],r);
  314. if not initok then
  315. do_error(718);
  316. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  317. do_error(718);
  318. DestroyregExprEngine(r);
  319. (* {n,m} tests *)
  320. initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
  321. if not initok then
  322. do_error(725);
  323. if not(RegExprPos(r,'BCatAZAZAZDABCD',index,len)) or
  324. (index<>1) or (len<>9) then
  325. do_error(725);
  326. DestroyregExprEngine(r);
  327. initok:=GenerateRegExprEngine('Cat(AZ){1,3}',[],r);
  328. if not initok then
  329. do_error(725);
  330. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  331. (index<>1) or (len<>7) then
  332. do_error(725);
  333. DestroyregExprEngine(r);
  334. initok:=GenerateRegExprEngine('CatAz{1,5}',[],r);
  335. if not initok then
  336. do_error(726);
  337. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  338. (index<>1) or (len<>9) then
  339. do_error(726);
  340. initok:=GenerateRegExprEngine('CatAz{1,1}',[],r);
  341. if not initok then
  342. do_error(727);
  343. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  344. (index<>1) or (len<>5) then
  345. do_error(727);
  346. DestroyregExprEngine(r);
  347. initok:=GenerateRegExprEngine('CatAz{3,4}',[],r);
  348. if not initok then
  349. do_error(728);
  350. if not(RegExprPos(r,'BCatAzzzzzzzzzzDABCD',index,len)) or
  351. (index<>1) or (len<>8) then
  352. do_error(728);
  353. DestroyregExprEngine(r);
  354. initok:=GenerateRegExprEngine('CatAz{0,0}',[],r);
  355. if not initok then
  356. do_error(729);
  357. if RegExprPos(r,'BCatDAzizzzzHello',index,len) then
  358. do_error(729);
  359. DestroyregExprEngine(r);
  360. { ()* tests }
  361. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  362. if not initok then
  363. do_error(800);
  364. if not(RegExprPos(r,'C',index,len)) or
  365. (index<>0) or (len<>0) then
  366. do_error(800);
  367. DestroyregExprEngine(r);
  368. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  369. if not initok then
  370. do_error(801);
  371. if not(RegExprPos(r,'AZ',index,len)) or
  372. (index<>0) or (len<>2) then
  373. do_error(801);
  374. DestroyregExprEngine(r);
  375. initok:=GenerateRegExprEngine('(AZ)*',[],r);
  376. if not initok then
  377. do_error(802);
  378. if not(RegExprPos(r,'AZAZ',index,len)) or
  379. (index<>0) or (len<>4) then
  380. do_error(802);
  381. DestroyregExprEngine(r);
  382. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  383. if not initok then
  384. do_error(803);
  385. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  386. (index<>0) or (len<>7) then
  387. do_error(803);
  388. DestroyregExprEngine(r);
  389. initok:=GenerateRegExprEngine('C(AZ)*',[],r);
  390. if not initok then
  391. do_error(804);
  392. if (RegExprPos(r,'AZAZ',index,len)) then
  393. do_error(804);
  394. DestroyregExprEngine(r);
  395. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  396. if not initok then
  397. do_error(805);
  398. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  399. (index<>1) or (len<>7) then
  400. do_error(805);
  401. DestroyregExprEngine(r);
  402. initok:=GenerateRegExprEngine('Cat(AZ)*',[],r);
  403. if not initok then
  404. do_error(806);
  405. if not(RegExprPos(r,'BCatDABCD',index,len)) or
  406. (index<>1) or (len<>3) then
  407. do_error(806);
  408. DestroyregExprEngine(r);
  409. { ()+ tests }
  410. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  411. if not initok then
  412. do_error(850);
  413. if (RegExprPos(r,'C',index,len)) then
  414. do_error(850);
  415. DestroyregExprEngine(r);
  416. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  417. if not initok then
  418. do_error(851);
  419. if not(RegExprPos(r,'AZ',index,len)) or
  420. (index<>0) or (len<>2) then
  421. do_error(851);
  422. DestroyregExprEngine(r);
  423. initok:=GenerateRegExprEngine('(AZ)+',[],r);
  424. if not initok then
  425. do_error(852);
  426. if not(RegExprPos(r,'AZAZ',index,len)) or
  427. (index<>0) or (len<>4) then
  428. do_error(852);
  429. DestroyregExprEngine(r);
  430. initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
  431. if not initok then
  432. do_error(853);
  433. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  434. (index<>0) or (len<>7) then
  435. do_error(853);
  436. DestroyregExprEngine(r);
  437. initok:=GenerateRegExprEngine('C(AZ)+',[],r);
  438. if not initok then
  439. do_error(854);
  440. if (RegExprPos(r,'AZAZ',index,len)) then
  441. do_error(854);
  442. DestroyregExprEngine(r);
  443. initok:=GenerateRegExprEngine('Cat(AZ)+',[],r);
  444. if not initok then
  445. do_error(855);
  446. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  447. (index<>1) or (len<>7) then
  448. do_error(855);
  449. DestroyregExprEngine(r);
  450. { ()? tests }
  451. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  452. if not initok then
  453. do_error(900);
  454. if not(RegExprPos(r,'C',index,len)) or
  455. (index<>0) or (len<>0) then
  456. do_error(900);
  457. DestroyregExprEngine(r);
  458. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  459. if not initok then
  460. do_error(901);
  461. if not(RegExprPos(r,'AZ',index,len)) or
  462. (index<>0) or (len<>2) then
  463. do_error(901);
  464. DestroyregExprEngine(r);
  465. initok:=GenerateRegExprEngine('(AZ)?',[],r);
  466. if not initok then
  467. do_error(902);
  468. if not(RegExprPos(r,'AZAZ',index,len)) or
  469. (index<>0) or (len<>2) then
  470. do_error(902);
  471. DestroyregExprEngine(r);
  472. GenerateRegExprEngine('Cat(AZ)?',[],r);
  473. if not(RegExprPos(r,'CatAZAZ',index,len)) or
  474. (index<>0) or (len<>5) then
  475. do_error(903);
  476. DestroyregExprEngine(r);
  477. GenerateRegExprEngine('C(AZ)?',[],r);
  478. if (RegExprPos(r,'AZAZ',index,len)) then
  479. do_error(904);
  480. DestroyregExprEngine(r);
  481. GenerateRegExprEngine('Cat(AZ)?',[],r);
  482. if not(RegExprPos(r,'BCatAZAZDABCD',index,len)) or
  483. (index<>1) or (len<>5) then
  484. do_error(905);
  485. DestroyregExprEngine(r);
  486. GenerateRegExprEngine('Cat(AZ)?',[],r);
  487. if not(RegExprPos(r,'BCatDABCD',index,len)) or
  488. (index<>1) or (len<>3) then
  489. do_error(906);
  490. DestroyregExprEngine(r);
  491. { Character classes tests }
  492. GenerateRegExprEngine('[A-Z]',[],r);
  493. if not(RegExprPos(r,'234578923457823659GHJK38',index,len)) or
  494. (index<>18) or (len<>1) then
  495. do_error(1000);
  496. DestroyregExprEngine(r);
  497. GenerateRegExprEngine('[A-Z]*',[],r);
  498. if not(RegExprPos(r,'2345ARTZU38',index,len)) or
  499. (index<>0) or (len<>0) then
  500. do_error(1002);
  501. DestroyregExprEngine(r);
  502. GenerateRegExprEngine('[A-Z]+',[],r);
  503. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  504. (index<>18) or (len<>5) then
  505. do_error(1003);
  506. DestroyregExprEngine(r);
  507. GenerateRegExprEngine('[A-Z][A-Z]*',[],r);
  508. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  509. (index<>18) or (len<>5) then
  510. do_error(1004);
  511. DestroyregExprEngine(r);
  512. GenerateRegExprEngine('[A-Z][A-Z]?',[],r);
  513. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  514. (index<>18) or (len<>2) then
  515. do_error(1005);
  516. DestroyregExprEngine(r);
  517. GenerateRegExprEngine('[^\d]+',[],r);
  518. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  519. (index<>18) or (len<>5) then
  520. do_error(1006);
  521. DestroyregExprEngine(r);
  522. { test chaining }
  523. GenerateRegExprEngine('[A-Z][A-Z]?[A-Z]',[],r);
  524. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  525. (index<>18) or (len<>3) then
  526. do_error(1007);
  527. DestroyregExprEngine(r);
  528. GenerateRegExprEngine('[A-Z][A-Z]*[0-9]',[],r);
  529. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  530. (index<>18) or (len<>6) then
  531. do_error(1008);
  532. DestroyregExprEngine(r);
  533. GenerateRegExprEngine('[A-Z]+[0-9]',[],r);
  534. if not(RegExprPos(r,'234578923457823659ARTZU38',index,len)) or
  535. (index<>18) or (len<>6) then
  536. do_error(1009);
  537. DestroyregExprEngine(r);
  538. { case insensitive: }
  539. GenerateRegExprEngine('[A-Z]',[ref_caseinsensitive],r);
  540. if not(RegExprPos(r,'234578923457823659a38',index,len)) or
  541. (index<>18) or (len<>1) then
  542. do_error(1100);
  543. DestroyregExprEngine(r);
  544. { case insensitive: }
  545. GenerateRegExprEngine('[a-z]',[ref_caseinsensitive],r);
  546. if not(RegExprPos(r,'234578923457823659A38',index,len)) or
  547. (index<>18) or (len<>1) then
  548. do_error(1101);
  549. DestroyregExprEngine(r);
  550. { with parenthsis }
  551. GenerateRegExprEngine('(foo)1234',[],r);
  552. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  553. (index<>7) or (len<>7) then
  554. do_error(1200);
  555. DestroyregExprEngine(r);
  556. GenerateRegExprEngine('(((foo)))1234',[],r);
  557. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  558. (index<>7) or (len<>7) then
  559. do_error(1201);
  560. DestroyregExprEngine(r);
  561. GenerateRegExprEngine('(foo)(1234)',[],r);
  562. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  563. (index<>7) or (len<>7) then
  564. do_error(1202);
  565. DestroyregExprEngine(r);
  566. { test real backtracking }
  567. {$IFDEF UseRegexCompat}
  568. r:=GenerateRegExprEngine('nofoo|foo',[]);
  569. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  570. (index<>7) or (len<>3) then
  571. do_error(1300);
  572. DestroyregExprEngine(r);
  573. {$ENDIF}
  574. GenerateRegExprEngine('abc\(123\)$',[],r);
  575. if not (RegExprPos(r,'1234 abc(123)', index, len)) or
  576. (index <> 5) or (len <> 8) then
  577. do_error (1400);
  578. DestroyregExprEngine(r);
  579. GenerateRegExprEngine('^\t$',[ref_singleline],r);
  580. if not (RegExprPos(r,#9, index, len)) or
  581. (index <> 0) or (len <> 1) then
  582. do_error (1401);
  583. DestroyregExprEngine(r);
  584. GenerateRegExprEngine('^\n$',[ref_singleline],r);
  585. if not (RegExprPos(r,#10, index, len)) or
  586. (index <> 0) or (len <> 1) then
  587. do_error (1402);
  588. DestroyregExprEngine(r);
  589. GenerateRegExprEngine('^\f$',[ref_singleline],r);
  590. if not (RegExprPos(r,#12, index, len)) or
  591. (index <> 0) or (len <> 1) then
  592. do_error (1403);
  593. DestroyregExprEngine(r);
  594. GenerateRegExprEngine('^\r$',[ref_singleline],r);
  595. if not (RegExprPos(r,#13, index, len)) or
  596. (index <> 0) or (len <> 1) then
  597. do_error (1404);
  598. DestroyregExprEngine(r);
  599. GenerateRegExprEngine('^\a$',[ref_singleline],r);
  600. if not (RegExprPos(r,#7, index, len)) or
  601. (index <> 0) or (len <> 1) then
  602. do_error (1405);
  603. DestroyregExprEngine(r);
  604. initok:=GenerateRegExprEngine('^(([^:/?#]+):)',[],r);
  605. if not (RegExprPos(r,'http:',index, len)) or
  606. (index <> 0) or (len <> 5) then
  607. do_error (1406);
  608. DestroyregExprEngine(r);
  609. initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?',[],r);
  610. if not initok then
  611. do_error(1407);
  612. if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
  613. (index <> 0) or (len <> 20) then
  614. do_error (1407);
  615. DestroyregExprEngine(r);
  616. initok:=GenerateRegExprEngine('^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?',[],r);
  617. if not initok then
  618. do_error(1408);
  619. if not (RegExprPos(r,'http://www.myurl.com',index, len)) or
  620. (index <> 0) or (len <> 20) then
  621. do_error (1408);
  622. writeln('*** Escaping tests ***');
  623. s := '^Hello World \. [a-z] \D { } |() ?a*.*\\ 1 $';
  624. if RegExprEscapeStr(s)<>'\^Hello World \\\. \[a\-z\] \\D \{ \} \|\(\) \?a\*\.\*\\\\ 1 \$' then
  625. do_error(1450);
  626. writeln('*** More search tests ***');
  627. initok:=GenerateRegExprEngine('((nofoo)|(foo))1234',[],r);
  628. if not initok then
  629. do_error(1501);
  630. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  631. (index<>7) or (len<>9) then
  632. do_error(1501);
  633. DestroyregExprEngine(r);
  634. initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherbar))1234',[],r);
  635. if not initok then
  636. do_error(1502);
  637. if not(RegExprPos(r,'anotherbar1234XXXX',index,len)) or
  638. (index<>0) or (len<>14) then
  639. do_error(1502);
  640. DestroyregExprEngine(r);
  641. initok:=GenerateRegExprEngine('((nofoo)|(foo)|(anotherfoo))1234',[],r);
  642. if not initok then
  643. do_error(1503);
  644. if not(RegExprPos(r,'1234 anotherfoo1234XXXX',index,len)) or
  645. (index<>7) or (len<>14) then
  646. do_error(1503);
  647. DestroyregExprEngine(r);
  648. initok:=GenerateRegExprEngine('(nofoo1234)|(foo1234)',[],r);
  649. if not initok then
  650. do_error(1504);
  651. if not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  652. (index<>7) or (len<>7) then
  653. do_error(1504);
  654. DestroyregExprEngine(r);
  655. initok:=GenerateRegExprEngine('((foo)|(nofoo))1234',[],r);
  656. if not initok then
  657. do_error(1505);
  658. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  659. (index<>7) or (len<>9) then
  660. do_error(1505);
  661. DestroyregExprEngine(r);
  662. initok:=GenerateRegExprEngine('\.localhost$',[],r);
  663. if not initok then
  664. do_error(1506);
  665. if not(RegExprPos(r,'exsample.localhost',index,len)) or
  666. (index<>8) or (len<>10) then
  667. do_error(1506);
  668. DestroyregExprEngine(r);
  669. initok:=GenerateRegExprEngine('[^e]\.localhost$',[],r);
  670. if not initok then
  671. do_error(1507);
  672. if RegExprPos(r,'exsample.localhost',index,len) then
  673. do_error(1507);
  674. DestroyregExprEngine(r);
  675. {$IFDEF UseRegexCompat}
  676. initok:=GenerateRegExprEngine('.*[^e]\.localhost$',[],r);
  677. if not initok then
  678. do_error(1508);
  679. if RegExprPos(r,'exsample.localhost',index,len) then
  680. do_error(1508);
  681. DestroyregExprEngine(r);
  682. initok:=GenerateRegExprEngine('x.*[^e]\.localhost$',[],r);
  683. if not initok then
  684. do_error(1509);
  685. if RegExprPos(r,'exsample.localhost',index,len) then
  686. do_error(1509);
  687. DestroyregExprEngine(r);
  688. initok:=GenerateRegExprEngine('(nofoo|foo)1234',[],r);
  689. if not initok then
  690. do_error(1500);
  691. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  692. (index<>7) or (len<>9) then
  693. do_error(1500);
  694. DestroyregExprEngine(r);
  695. r:=GenerateRegExprEngine('(nofoo|foo|anotherfoo)1234',[]);
  696. if not(RegExprPos(r,'1234 nofoo1234XXXX',index,len)) or
  697. (index<>7) or (len<>9) then
  698. do_error(1009);
  699. DestroyregExprEngine(r);
  700. r:=GenerateRegExprEngine('nofoo1234|foo1234',[]);
  701. if {(r.data=nil) or} not(RegExprPos(r,'1234 foo1234XXXX',index,len)) or
  702. (index<>7) or (len<>7) then
  703. do_error(1010);
  704. DestroyregExprEngine(r);
  705. {$ENDIF}
  706. { *************************************************************************
  707. replacement tests
  708. ************************************************************************* }
  709. writeln('*** Replacement tests ***');
  710. initok:=GenerateRegExprEngine('fa',[],r);
  711. if not initok then
  712. do_error(2000);
  713. if (RegExprReplaceAll(r,'asdfasdf','',Dest)<>1) or
  714. (Dest<>'asdsdf') then
  715. do_error(2001);
  716. DestroyregExprEngine(r);
  717. initok:=GenerateRegExprEngine('fa',[],r);
  718. if not initok then
  719. do_error(2002);
  720. if (RegExprReplaceAll(r,'fa','',Dest)<>1) or
  721. (Dest<>'') then
  722. do_error(2003);
  723. DestroyregExprEngine(r);
  724. initok:=GenerateRegExprEngine('fa',[],r);
  725. if not initok then
  726. do_error(2004);
  727. if RegExprReplaceAll(r,'','',Dest)<>0then
  728. do_error(2005);
  729. DestroyregExprEngine(r);
  730. initok:=GenerateRegExprEngine('fa',[],r);
  731. if not initok then
  732. do_error(2006);
  733. if (RegExprReplaceAll(r,'asdfafaasd','',Dest)<>2) or
  734. (Dest<>'asdasd') then
  735. do_error(2007);
  736. DestroyregExprEngine(r);
  737. initok:=GenerateRegExprEngine('fa',[],r);
  738. if not initok then
  739. do_error(2008);
  740. if (RegExprReplaceAll(r,'asdfafaasdasdfafaasd','',Dest)<>4) or
  741. (Dest<>'asdasdasdasd') then
  742. do_error(2009);
  743. DestroyregExprEngine(r);
  744. initok:=GenerateRegExprEngine('fa',[],r);
  745. if not initok then
  746. do_error(2000);
  747. if (RegExprReplaceAll(r,'fasdfasdf','',Dest)<>2) or
  748. (Dest<>'sdsdf') then
  749. do_error(2010);
  750. DestroyregExprEngine(r);
  751. initok:=GenerateRegExprEngine('fa',[],r);
  752. if not initok then
  753. do_error(2011);
  754. if (RegExprReplaceAll(r,'fasdfafaasdasdfafaasd','',Dest)<>5) or
  755. (Dest<>'sdasdasdasd') then
  756. do_error(2012);
  757. DestroyregExprEngine(r);
  758. writeln('*** Testing unit regexpr was successful ***');
  759. end.