testspecifictbufdataset.pas 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. unit TestSpecificTBufDataset;
  2. {
  3. Unit tests which are specific to stand-alone TBufDataset-datasets. (So not
  4. for derrived datasets like TQuery )
  5. }
  6. {$IFDEF FPC}
  7. {$mode Delphi}{$H+}
  8. {$ENDIF}
  9. interface
  10. uses
  11. {$IFDEF FPC}
  12. fpcunit, testutils, testregistry, testdecorator, BufDataset,
  13. {$ELSE FPC}
  14. TestFramework,
  15. {$ENDIF FPC}
  16. Classes, SysUtils, db, ToolsUnit;
  17. type
  18. { TTestSpecificTBufDataset }
  19. TTestSpecificTBufDataset = class(TTestCase)
  20. private
  21. procedure TestDataset(ABufDataset: TBufDataset);
  22. protected
  23. procedure SetUp; override;
  24. procedure TearDown; override;
  25. published
  26. procedure CreateDatasetFromFielddefs;
  27. procedure CreateDatasetFromFields;
  28. procedure TestOpeningNonExistingDataset;
  29. procedure TestCreationDatasetWithCalcFields;
  30. end;
  31. implementation
  32. uses
  33. {$ifdef fpc}
  34. //
  35. {$endif fpc}
  36. variants,
  37. strutils,
  38. FmtBCD;
  39. { TTestSpecificTBufDataset }
  40. procedure TTestSpecificTBufDataset.TestDataset(ABufDataset: TBufDataset);
  41. var
  42. i : integer;
  43. begin
  44. for i := 1 to 10 do
  45. begin
  46. ABufDataset.Append;
  47. ABufDataset.FieldByName('ID').AsInteger := i;
  48. ABufDataset.FieldByName('NAME').AsString := 'TestName' + inttostr(i);
  49. ABufDataset.Post;
  50. end;
  51. ABufDataset.first;
  52. for i := 1 to 10 do
  53. begin
  54. CheckEquals(i,ABufDataset.fieldbyname('ID').asinteger);
  55. CheckEquals('TestName' + inttostr(i),ABufDataset.fieldbyname('NAME').AsString);
  56. ABufDataset.next;
  57. end;
  58. CheckTrue(ABufDataset.EOF);
  59. end;
  60. procedure TTestSpecificTBufDataset.SetUp;
  61. begin
  62. DBConnector.StartTest;
  63. end;
  64. procedure TTestSpecificTBufDataset.TearDown;
  65. begin
  66. DBConnector.StopTest;
  67. end;
  68. procedure TTestSpecificTBufDataset.CreateDatasetFromFielddefs;
  69. var ds : TBufDataset;
  70. begin
  71. ds := TBufDataset.Create(nil);
  72. DS.FieldDefs.Add('ID',ftInteger);
  73. DS.FieldDefs.Add('NAME',ftString,50);
  74. DS.CreateDataset;
  75. TestDataset(ds);
  76. DS.Close;
  77. DS.CreateDataset;
  78. TestDataset(ds);
  79. end;
  80. procedure TTestSpecificTBufDataset.CreateDatasetFromFields;
  81. var ds : TBufDataset;
  82. f: TField;
  83. begin
  84. ds := TBufDataset.Create(nil);
  85. F := TIntegerField.Create(ds);
  86. F.FieldName:='ID';
  87. F.DataSet:=ds;
  88. F := TStringField.Create(ds);
  89. F.FieldName:='NAME';
  90. F.DataSet:=ds;
  91. F.Size:=50;
  92. DS.CreateDataset;
  93. TestDataset(ds);
  94. DS.Close;
  95. DS.CreateDataset;
  96. TestDataset(ds);
  97. end;
  98. procedure TTestSpecificTBufDataset.TestOpeningNonExistingDataset;
  99. var ds : TBufDataset;
  100. f: TField;
  101. begin
  102. ds := TBufDataset.Create(nil);
  103. F := TIntegerField.Create(ds);
  104. F.FieldName:='ID';
  105. F.DataSet:=ds;
  106. CheckException(ds.Open,EDatabaseError);
  107. ds.Free;
  108. ds := TBufDataset.Create(nil);
  109. DS.FieldDefs.Add('ID',ftInteger);
  110. CheckException(ds.Open,EDatabaseError);
  111. ds.Free;
  112. end;
  113. procedure TTestSpecificTBufDataset.TestCreationDatasetWithCalcFields;
  114. var ds : TBufDataset;
  115. f: TField;
  116. i: integer;
  117. begin
  118. ds := TBufDataset.Create(nil);
  119. try
  120. F := TIntegerField.Create(ds);
  121. F.FieldName:='ID';
  122. F.DataSet:=ds;
  123. F := TStringField.Create(ds);
  124. F.FieldName:='NAME';
  125. F.DataSet:=ds;
  126. F.Size:=50;
  127. F := TStringField.Create(ds);
  128. F.FieldKind:=fkCalculated;
  129. F.FieldName:='NAME_CALC';
  130. F.DataSet:=ds;
  131. F.Size:=50;
  132. F := TStringField.Create(ds);
  133. F.FieldKind:=fkLookup;
  134. F.FieldName:='NAME_LKP';
  135. F.LookupDataSet:=DBConnector.GetNDataset(5);
  136. F.KeyFields:='ID';
  137. F.LookupKeyFields:='ID';
  138. F.LookupResultField:='NAME';
  139. F.DataSet:=ds;
  140. F.Size:=50;
  141. DS.CreateDataset;
  142. TestDataset(ds);
  143. for i := 0 to ds.FieldDefs.Count-1 do
  144. begin
  145. CheckNotEquals(ds.FieldDefs[i].Name,'NAME_CALC');
  146. CheckNotEquals(ds.FieldDefs[i].Name,'NAME_LKP');
  147. end;
  148. DS.Close;
  149. finally
  150. ds.Free;
  151. end;
  152. end;
  153. initialization
  154. {$ifdef fpc}
  155. if uppercase(dbconnectorname)='BUFDATASET' then
  156. begin
  157. RegisterTestDecorator(TDBBasicsTestSetup, TTestSpecificTBufDataset);
  158. end;
  159. {$endif fpc}
  160. end.