testdbbasics.pas 7.0 KB

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