testspecifictmemdataset.pas 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. unit TestSpecificTMemDataSet;
  2. {
  3. Unit tests which are specific to TMemDataset
  4. }
  5. {$mode objfpc}{$H+}
  6. interface
  7. uses
  8. Classes, SysUtils,
  9. testregistry,
  10. ToolsUnit;
  11. type
  12. { TTestSpecificTMemDataset }
  13. TTestSpecificTMemDataset = class(TDBBasicsTestCase)
  14. private
  15. protected
  16. published
  17. procedure TestClear;
  18. procedure TestFileName;
  19. procedure TestCopyFromDataset; //is copied dataset identical to original?
  20. procedure TestCopyFromDatasetMoved; //move record then copy. Is copy identical? Has record position changed?
  21. end;
  22. implementation
  23. uses
  24. MemDS, db;
  25. const
  26. Test_FileName='test.dat';
  27. { TTestSpecificTMemDataset }
  28. procedure TTestSpecificTMemDataset.TestClear;
  29. const
  30. testValuesCount=3;
  31. var
  32. i: integer;
  33. begin
  34. with DBConnector.GetNDataset(10) as TMemDataset do
  35. begin
  36. Open;
  37. Clear;
  38. // test after FieldDefs are Cleared, if internal structures are updated properly
  39. // create other FieldDefs
  40. FieldDefs.Add('Fs', ftString, 20);
  41. FieldDefs.Add('Fi', ftInteger);
  42. FieldDefs.Add('Fi2', ftInteger);
  43. // use only Open without CreateTable
  44. Open;
  45. CheckTrue(IsEmpty);
  46. CheckEquals(0, DataSize);
  47. // add some data
  48. for i:=1 to testValuesCount do
  49. AppendRecord([TestStringValues[i], TestIntValues[i], TestIntValues[i]]);
  50. // check data
  51. CheckEquals(testValuesCount, RecordCount);
  52. First;
  53. for i:=1 to testValuesCount do
  54. begin
  55. CheckEquals(TestStringValues[i], FieldByName('Fs').AsString);
  56. CheckEquals(TestIntValues[i], FieldByName('Fi2').AsInteger);
  57. Next;
  58. end;
  59. CheckTrue(Eof);
  60. end;
  61. end;
  62. procedure TTestSpecificTMemDataset.TestFileName;
  63. var memds1, memds2: TMemDataset;
  64. begin
  65. memds1:=DBConnector.GetFieldDataset as TMemDataset;
  66. memds2:=DBConnector.GetNDataset(0) as TMemDataset;
  67. memds1.Open;
  68. memds1.SaveToFile(Test_FileName);
  69. memds1.Close;
  70. memds1.Clear;
  71. memds1.FileName:=Test_FileName;
  72. memds1.Open;
  73. CheckFieldDatasetValues(memds1);
  74. // try read same file into different dataset, testing if FieldDefs are updated properly
  75. memds2.FileName:=Test_FileName;
  76. memds2.Open;
  77. CheckFieldDatasetValues(memds2);
  78. DeleteFile(memds2.FileName);
  79. end;
  80. procedure TTestSpecificTMemDataset.TestCopyFromDataset;
  81. var memds1, memds2: TMemDataset;
  82. i: integer;
  83. begin
  84. memds1:=DBConnector.GetFieldDataset as TMemDataset;
  85. memds2:=DBConnector.GetNDataset(0) as TMemDataset;
  86. memds1.Open;
  87. // insert 1st row with all NULL values
  88. memds1.Insert; memds1.Post;
  89. memds2.CopyFromDataset(memds1);
  90. // check if 1st row has all NULL values
  91. for i:=0 to memds2.FieldCount-1 do CheckTrue(memds2.Fields[i].IsNull, 'IsNull');
  92. memds2.Delete;
  93. CheckFieldDatasetValues(memds2);
  94. end;
  95. procedure TTestSpecificTMemDataset.TestCopyFromDatasetMoved;
  96. var
  97. memds1, memds2: TMemDataset;
  98. CurrentID,NewID: integer;
  99. begin
  100. memds1:=DBConnector.GetFieldDataset as TMemDataset;
  101. memds2:=DBConnector.GetNDataset(0) as TMemDataset;
  102. memds1.Open;
  103. memds1.Next; //this should not influence the copydataset step.
  104. CurrentID:=memds1.FieldByName('ID').AsInteger;
  105. memds2.CopyFromDataset(memds1);
  106. CheckFieldDatasetValues(memds2);
  107. NewID:=memds1.FieldByName('ID').AsInteger;
  108. CheckEquals(CurrentID,NewID,'Mismatch between ID field contents - the record has moved.');
  109. end;
  110. initialization
  111. if uppercase(dbconnectorname)='MEMDS' then
  112. begin
  113. RegisterTestDecorator(TDBBasicsTestSetup, TTestSpecificTMemDataset);
  114. end;
  115. end.