test_utils.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805
  1. {$INCLUDE sdo_global.inc}
  2. unit test_utils;
  3. interface
  4. uses SysUtils
  5. {$IFDEF FPC}
  6. ,fpcunit, testutils, testregistry
  7. {$ENDIF}
  8. {$IFNDEF FPC}
  9. ,TestFrameWork
  10. {$ENDIF}
  11. , sdo_types, sdo_linked_list ;
  12. type
  13. TDoubleLinkedList_Test = class(TTestCase)
  14. published
  15. procedure test_Create();
  16. procedure All_1();
  17. procedure All_2();
  18. end;
  19. TLinkedListIterator_Test = class(TTestCase)
  20. published
  21. procedure All_1();
  22. procedure All_2();
  23. procedure Bookmark;
  24. procedure MoveTo();
  25. procedure GetPosition();
  26. procedure Eof();
  27. end;
  28. TUtilsProc_Test = class(TTestCase)
  29. published
  30. procedure IsStrEmpty_test();
  31. procedure GetNextToken_test();
  32. procedure ExtractLocalName_test();
  33. procedure IsValidName_test();
  34. procedure CopySimpleList_integer_test();
  35. end;
  36. implementation
  37. uses
  38. Contnrs, sdo_imp_utils, sdo, sdo_datafactory, sdo_dataobject,
  39. Math, test_suite_utils;
  40. const
  41. SIZE_A : PtrInt = 1;
  42. SIZE_B : PtrInt = 123;
  43. VAL_A = 12;
  44. VAL_B = -34;
  45. { TDoubleLinkedList_Test }
  46. procedure TDoubleLinkedList_Test.All_1();
  47. var
  48. ll : TDoubleLinkedList;
  49. p0, p01 : PLinkedNode;
  50. p0_val, p1_val : PPtrInt;
  51. begin
  52. ll := TDoubleLinkedList.Create(SizeOf(PtrInt));
  53. try
  54. CheckEquals(True,ll.IsEmpty(),'IsEmpty()');
  55. CheckEquals(Integer(0),ll.GetLength(),'GetLength()');
  56. p0 := ll.InsertFirst();
  57. Check(Assigned(p0),'InsertFirst()');
  58. Check(p0 = ll.GetFirst(),'GetFirst()');
  59. Check(p0 = ll.GetLast(),'GetLast()');
  60. Check(nil=p0^.Previous,'p0^.Previous = nil');
  61. Check(nil=p0^.Next,'p0^.Next = nil');
  62. CheckEquals(1,ll.GetLength(),'GetLength()');
  63. CheckEquals(False,ll.IsEmpty(),'IsEmpty()');
  64. p0_val := PPtrInt(@(p0^.Data[0]));
  65. CheckEquals(PtrInt(0),p0_val^);
  66. p0_val^ := VAL_A;
  67. CheckEquals(PtrInt(VAL_A),p0_val^);
  68. p01 := ll.InsertFirst();
  69. Check(Assigned(p01),'InsertFirst()');
  70. Check(p01 = ll.GetFirst(),'GetFirst()');
  71. Check(p0 = ll.GetLast());
  72. Check(p01^.Previous=nil,'p1^.Previous=nil');
  73. Check(p01^.Next=p0,'p1^.Next=p0');
  74. Check(p01=p0^.Previous,'p1=p0^.Previous');
  75. Check(p0^.Next=nil,'p0^.Next = nil');
  76. Check(p0 <> p01,'p0 <> p1');
  77. CheckEquals(2,ll.GetLength(),'GetLength()');
  78. CheckEquals(PtrInt(VAL_A),p0_val^);
  79. p1_val := PPtrInt(@(p01^.Data[0]));
  80. CheckEquals(PtrInt(0),p1_val^);
  81. ll.Remove(p01);
  82. Check(ll.GetFirst() = p0);
  83. Check(p0 = ll.GetFirst(),'GetFirst()');
  84. Check(p0 = ll.GetLast(),'GetLast()');
  85. Check(nil=p0^.Previous,'p0^.Previous = nil');
  86. Check(nil=p0^.Next,'p0^.Next = nil');
  87. CheckEquals(1,ll.GetLength(),'GetLength()');
  88. CheckEquals(False,ll.IsEmpty(),'IsEmpty()');
  89. ll.FreeBuffer(p01);
  90. p01 := ll.InsertBefore(p0);
  91. Check(Assigned(p01),'InsertFirst()');
  92. Check(p01 = ll.GetFirst(),'GetFirst()');
  93. Check(p0 = ll.GetLast());
  94. Check(p01^.Previous=nil,'p1^.Previous=nil');
  95. Check(p01^.Next=p0,'p1^.Next=p0');
  96. Check(p01=p0^.Previous,'p1=p0^.Previous');
  97. Check(p0^.Next=nil,'p0^.Next = nil');
  98. Check(p0 <> p01,'p0 <> p1');
  99. CheckEquals(2,ll.GetLength(),'GetLength()');
  100. CheckEquals(PtrInt(VAL_A),p0_val^);
  101. p1_val := PPtrInt(@(p01^.Data[0]));
  102. CheckEquals(PtrInt(0),p1_val^);
  103. ll.Delete(p0);
  104. ll.Delete(p01);
  105. CheckEquals(True,ll.IsEmpty(),'IsEmpty()');
  106. CheckEquals(Integer(0),ll.GetLength(),'GetLength()');
  107. finally
  108. FreeAndNil(ll);
  109. end;
  110. end;
  111. procedure TDoubleLinkedList_Test.All_2();
  112. var
  113. ll : TDoubleLinkedList;
  114. p0, p1, p2 : PLinkedNode;
  115. begin
  116. ll := TDoubleLinkedList.Create(SizeOf(PtrInt));
  117. try
  118. p1 := ll.InsertFirst();
  119. p0 := ll.InsertBefore(p1);
  120. p2 := ll.InsertAfter(p1);
  121. CheckEquals(False,ll.IsEmpty());
  122. CheckEquals(3,ll.GetLength());
  123. Check(p0 = ll.GetFirst());
  124. Check(p2 = ll.GetLast());
  125. Check(p0^.Previous = nil);
  126. Check(p0^.Next = p1);
  127. Check(p1^.Previous = p0);
  128. Check(p1^.Next = p2);
  129. Check(p2^.Previous = p1);
  130. Check(p2^.Next = nil);
  131. ll.Delete(p1);
  132. CheckEquals(2,ll.GetLength());
  133. Check(p0^.Previous = nil);
  134. Check(p0^.Next = p2);
  135. Check(p2^.Previous = p0);
  136. Check(p2^.Next = nil);
  137. ll.Delete(p2);
  138. CheckEquals(1,ll.GetLength());
  139. Check(p0^.Previous = nil);
  140. Check(p0^.Next = nil);
  141. ll.Delete(p0);
  142. CheckEquals(True,ll.IsEmpty());
  143. CheckEquals(0,ll.GetLength());
  144. finally
  145. FreeAndNil(ll);
  146. end;
  147. end;
  148. procedure TDoubleLinkedList_Test.test_Create();
  149. var
  150. ok : Boolean;
  151. ll : TDoubleLinkedList;
  152. begin
  153. ok := False;
  154. try
  155. TDoubleLinkedList.Create(-1);
  156. except
  157. on e : EListException do begin
  158. ok := True;
  159. end;
  160. end;
  161. Check(ok,'Create(-1);');
  162. ll := TDoubleLinkedList.Create(SIZE_A);
  163. try
  164. CheckEquals(SIZE_A,ll.DataSize);
  165. finally
  166. FreeAndNil(ll);
  167. end;
  168. ll := TDoubleLinkedList.Create(SIZE_B);
  169. try
  170. CheckEquals(SIZE_B,ll.DataSize);
  171. finally
  172. FreeAndNil(ll);
  173. end;
  174. end;
  175. { TLinkedListIterator_Test }
  176. procedure TLinkedListIterator_Test.All_2();
  177. var
  178. ll : TDoubleLinkedList;
  179. c : ILinkedListCursor;
  180. p0, p1, p2 : PLinkedNode;
  181. begin
  182. ll := TDoubleLinkedList.Create(SIZE_A);
  183. try
  184. c := CreateIterator(ll);
  185. CheckEquals(False,c.IsPosValid());
  186. c.Reset();
  187. CheckEquals(False,c.IsPosValid());
  188. CheckEquals(False,c.MoveNext());
  189. CheckEquals(False,c.IsPosValid());
  190. CheckEquals(False,c.MovePrevious());
  191. CheckEquals(False,c.IsPosValid());
  192. CheckEquals(False,c.MoveFirst());
  193. CheckEquals(False,c.IsPosValid());
  194. CheckEquals(False,c.MoveLast());
  195. CheckEquals(False,c.IsPosValid());
  196. Check(nil = c.GetCurrent());
  197. ll.Clear();
  198. p0 := ll.InsertFirst();
  199. CheckEquals(False,c.IsPosValid());
  200. c.Reset();
  201. CheckEquals(True,c.MoveNext());
  202. CheckEquals(True,c.IsPosValid());
  203. CheckEquals(False,c.MoveNext());
  204. CheckEquals(True,c.IsPosValid());
  205. CheckEquals(False,c.MoveNext());
  206. CheckEquals(True,c.IsPosValid());
  207. CheckEquals(False,c.MovePrevious());
  208. CheckEquals(True,c.IsPosValid());
  209. CheckEquals(False,c.MovePrevious());
  210. CheckEquals(True,c.IsPosValid());
  211. Check(p0 = c.GetCurrent());
  212. CheckEquals(True,c.MoveFirst());
  213. Check(p0 = c.GetCurrent());
  214. CheckEquals(True,c.IsPosValid());
  215. CheckEquals(True,c.MoveLast());
  216. Check(p0 = c.GetCurrent());
  217. CheckEquals(True,c.IsPosValid());
  218. ll.Clear();
  219. p0 := ll.InsertFirst();
  220. p1 := ll.InsertAfter(p0);
  221. c.Reset();
  222. CheckEquals(False,c.IsPosValid());
  223. CheckEquals(True,c.MoveNext());
  224. Check(p0 = c.GetCurrent());
  225. CheckEquals(True,c.IsPosValid());
  226. CheckEquals(True,c.MoveNext());
  227. Check(p1 = c.GetCurrent());
  228. CheckEquals(True,c.IsPosValid());
  229. CheckEquals(False,c.MoveNext());
  230. Check(p1 = c.GetCurrent());
  231. CheckEquals(True,c.MovePrevious());
  232. Check(p0 = c.GetCurrent());
  233. CheckEquals(False,c.MovePrevious());
  234. Check(p0 = c.GetCurrent());
  235. Check(p0 = c.GetCurrent());
  236. CheckEquals(True,c.MoveFirst());
  237. Check(p0 = c.GetCurrent());
  238. CheckEquals(True,c.MoveLast());
  239. Check(p1 = c.GetCurrent());
  240. ll.Clear();
  241. CheckEquals(False,c.IsPosValid());
  242. p0 := ll.InsertFirst();
  243. p1 := ll.InsertAfter(p0);
  244. p2 := ll.InsertAfter(p1);
  245. c.Reset();
  246. CheckEquals(True,c.MoveNext());
  247. CheckEquals(False,c.MovePrevious());
  248. Check(p0 = c.GetCurrent());
  249. CheckEquals(True,c.MoveNext());
  250. Check(p1 = c.GetCurrent());
  251. CheckEquals(True,c.MovePrevious());
  252. Check(p0 = c.GetCurrent());
  253. CheckEquals(True,c.MoveNext());
  254. Check(p1 = c.GetCurrent());
  255. CheckEquals(True,c.MoveNext());
  256. Check(p2 = c.GetCurrent());
  257. CheckEquals(False,c.MoveNext());
  258. Check(p2 = c.GetCurrent());
  259. CheckEquals(True,c.MovePrevious()); // p2 > p1
  260. CheckEquals(True,c.MovePrevious()); // p1 > p0
  261. CheckEquals(False,c.MovePrevious()); // p0 = p0
  262. CheckEquals(True,c.MoveFirst());
  263. Check(p0 = c.GetCurrent());
  264. CheckEquals(True,c.MoveLast());
  265. Check(p2 = c.GetCurrent());
  266. ll.Clear();
  267. c.Reset();
  268. CheckEquals(False,c.MoveNext());
  269. CheckEquals(False,c.MovePrevious());
  270. Check(nil = c.GetCurrent());
  271. finally
  272. ll.Free();
  273. end;
  274. end;
  275. procedure TLinkedListIterator_Test.All_1();
  276. var
  277. lls : TObjectList;
  278. ll : TDoubleLinkedList;
  279. c : ILinkedListCursor;
  280. p0, p1, p2 : PLinkedNode;
  281. begin
  282. lls := TObjectList.Create(True);
  283. try
  284. ll := TDoubleLinkedList.Create(SIZE_A);
  285. lls.Add(ll);
  286. c := CreateIterator(ll);
  287. CheckEquals(True,c.Bof());
  288. CheckEquals(True,c.Eof());
  289. CheckEquals(False,c.MoveFirst());
  290. CheckEquals(False,c.MoveLast());
  291. c.Reset();
  292. CheckEquals(True,c.Bof());
  293. CheckEquals(True,c.Eof());
  294. CheckEquals(False,c.MoveFirst());
  295. CheckEquals(False,c.MoveLast());
  296. ll := TDoubleLinkedList.Create(SIZE_A);
  297. lls.Add(ll);
  298. c := CreateIterator(ll);
  299. p0 := ll.InsertFirst();
  300. CheckEquals(False,c.Bof());
  301. CheckEquals(False,c.Eof());
  302. c.Reset();
  303. CheckEquals(False,c.Bof());
  304. CheckEquals(False,c.Eof());
  305. CheckEquals(True,c.MoveNext());
  306. CheckEquals(True,c.Bof());
  307. CheckEquals(False,c.Eof());
  308. CheckEquals(False,c.MoveNext());
  309. CheckEquals(False,c.Bof());
  310. CheckEquals(True,c.Eof());
  311. ll := TDoubleLinkedList.Create(SIZE_A);
  312. lls.Add(ll);
  313. c := CreateIterator(ll);
  314. p0 := ll.InsertFirst();
  315. p1 := ll.InsertAfter(p0);
  316. CheckEquals(False,c.Bof());
  317. CheckEquals(False,c.Eof());
  318. c.Reset();
  319. CheckEquals(False,c.Bof());
  320. CheckEquals(False,c.Eof());
  321. CheckEquals(True,c.MoveNext());
  322. CheckEquals(True,c.Bof());
  323. CheckEquals(False,c.Eof());
  324. CheckEquals(True,c.MoveNext());
  325. CheckEquals(False,c.Bof());
  326. CheckEquals(False,c.Eof());
  327. CheckEquals(True,c.MoveFirst());
  328. Check(c.GetCurrent() = ll.GetFirst());
  329. CheckEquals(True,c.Bof());
  330. CheckEquals(False,c.Eof());
  331. CheckEquals(True,c.MoveLast());
  332. Check(c.GetCurrent() = ll.GetLast());
  333. CheckEquals(False,c.Bof());
  334. CheckEquals(True,c.Eof());
  335. ll := TDoubleLinkedList.Create(SIZE_A);
  336. lls.Add(ll);
  337. c := CreateIterator(ll);
  338. CheckEquals(False,c.IsPosValid());
  339. p0 := ll.InsertFirst();
  340. p1 := ll.InsertAfter(p0);
  341. p2 := ll.InsertAfter(p1);
  342. CheckEquals(False,c.Bof());
  343. CheckEquals(False,c.Eof());
  344. c.Reset();
  345. CheckEquals(False,c.Bof());
  346. CheckEquals(False,c.Eof());
  347. CheckEquals(True,c.MoveNext());
  348. CheckEquals(True,c.Bof());
  349. CheckEquals(False,c.Eof());
  350. CheckEquals(True,c.MoveNext());
  351. CheckEquals(False,c.Bof());
  352. CheckEquals(False,c.Eof());
  353. CheckEquals(True,c.MoveNext());
  354. CheckEquals(False,c.Bof());
  355. CheckEquals(False,c.Eof());
  356. CheckEquals(True,c.MoveFirst());
  357. Check(c.GetCurrent() = ll.GetFirst());
  358. CheckEquals(True,c.Bof());
  359. CheckEquals(False,c.Eof());
  360. CheckEquals(True,c.MoveLast());
  361. Check(c.GetCurrent() = ll.GetLast());
  362. CheckEquals(False,c.Bof());
  363. CheckEquals(True,c.Eof());
  364. finally
  365. lls.Free();
  366. end;
  367. end;
  368. procedure TLinkedListIterator_Test.Bookmark();
  369. var
  370. ll : TDoubleLinkedList;
  371. c : ILinkedListCursor;
  372. bmk : TLinkedListBookmark;
  373. oldPos : PtrInt;
  374. p : PLinkedNode;
  375. begin
  376. ll := TDoubleLinkedList.Create(SizeOf(Integer));
  377. try
  378. c := CreateIterator(ll);
  379. p := c.GetCurrent();
  380. bmk := c.GetBookmark(); oldPos := c.GetPosition();
  381. CheckEquals(True,c.GotoBookmark(bmk));
  382. CheckEquals(True,c.GotoBookmark(bmk));
  383. CheckEquals(PtrInt(p),PtrInt(c.GetCurrent()));
  384. CheckEquals(oldPos,c.GetPosition());
  385. ll.Append();
  386. ll.Append();
  387. ll.Append();
  388. ll.Append();
  389. ll.Append();
  390. c.MoveFirst();
  391. p := c.GetCurrent();
  392. bmk := c.GetBookmark(); oldPos := c.GetPosition();
  393. c.MoveNext();
  394. c.MoveNext();
  395. CheckEquals(True,c.GotoBookmark(bmk));
  396. CheckEquals(PtrInt(p),PtrInt(c.GetCurrent()));
  397. CheckEquals(oldPos,c.GetPosition());
  398. c.MoveFirst();
  399. c.MoveNext();
  400. c.MoveNext();
  401. p := c.GetCurrent();
  402. bmk := c.GetBookmark(); oldPos := c.GetPosition();
  403. c.MoveLast();
  404. CheckEquals(True,c.GotoBookmark(bmk));
  405. CheckEquals(PtrInt(p),PtrInt(c.GetCurrent()));
  406. CheckEquals(oldPos,c.GetPosition());
  407. c.MoveLast();
  408. p := c.GetCurrent();
  409. bmk := c.GetBookmark(); oldPos := c.GetPosition();
  410. c.MoveFirst();
  411. CheckEquals(True,c.GotoBookmark(bmk));
  412. CheckEquals(PtrInt(p),PtrInt(c.GetCurrent()));
  413. CheckEquals(oldPos,c.GetPosition());
  414. finally
  415. ll.Free();
  416. end;
  417. end;
  418. procedure TLinkedListIterator_Test.MoveTo();
  419. var
  420. ll : TDoubleLinkedList;
  421. c : ILinkedListCursor;
  422. i : PtrInt;
  423. begin
  424. ll := TDoubleLinkedList.Create(SizeOf(PtrInt));
  425. try
  426. c := CreateIterator(ll);
  427. CheckEquals(False, c.MoveTo(0));
  428. CheckEquals(False, c.MoveTo(-1));
  429. CheckEquals(False, c.MoveTo(1));
  430. PPtrInt(@((ll.Append()^.Data[0])))^ := 0;
  431. PPtrInt(@((ll.Append()^.Data[0])))^ := 1;
  432. PPtrInt(@((ll.Append()^.Data[0])))^ := 2;
  433. PPtrInt(@((ll.Append()^.Data[0])))^ := 3;
  434. c.MoveFirst();
  435. CheckEquals(0,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  436. for i := 0 to 3 do begin
  437. CheckEquals(True, c.MoveTo(i));
  438. CheckEquals(i,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  439. CheckEquals(True, c.MoveFirst());
  440. CheckEquals(True, c.MoveTo(i));
  441. CheckEquals(i,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  442. CheckEquals(True, c.MoveLast());
  443. CheckEquals(True, c.MoveTo(i));
  444. CheckEquals(i,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  445. end;
  446. CheckEquals(True, c.MoveTo(1));
  447. CheckEquals(1,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  448. c.MoveFirst();
  449. CheckEquals(True, c.MoveTo(3));
  450. CheckEquals(3,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  451. CheckEquals(True, c.MoveLast());
  452. CheckEquals(True, c.MoveTo(2));
  453. CheckEquals(2,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  454. CheckEquals(True, c.MoveTo(1));
  455. CheckEquals(True, c.MoveTo(2));
  456. CheckEquals(2,PPtrInt(@((c.GetCurrent()^.Data[0])))^);
  457. finally
  458. ll.Free();
  459. end;
  460. end;
  461. procedure TLinkedListIterator_Test.GetPosition();
  462. var
  463. ll : TDoubleLinkedList;
  464. c : ILinkedListCursor;
  465. i : PtrInt;
  466. begin
  467. ll := TDoubleLinkedList.Create(SizeOf(PtrInt));
  468. try
  469. c := CreateIterator(ll);
  470. CheckEquals(-1,c.GetPosition());
  471. CheckEquals(False, c.MoveTo(0));
  472. CheckEquals(-1,c.GetPosition());
  473. CheckEquals(False, c.MoveTo(-1));
  474. CheckEquals(-1,c.GetPosition());
  475. CheckEquals(False, c.MoveTo(1));
  476. CheckEquals(-1,c.GetPosition());
  477. PPtrInt(@((ll.Append()^.Data[0])))^ := 0;
  478. PPtrInt(@((ll.Append()^.Data[0])))^ := 1;
  479. PPtrInt(@((ll.Append()^.Data[0])))^ := 2;
  480. PPtrInt(@((ll.Append()^.Data[0])))^ := 3;
  481. c.Reset();
  482. CheckEquals(-1,c.GetPosition());
  483. c.MoveFirst();
  484. CheckEquals(0,c.GetPosition());
  485. for i := 0 to 3 do begin
  486. CheckEquals(True, c.MoveTo(i));
  487. CheckEquals(i,c.GetPosition());
  488. end;
  489. CheckEquals(True, c.MoveLast());
  490. CheckEquals(Pred(ll.GetLength()),c.GetPosition());
  491. c.MoveFirst();
  492. CheckEquals(0,c.GetPosition());
  493. finally
  494. ll.Free();
  495. end;
  496. end;
  497. procedure TLinkedListIterator_Test.Eof();
  498. var
  499. lls : TObjectList;
  500. ll : TDoubleLinkedList;
  501. c : ILinkedListCursor;
  502. p0, p1, p2 : PLinkedNode;
  503. begin
  504. lls := TObjectList.Create(True);
  505. try
  506. ll := TDoubleLinkedList.Create(SIZE_A);
  507. lls.Add(ll);
  508. c := CreateIterator(ll);
  509. CheckEquals(True,c.Eof());
  510. p0 := ll.InsertFirst();
  511. c.Reset();
  512. CheckEquals(False,c.Eof());
  513. CheckEquals(True,c.MoveNext());
  514. CheckEquals(False,c.Eof());
  515. CheckEquals(False,c.MoveNext());
  516. CheckEquals(True,c.Eof());
  517. c.Reset();
  518. CheckEquals(False,c.Eof());
  519. CheckEquals(True,c.MoveNext());
  520. CheckEquals(False,c.Eof());
  521. CheckEquals(False,c.MoveNext());
  522. CheckEquals(True,c.Eof());
  523. c.Reset();
  524. CheckEquals(False,c.Eof());
  525. CheckEquals(True,c.MoveLast());
  526. CheckEquals(True,c.Eof());
  527. ll := TDoubleLinkedList.Create(SIZE_A);
  528. lls.Add(ll);
  529. c := CreateIterator(ll);
  530. p0 := ll.InsertFirst();
  531. p1 := ll.InsertAfter(p0);
  532. c.Reset();
  533. CheckEquals(False,c.Eof());
  534. c.Reset();
  535. CheckEquals(False,c.Eof());
  536. CheckEquals(True,c.MoveNext());
  537. CheckEquals(False,c.Eof());
  538. CheckEquals(True,c.MoveNext());
  539. CheckEquals(False,c.Eof());
  540. CheckEquals(False,c.MoveNext());
  541. CheckEquals(True,c.Eof());
  542. c.Reset();
  543. CheckEquals(False,c.Eof());
  544. CheckEquals(True,c.MoveLast());
  545. CheckEquals(True,c.Eof());
  546. finally
  547. lls.Free();
  548. end;
  549. end;
  550. { TUtilsProc_Test }
  551. procedure TUtilsProc_Test.CopySimpleList_integer_test();
  552. procedure check_list(const x, y : ISDODataObjectList);
  553. var
  554. cx, cy : ILinkedListCursor;
  555. begin
  556. CheckEquals(x.size(), y.size(), 'size');
  557. if ( x.size() > 0 ) then begin
  558. cx := x.getCursor();
  559. cx.Reset();
  560. cy := y.getCursor();
  561. cy.Reset();
  562. while cx.MoveNext() do begin
  563. Check(cy.MoveNext(), 'MoveNext()');
  564. CheckEquals(x.getInteger(), y.getInteger(), Format('Item #%d',[cx.GetPosition()]));
  565. end;
  566. end;
  567. end;
  568. var
  569. f : ISDODataFactory;
  570. a, b : ISDODataObjectList;
  571. t : ISDOType;
  572. i, c : PtrInt;
  573. begin
  574. Randomize();
  575. f := TSDODataFactory.Create();
  576. t := f.getType(sdo_namespace,SDOTypeDefaultTypeNames[IntegerType]);
  577. a := TSDODataObjectList.Create(t);
  578. b := TSDODataObjectList.Create(t);
  579. CopySimpleList(a, b, t.getTypeEnum());
  580. check_list(a, b);
  581. c := RandomRange(1,100);
  582. for i := 0 to Pred(c) do
  583. a.append(RandomRange(-1234, 56789));
  584. CopySimpleList(a, b, t.getTypeEnum());
  585. check_list(a, b);
  586. end;
  587. procedure TUtilsProc_Test.ExtractLocalName_test();
  588. begin
  589. CheckEquals('',ExtractLocalName(''));
  590. CheckEquals('a',ExtractLocalName('a'));
  591. CheckEquals('azerty',ExtractLocalName('azerty'));
  592. CheckEquals('azerty',ExtractLocalName('ns:azerty'));
  593. CheckEquals('azerty',ExtractLocalName('n:azerty'));
  594. CheckEquals('azerty',ExtractLocalName(':azerty'));
  595. CheckEquals('',ExtractLocalName('azerty:'));
  596. end;
  597. procedure TUtilsProc_Test.GetNextToken_test();
  598. var
  599. buffer, x : string;
  600. sep : AnsiChar;
  601. begin
  602. sep := ';';
  603. buffer := '';
  604. x := GetNextToken(buffer,sep);
  605. CheckEquals('', x);
  606. CheckEquals('', buffer);
  607. sep := ';';
  608. buffer := ';';
  609. x := GetNextToken(buffer,sep);
  610. CheckEquals('', x);
  611. CheckEquals('', buffer);
  612. sep := ';';
  613. buffer := ';;;';
  614. x := GetNextToken(buffer,sep);
  615. CheckEquals('', x);
  616. CheckEquals('', buffer);
  617. sep := ';';
  618. buffer := 'abc';
  619. x := GetNextToken(buffer,sep);
  620. CheckEquals('abc', x);
  621. CheckEquals('', buffer);
  622. sep := ';';
  623. buffer := 'ab;cd';
  624. x := GetNextToken(buffer,sep);
  625. CheckEquals('ab', x);
  626. CheckEquals('cd', buffer);
  627. x := GetNextToken(buffer,sep);
  628. CheckEquals('cd', x);
  629. CheckEquals('', buffer);
  630. sep := ';';
  631. buffer := ';ab;cd';
  632. x := GetNextToken(buffer,sep);
  633. CheckEquals('ab', x);
  634. CheckEquals('cd', buffer);
  635. x := GetNextToken(buffer,sep);
  636. CheckEquals('cd', x);
  637. CheckEquals('', buffer);
  638. sep := ';';
  639. buffer := ';ab;;cd';
  640. x := GetNextToken(buffer,sep);
  641. CheckEquals('ab', x);
  642. CheckEquals(';cd', buffer);
  643. x := GetNextToken(buffer,sep);
  644. CheckEquals('cd', x);
  645. CheckEquals('', buffer);
  646. sep := ';';
  647. buffer := 'ab;cd;';
  648. x := GetNextToken(buffer,sep);
  649. CheckEquals('ab', x);
  650. CheckEquals('cd;', buffer);
  651. x := GetNextToken(buffer,sep);
  652. CheckEquals('cd', x);
  653. CheckEquals('', buffer);
  654. sep := ';';
  655. buffer := 'ab;cd;de';
  656. x := GetNextToken(buffer,sep);
  657. CheckEquals('ab', x);
  658. CheckEquals('cd;de', buffer);
  659. x := GetNextToken(buffer,sep);
  660. CheckEquals('cd', x);
  661. CheckEquals('de', buffer);
  662. x := GetNextToken(buffer,sep);
  663. CheckEquals('de', x);
  664. CheckEquals('', buffer);
  665. end;
  666. procedure TUtilsProc_Test.IsStrEmpty_test;
  667. begin
  668. CheckEquals(True,IsStrEmpty(''));
  669. CheckEquals(True,IsStrEmpty(' '));
  670. CheckEquals(False,IsStrEmpty('a'));
  671. CheckEquals(False,IsStrEmpty(' a'));
  672. CheckEquals(False,IsStrEmpty('afghjk'));
  673. CheckEquals(False,IsStrEmpty(' jhhfjjsd '));
  674. CheckEquals(False,IsStrEmpty(':6789^;:,?'));
  675. end;
  676. procedure TUtilsProc_Test.IsValidName_test();
  677. begin
  678. CheckEquals(True, IsValidName('_'));
  679. CheckEquals(True, IsValidName('_a'));
  680. CheckEquals(True, IsValidName('_1'));
  681. CheckEquals(True, IsValidName('_azerty'));
  682. CheckEquals(True, IsValidName('a'));
  683. CheckEquals(True, IsValidName('azerty'));
  684. CheckEquals(True, IsValidName('_a_z'));
  685. CheckEquals(True, IsValidName('a1210'));
  686. CheckEquals(False, IsValidName(''));
  687. CheckEquals(False, IsValidName('-'));
  688. CheckEquals(False, IsValidName('-a'));
  689. CheckEquals(False, IsValidName('4'));
  690. CheckEquals(False, IsValidName('1s'));
  691. CheckEquals(False, IsValidName('-4'));
  692. CheckEquals(False, IsValidName('aad-ddd'));
  693. CheckEquals(False, IsValidName('zz_-'));
  694. CheckEquals(False, IsValidName('['));
  695. CheckEquals(False, IsValidName(']'));
  696. CheckEquals(False, IsValidName('az[]'));
  697. CheckEquals(False, IsValidName('l[1]'));
  698. CheckEquals(False, IsValidName('dd['));
  699. CheckEquals(False, IsValidName('dd]'));
  700. end;
  701. initialization
  702. RegisterTest('utils',TDoubleLinkedList_Test.Suite);
  703. RegisterTest('utils',TLinkedListIterator_Test.Suite);
  704. RegisterTest('utils',TUtilsProc_Test.Suite);
  705. end.