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