testreg1.pp 26 KB

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