testdbbasics.pas 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334
  1. unit TestDBBasics;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. fpcunit, testutils, testregistry, testdecorator,
  8. Classes, SysUtils;
  9. type
  10. { TTestSQLMechanism }
  11. { TTestDBBasics }
  12. TTestDBBasics = class(TTestCase)
  13. private
  14. protected
  15. procedure SetUp; override;
  16. procedure TearDown; override;
  17. procedure RunTest; override;
  18. published
  19. procedure TestDoubleClose;
  20. procedure TestAssignFieldftString;
  21. procedure TestAssignFieldftFixedChar;
  22. procedure TestSelectQueryBasics;
  23. procedure TestPostOnlyInEditState;
  24. procedure TestMove; // bug 5048
  25. procedure TestActiveBufferWhenClosed;
  26. procedure TestEOFBOFClosedDataset;
  27. procedure TestdeFieldListChange;
  28. procedure TestLastAppendCancel; // bug 5058
  29. procedure TestRecNo; // bug 5061
  30. end;
  31. { TSQLTestSetup }
  32. TDBBasicsTestSetup = class(TTestSetup)
  33. protected
  34. procedure OneTimeSetup; override;
  35. procedure OneTimeTearDown; override;
  36. end;
  37. implementation
  38. uses db, toolsunit;
  39. procedure TTestDBBasics.TestSelectQueryBasics;
  40. var b : TFieldType;
  41. begin
  42. with DBConnector.GetNDataset(1) do
  43. begin
  44. Open;
  45. AssertEquals(1,RecNo);
  46. AssertEquals(1,RecordCount);
  47. AssertEquals(2,FieldCount);
  48. AssertEquals('ID',fields[0].FieldName);
  49. AssertEquals('ID',fields[0].DisplayName); // uitzoeken verschil displaylabel
  50. AssertTrue('The datatype of the field ''ID'' is incorrect, it should be ftInteger',ftInteger=fields[0].DataType);
  51. AssertEquals('NAME',fields[1].FieldName);
  52. AssertEquals('NAME',fields[1].DisplayName);
  53. AssertTrue(ftString=fields[1].DataType);
  54. AssertEquals(1,fields[0].Value);
  55. AssertEquals('TestName1',fields[1].Value);
  56. Close;
  57. end;
  58. end;
  59. procedure TTestDBBasics.TestPostOnlyInEditState;
  60. begin
  61. with DBConnector.GetNDataset(1) do
  62. begin
  63. open;
  64. {$IFDEF FPC}
  65. AssertException('Post was called in a non-edit state',EDatabaseError,@Post);
  66. {$ELSE}
  67. AssertException('Post was called in a non-edit state',EDatabaseError,Post);
  68. {$ENDIF}
  69. end;
  70. end;
  71. procedure TTestDBBasics.TestMove;
  72. var i,count : integer;
  73. aDatasource : TDataSource;
  74. aDatalink : TDataLink;
  75. ABufferCount : Integer;
  76. begin
  77. aDatasource := TDataSource.Create(nil);
  78. aDatalink := TTestDataLink.Create;
  79. aDatalink.DataSource := aDatasource;
  80. ABufferCount := 11;
  81. aDatalink.BufferCount := ABufferCount;
  82. DataEvents := '';
  83. for count := 0 to 32 do with DBConnector.GetNDataset(count) do
  84. begin
  85. aDatasource.DataSet := DBConnector.GetNDataset(count);
  86. i := 1;
  87. Open;
  88. AssertEquals('deUpdateState:0;',DataEvents);
  89. DataEvents := '';
  90. while not EOF do
  91. begin
  92. AssertEquals(i,fields[0].AsInteger);
  93. AssertEquals('TestName'+inttostr(i),fields[1].AsString);
  94. inc(i);
  95. Next;
  96. if (i > ABufferCount) and not EOF then
  97. AssertEquals('deCheckBrowseMode:0;deDataSetScroll:-1;',DataEvents)
  98. else
  99. AssertEquals('deCheckBrowseMode:0;deDataSetScroll:0;',DataEvents);
  100. DataEvents := '';
  101. end;
  102. AssertEquals(count,i-1);
  103. close;
  104. AssertEquals('deUpdateState:0;',DataEvents);
  105. DataEvents := '';
  106. end;
  107. end;
  108. procedure TTestDBBasics.TestdeFieldListChange;
  109. var i,count : integer;
  110. aDatasource : TDataSource;
  111. aDatalink : TDataLink;
  112. begin
  113. aDatasource := TDataSource.Create(nil);
  114. aDatalink := TTestDataLink.Create;
  115. aDatalink.DataSource := aDatasource;
  116. with DBConnector.GetNDataset(1) do
  117. begin
  118. aDatasource.DataSet := DBConnector.GetNDataset(1);
  119. DataEvents := '';
  120. open;
  121. Fields.add(tfield.Create(DBConnector.GetNDataset(1)));
  122. AssertEquals('deUpdateState:0;deFieldListChange:0;',DataEvents);
  123. DataEvents := '';
  124. fields.Clear;
  125. AssertEquals('deFieldListChange:0;',DataEvents)
  126. end;
  127. aDatasource.Free;
  128. aDatalink.Free;
  129. end;
  130. procedure TTestDBBasics.TestActiveBufferWhenClosed;
  131. begin
  132. with DBConnector.GetNDataset(0) do
  133. begin
  134. {$IFDEF fpc}
  135. AssertNull(ActiveBuffer);
  136. {$ENDIF}
  137. open;
  138. AssertFalse('Activebuffer of an empty dataset shouldn''t be nil',ActiveBuffer = nil);
  139. end;
  140. end;
  141. procedure TTestDBBasics.TestEOFBOFClosedDataset;
  142. begin
  143. with DBConnector.GetNDataset(1) do
  144. begin
  145. AssertTrue(EOF);
  146. AssertTrue(BOF);
  147. open;
  148. close;
  149. AssertTrue(EOF);
  150. AssertTrue(BOF);
  151. end;
  152. end;
  153. procedure TTestDBBasics.TestLastAppendCancel;
  154. var count : integer;
  155. begin
  156. for count := 0 to 32 do with DBConnector.GetNDataset(count) do
  157. begin
  158. open;
  159. Last;
  160. Append;
  161. Cancel;
  162. AssertEquals(count,fields[0].asinteger);
  163. AssertEquals(count,RecordCount);
  164. Close;
  165. end;
  166. end;
  167. procedure TTestDBBasics.TestRecNo;
  168. begin
  169. with DBConnector.GetNDataset(0) do
  170. begin
  171. AssertEquals('Failed to get the RecNo from a closed dataset',0,RecNo);
  172. AssertEquals(0,RecordCount);
  173. Open;
  174. AssertEquals(0,RecordCount);
  175. AssertEquals(0,RecNo);
  176. first;
  177. AssertEquals(0,RecordCount);
  178. AssertEquals(0,RecNo);
  179. last;
  180. AssertEquals(0,RecordCount);
  181. AssertEquals(0,RecNo);
  182. append;
  183. AssertEquals(0,RecNo);
  184. AssertEquals(0,RecordCount);
  185. first;
  186. AssertEquals(0,RecNo);
  187. AssertEquals(0,RecordCount);
  188. append;
  189. FieldByName('id').AsInteger := 1;
  190. AssertEquals(0,RecNo);
  191. AssertEquals(0,RecordCount);
  192. first;
  193. AssertEquals(1,RecNo);
  194. AssertEquals(1,RecordCount);
  195. last;
  196. AssertEquals(1,RecNo);
  197. AssertEquals(1,RecordCount);
  198. append;
  199. FieldByName('id').AsInteger := 1;
  200. AssertEquals(0,RecNo);
  201. AssertEquals(1,RecordCount);
  202. Close;
  203. end;
  204. end;
  205. procedure TTestDBBasics.SetUp;
  206. begin
  207. DBConnector.InitialiseDatasets;
  208. end;
  209. procedure TTestDBBasics.TearDown;
  210. var count : integer;
  211. begin
  212. DBConnector.FreeDatasets;
  213. end;
  214. procedure TTestDBBasics.RunTest;
  215. begin
  216. inherited RunTest;
  217. // inherited RunTest;
  218. // inherited RunTest;
  219. end;
  220. procedure TTestDBBasics.TestDoubleClose;
  221. begin
  222. with DBConnector.GetNDataset(1) do
  223. begin
  224. close;
  225. close;
  226. open;
  227. close;
  228. close;
  229. end;
  230. end;
  231. procedure TTestDBBasics.TestAssignFieldftString;
  232. var AParam : TParam;
  233. AField : TField;
  234. begin
  235. AParam := TParam.Create(nil);
  236. with DBConnector.GetNDataset(1) do
  237. begin
  238. open;
  239. AField := fieldbyname('name');
  240. (AField as tstringfield).FixedChar := true;
  241. AParam.AssignField(AField);
  242. AssertTrue(ftFixedChar=AParam.DataType);
  243. close;
  244. end;
  245. AParam.Free;
  246. end;
  247. procedure TTestDBBasics.TestAssignFieldftFixedChar;
  248. var AParam : TParam;
  249. AField : TField;
  250. begin
  251. AParam := TParam.Create(nil);
  252. with DBConnector.GetNDataset(1) do
  253. begin
  254. open;
  255. AField := fieldbyname('name');
  256. (AField as tstringfield).FixedChar := true;
  257. AParam.AssignField(AField);
  258. AssertTrue(ftFixedChar=AParam.DataType);
  259. close;
  260. end;
  261. AParam.Free;
  262. end;
  263. { TSQLTestSetup }
  264. procedure TDBBasicsTestSetup.OneTimeSetup;
  265. begin
  266. InitialiseDBConnector;
  267. end;
  268. procedure TDBBasicsTestSetup.OneTimeTearDown;
  269. begin
  270. FreeAndNil(DBConnector);
  271. end;
  272. initialization
  273. RegisterTestDecorator(TDBBasicsTestSetup, TTestDBBasics);
  274. end.