testbufdatasetstreams.pas 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704
  1. unit TestBufDatasetStreams;
  2. {$IFDEF FPC}
  3. {$mode objfpc}{$H+}
  4. {$ENDIF}
  5. interface
  6. uses
  7. fpcunit, testutils, testregistry, testdecorator,
  8. Classes, SysUtils, db, BufDataset;
  9. type
  10. { TTestBufDatasetStreams }
  11. TUpdDatasetProc = procedure(ADataset : TCustomBufDataset) of object;
  12. TTestBufDatasetStreams = class(TTestCase)
  13. private
  14. procedure CompareDatasets(ADataset1, ADataset2 : TDataset);
  15. procedure TestChangesApplyUpdates(AUpdDatasetProc : TUpdDatasetProc; Inserts: Boolean=False);
  16. procedure TestChangesCancelUpdates(AUpdDatasetProc : TUpdDatasetProc);
  17. procedure TestChanges(AUpdDatasetProc : TUpdDatasetProc; AFormat : TDataPacketFormat=dfBinary);
  18. procedure TestChangesXML(AUpdDatasetProc : TUpdDatasetProc);
  19. procedure SimpleEditChange(ADataset: TCustomBufDataset);
  20. procedure SimpleDeleteChange(ADataset: TCustomBufDataset);
  21. procedure MoreDeletesChange(ADataset: TCustomBufDataset);
  22. procedure SimpleInsertChange(ADataset: TCustomBufDataset);
  23. procedure MoreInsertsChange(ADataset: TCustomBufDataset);
  24. procedure SeveralEditsChange(ADataset: TCustomBufDataset);
  25. procedure DeleteAllChange(ADataset: TCustomBufDataset);
  26. procedure DeleteAllInsertChange(ADataset: TCustomBufDataset);
  27. procedure NullInsertChange(ADataset: TCustomBufDataset);
  28. procedure NullEditChange(ADataset: TCustomBufDataset);
  29. procedure AppendDeleteChange(ADataset: TCustomBufDataset);
  30. protected
  31. procedure SetUp; override;
  32. procedure TearDown; override;
  33. published
  34. procedure TestSimpleEditCancelUpd;
  35. procedure TestSimpleDeleteCancelUpd;
  36. procedure TestMoreDeletesCancelUpd;
  37. procedure TestSimpleInsertCancelUpd;
  38. procedure MoreInsertsCancelUpd;
  39. procedure SeveralEditsCancelUpd;
  40. procedure DeleteAllCancelUpd;
  41. procedure DeleteAllInsertCancelUpd;
  42. procedure AppendDeleteCancelUpd;
  43. procedure TestSimpleEditApplUpd;
  44. procedure TestSimpleDeleteApplUpd;
  45. procedure TestMoreDeletesApplUpd;
  46. procedure TestSimpleInsertApplUpd;
  47. procedure MoreInsertsApplUpd;
  48. procedure SeveralEditsApplUpd;
  49. procedure DeleteAllApplUpd;
  50. procedure DeleteAllInsertApplUpd;
  51. procedure NullInsertUpdateApplUpd;
  52. procedure TestBasicsXML;
  53. procedure TestSimpleEditXML;
  54. procedure TestSimpleDeleteXML;
  55. procedure TestMoreDeletesXML;
  56. procedure TestSimpleInsertXML;
  57. procedure TestMoreInsertsXML;
  58. procedure TestSeveralEditsXML;
  59. procedure TestDeleteAllXML;
  60. procedure TestDeleteAllInsertXML;
  61. procedure TestStreamingBlobFieldsXML;
  62. procedure TestStreamingBigBlobFieldsXML;
  63. procedure TestStreamingCalculatedFieldsXML;
  64. procedure TestAppendDeleteBIN;
  65. procedure TestFileNameProperty;
  66. procedure TestXmlFileRecognition;
  67. procedure TestCloseDatasetNoConnection; // bug 17623
  68. end;
  69. implementation
  70. uses toolsunit, SQLDBToolsUnit, sqldb, XMLDatapacketReader;
  71. procedure TTestBufDatasetStreams.CompareDatasets(ADataset1,
  72. ADataset2: TDataset);
  73. begin
  74. ADataset1.First;
  75. ADataset2.First;
  76. while not ADataset1.EOF do
  77. begin
  78. AssertEquals(ADataset1.FieldByName('ID').AsInteger,ADataset2.FieldByName('ID').AsInteger);
  79. AssertEquals(ADataset1.FieldByName('NAME').AsString,ADataset2.FieldByName('NAME').AsString);
  80. ADataset1.Next;
  81. ADataset2.Next;
  82. end;
  83. end;
  84. procedure TTestBufDatasetStreams.TestChangesApplyUpdates(
  85. AUpdDatasetProc: TUpdDatasetProc; Inserts : Boolean);
  86. var OrgDs,
  87. ChangedDs : TCustomBufDataset;
  88. begin
  89. OrgDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  90. OrgDs.Open;
  91. AUpdDatasetProc(OrgDs);
  92. OrgDs.ApplyUpdates;
  93. if Inserts then
  94. begin
  95. ChangedDs := TSQLDBConnector(DBConnector).Query;
  96. ChangedDs.Close;
  97. TSQLQuery(ChangedDS).SQL.Text:='SELECT * FROM FPDEV WHERE (ID < 16) or (ID>100) ORDER BY ID';
  98. OrgDs.IndexFieldNames:='ID';
  99. OrgDs.First;
  100. end
  101. else
  102. ChangedDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  103. ChangedDs.Open;
  104. CompareDatasets(OrgDs,ChangedDs);
  105. end;
  106. procedure TTestBufDatasetStreams.TestChangesCancelUpdates(
  107. AUpdDatasetProc: TUpdDatasetProc);
  108. var OrgDs,
  109. ChangedDs : TCustomBufDataset;
  110. begin
  111. OrgDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  112. OrgDs.Open;
  113. AUpdDatasetProc(OrgDs);
  114. OrgDs.CancelUpdates;
  115. ChangedDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  116. ChangedDs.Open;
  117. CompareDatasets(OrgDs,ChangedDs);
  118. end;
  119. procedure TTestBufDatasetStreams.TestChanges(AUpdDatasetProc: TUpdDatasetProc;
  120. AFormat: TDataPacketFormat);
  121. var FileName: string;
  122. SaveDs,
  123. LoadDs : TCustomBufDataset;
  124. begin
  125. case AFormat of
  126. dfBinary: FileName := 'Basics.dat';
  127. else FileName := 'Basics.xml';
  128. end;
  129. SaveDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  130. SaveDs.Open;
  131. AUpdDatasetProc(SaveDs);
  132. SaveDs.SaveToFile(FileName, AFormat);
  133. LoadDs := TCustomBufDataset.Create(nil);
  134. LoadDs.LoadFromFile(FileName);
  135. CompareDatasets(SaveDs,LoadDs);
  136. SaveDs.Close;
  137. SaveDs.Open;
  138. LoadDs.CancelUpdates;
  139. CompareDatasets(SaveDs,LoadDs);
  140. SaveDs.Close;
  141. LoadDs.Free;
  142. DeleteFile(FileName);
  143. end;
  144. procedure TTestBufDatasetStreams.TestChangesXML(AUpdDatasetProc: TUpdDatasetProc);
  145. begin
  146. TestChanges(AUpdDatasetProc, dfXML);
  147. end;
  148. procedure TTestBufDatasetStreams.SimpleEditChange(ADataset: TCustomBufDataset);
  149. begin
  150. ADataset.next;
  151. ADataset.edit;
  152. ADataset.FieldByName('name').AsString:='jojo';
  153. ADataset.Post;
  154. end;
  155. procedure TTestBufDatasetStreams.SimpleDeleteChange(ADataset: TCustomBufDataset);
  156. begin
  157. ADataset.Next;
  158. ADataset.Delete;
  159. end;
  160. procedure TTestBufDatasetStreams.MoreDeletesChange(ADataset: TCustomBufDataset);
  161. begin
  162. with ADataset do
  163. begin
  164. Delete;
  165. Next;
  166. // Next is to test what happens if the delete-buffer of one record is linked
  167. // to another deleted record
  168. Delete;
  169. Delete;
  170. Next;
  171. Next;
  172. Next;
  173. Next;
  174. // Next is to test two delete-update buffers which are linked to one record
  175. Delete;
  176. Prior;
  177. Delete;
  178. Last;
  179. Delete;
  180. end;
  181. end;
  182. procedure TTestBufDatasetStreams.SimpleInsertChange(ADataset: TCustomBufDataset);
  183. begin
  184. ADataset.next;
  185. ADataset.insert;
  186. ADataset.FieldByName('id').AsInteger:=500;
  187. ADataset.FieldByName('name').AsString:='TestName0500';
  188. ADataset.Post;
  189. end;
  190. procedure TTestBufDatasetStreams.MoreInsertsChange(ADataset: TCustomBufDataset);
  191. begin
  192. with ADataset do
  193. begin
  194. insert;
  195. FieldByName('id').AsInteger:=501;
  196. FieldByName('name').AsString:='TestName0501';
  197. Post;
  198. next;
  199. next;
  200. insert;
  201. FieldByName('id').AsInteger:=502;
  202. FieldByName('name').AsString:='TestName0502';
  203. Post;
  204. next;
  205. insert;
  206. FieldByName('id').AsInteger:=503;
  207. FieldByName('name').AsString:='TestName0503';
  208. Post;
  209. next;
  210. insert;
  211. FieldByName('id').AsInteger:=504;
  212. FieldByName('name').AsString:='TestName0504';
  213. Post;
  214. insert;
  215. FieldByName('id').AsInteger:=505;
  216. FieldByName('name').AsString:='TestName0505';
  217. Post;
  218. last;
  219. insert;
  220. FieldByName('id').AsInteger:=506;
  221. FieldByName('name').AsString:='TestName0506';
  222. Post;
  223. Append;
  224. FieldByName('id').AsInteger:=507;
  225. FieldByName('name').AsString:='TestName0507';
  226. Post;
  227. end;
  228. end;
  229. procedure TTestBufDatasetStreams.SeveralEditsChange(ADataset: TCustomBufDataset);
  230. begin
  231. with ADataset do
  232. begin
  233. edit;
  234. fieldbyname('id').asinteger := 500;
  235. fieldbyname('name').AsString := 'JoJo';
  236. post;
  237. next; next;
  238. Delete;
  239. Delete;
  240. next;next;
  241. insert;
  242. fieldbyname('id').asinteger := 501;
  243. post;
  244. end;
  245. end;
  246. procedure TTestBufDatasetStreams.DeleteAllChange(ADataset: TCustomBufDataset);
  247. begin
  248. with ADataset do
  249. while not eof do delete;
  250. end;
  251. procedure TTestBufDatasetStreams.DeleteAllInsertChange(ADataset: TCustomBufDataset);
  252. begin
  253. DeleteAllChange(ADataset);
  254. with ADataset do
  255. begin
  256. insert;
  257. fieldbyname('ID').AsInteger:=5;
  258. post;
  259. end;
  260. end;
  261. procedure TTestBufDatasetStreams.NullInsertChange(ADataset: TCustomBufDataset);
  262. begin
  263. with ADataset do
  264. begin
  265. AssertTrue(Locate('ID',11,[]));
  266. Delete; //11
  267. Delete; //12
  268. Delete; //13
  269. Delete; //14
  270. Append;
  271. FieldByName('ID').AsInteger:=11;
  272. //FieldByName('NAME').Clear;
  273. Post;
  274. AppendRecord([12,'AfterNull']);
  275. AppendRecord([13,null]);
  276. AppendRecord([14,'AfterNull']);
  277. //Append; Post;
  278. end;
  279. end;
  280. procedure TTestBufDatasetStreams.NullEditChange(ADataset: TCustomBufDataset);
  281. var i: integer;
  282. begin
  283. //depends on procedure TTestBufDatasetStreams.NullInsertChange
  284. if ADataSet is TSQLQuery then
  285. with ADataset as TSQLQuery do
  286. begin
  287. AssertTrue(Locate('ID',11,[]));
  288. for i:=11 to 14 do
  289. begin
  290. Edit;
  291. FieldByName('NAME').AsString:='TestName'+inttostr(i);
  292. Post;
  293. Next;
  294. end;
  295. UpdateMode:=upWhereAll; //test when also null fields will be in where
  296. end;
  297. end;
  298. procedure TTestBufDatasetStreams.AppendDeleteChange(ADataset: TCustomBufDataset);
  299. begin
  300. // Tests bugs #19593, #21994
  301. with ADataset do
  302. begin
  303. AppendRecord([16,'TestName16']);
  304. AppendRecord([17,'TestName17']);
  305. Prior;
  306. Prior;
  307. Delete; // 15 update-buffer of deleted record is linked to 16
  308. Delete; // 16 inserted-deleted and linked by 15
  309. AppendRecord([18,'TestName18']); // again append after delete
  310. end;
  311. end;
  312. procedure TTestBufDatasetStreams.TestSimpleEditCancelUpd;
  313. begin
  314. TestChangesCancelUpdates(@SimpleEditChange);
  315. end;
  316. procedure TTestBufDatasetStreams.TestSimpleDeleteCancelUpd;
  317. begin
  318. TestChangesCancelUpdates(@SimpleDeleteChange);
  319. end;
  320. procedure TTestBufDatasetStreams.TestMoreDeletesCancelUpd;
  321. begin
  322. TestChangesCancelUpdates(@MoreDeletesChange);
  323. end;
  324. procedure TTestBufDatasetStreams.TestSimpleInsertCancelUpd;
  325. begin
  326. TestChangesCancelUpdates(@SimpleInsertChange);
  327. end;
  328. procedure TTestBufDatasetStreams.MoreInsertsCancelUpd;
  329. begin
  330. TestChangesCancelUpdates(@MoreInsertsChange);
  331. end;
  332. procedure TTestBufDatasetStreams.SeveralEditsCancelUpd;
  333. begin
  334. TestChangesCancelUpdates(@SeveralEditsChange);
  335. end;
  336. procedure TTestBufDatasetStreams.DeleteAllCancelUpd;
  337. begin
  338. TestChangesCancelUpdates(@DeleteAllChange);
  339. end;
  340. procedure TTestBufDatasetStreams.DeleteAllInsertCancelUpd;
  341. begin
  342. TestChangesCancelUpdates(@DeleteAllInsertChange);
  343. end;
  344. procedure TTestBufDatasetStreams.AppendDeleteCancelUpd;
  345. begin
  346. TestChangesCancelUpdates(@AppendDeleteChange);
  347. end;
  348. procedure TTestBufDatasetStreams.TestBasicsXML;
  349. var SaveDs: TCustomBufDataset;
  350. LoadDs: TCustomBufDataset;
  351. begin
  352. SaveDs := DBConnector.GetNDataset(true,15) as TCustomBufDataset;
  353. SaveDs.Open;
  354. SaveDs.SaveToFile('Basics.xml',dfXML);
  355. LoadDs := TCustomBufDataset.Create(nil);
  356. LoadDs.LoadFromFile('Basics.xml');
  357. CompareDatasets(SaveDs,LoadDs);
  358. LoadDs.Free;
  359. end;
  360. procedure TTestBufDatasetStreams.TestSimpleEditXML;
  361. begin
  362. TestChangesXML(@SimpleEditChange);
  363. end;
  364. procedure TTestBufDatasetStreams.TestSimpleDeleteXML;
  365. begin
  366. TestChangesXML(@SimpleDeleteChange);
  367. end;
  368. procedure TTestBufDatasetStreams.TestMoreDeletesXML;
  369. begin
  370. TestChangesXML(@MoreDeletesChange);
  371. end;
  372. procedure TTestBufDatasetStreams.TestSimpleInsertXML;
  373. begin
  374. TestChangesXML(@SimpleInsertChange);
  375. end;
  376. procedure TTestBufDatasetStreams.TestMoreInsertsXML;
  377. begin
  378. TestChangesXML(@MoreInsertsChange);
  379. end;
  380. procedure TTestBufDatasetStreams.TestSeveralEditsXML;
  381. begin
  382. TestChangesXML(@SeveralEditsChange);
  383. end;
  384. procedure TTestBufDatasetStreams.TestDeleteAllXML;
  385. begin
  386. TestChangesXML(@DeleteAllChange);
  387. end;
  388. procedure TTestBufDatasetStreams.TestDeleteAllInsertXML;
  389. begin
  390. TestChangesXML(@DeleteAllInsertChange);
  391. end;
  392. procedure TTestBufDatasetStreams.TestStreamingBlobFieldsXML;
  393. var SaveDs: TCustomBufDataset;
  394. LoadDs: TCustomBufDataset;
  395. begin
  396. SaveDs := DBConnector.GetFieldDataset as TCustomBufDataset;
  397. SaveDs.Open;
  398. SaveDs.SaveToFile('FieldsDS.xml',dfXML);
  399. LoadDs := TCustomBufDataset.Create(nil);
  400. LoadDs.LoadFromFile('FieldsDS.xml');
  401. LoadDS.First;
  402. SaveDS.First;
  403. while not LoadDS.EOF do
  404. begin
  405. AssertEquals(LoadDS.FieldByName('FBLOB').AsString,SaveDS.FieldByName('FBLOB').AsString);
  406. AssertEquals(LoadDS.FieldByName('FMEMO').AsString,SaveDS.FieldByName('FMEMO').AsString);
  407. LoadDS.Next;
  408. SaveDS.Next;
  409. end;
  410. LoadDs.Free;
  411. end;
  412. procedure TTestBufDatasetStreams.TestStreamingBigBlobFieldsXML;
  413. var
  414. SaveDs: TCustomBufDataset;
  415. LoadDs: TCustomBufDataset;
  416. j: integer;
  417. i: byte;
  418. s: string;
  419. f: file of byte;
  420. fn: string;
  421. fs: TMemoryStream;
  422. begin
  423. // Create a temp. file with blob-data.
  424. fn := GetTempFileName;
  425. assign(f,fn);
  426. Rewrite(f);
  427. s := 'This is a blob-field test file.';
  428. for j := 0 to 250 do
  429. begin
  430. for i := 1 to length(s) do
  431. write(f,ord(s[i]));
  432. for i := 0 to 255 do
  433. write(f,i);
  434. end;
  435. close(f);
  436. try
  437. // Open dataset and set blob-field-data to content of blob-file.
  438. SaveDs := DBConnector.GetFieldDataset(true) as TCustomBufDataset;
  439. SaveDs.Open;
  440. SaveDs.Edit;
  441. TBlobField(SaveDs.FieldByName('FBLOB')).LoadFromFile(fn);
  442. SaveDs.Post;
  443. // Save this dataset to file.
  444. SaveDs.SaveToFile('FieldsDS.xml',dfXML);
  445. // Load this file in another dataset
  446. LoadDs := TCustomBufDataset.Create(nil);
  447. try
  448. LoadDs.LoadFromFile('FieldsDS.xml');
  449. LoadDS.First;
  450. // Compare the content of the blob-field with the file on disc
  451. fs := TMemoryStream.Create;
  452. try
  453. TBlobField(SaveDs.FieldByName('FBLOB')).SaveToStream(fs);
  454. fs.Seek(0,soBeginning);
  455. assign(f,fn);
  456. reset(f);
  457. for j := 0 to fs.Size-1 do
  458. begin
  459. read(f,i);
  460. CheckEquals(i,fs.ReadByte);
  461. end;
  462. finally
  463. fs.free;
  464. end;
  465. finally
  466. LoadDs.Free;
  467. end;
  468. finally
  469. DeleteFile(fn);
  470. end;
  471. end;
  472. procedure TTestBufDatasetStreams.TestStreamingCalculatedFieldsXML;
  473. var
  474. ADataset: TCustomBufDataset;
  475. f: tfield;
  476. begin
  477. ADataset := DBConnector.GetNDataset(true,10) as TCustomBufDataset;
  478. f := TIntegerField.Create(ADataset);
  479. f.FieldName:='ID';
  480. f.dataset := ADataset;
  481. f := TIntegerField.Create(ADataset);
  482. f.FieldName:='CalcID';
  483. f.dataset := ADataset;
  484. f.FieldKind:=fkCalculated;
  485. f := TStringField.Create(ADataset);
  486. f.FieldName:='NAME';
  487. f.dataset := ADataset;
  488. ADataset.Open;
  489. ADataset.SaveToFile('FieldsDS.xml',dfXML);
  490. ADataset.Close;
  491. ADataset.LoadFromFile('FieldsDS.xml',dfXML);
  492. AssertEquals(ADataset.FieldByName('ID').AsInteger,1);
  493. AssertEquals(ADataset.FieldByName('NAME').AsString,'TestName1');
  494. ADataset.Close;
  495. end;
  496. procedure TTestBufDatasetStreams.TestAppendDeleteBIN;
  497. begin
  498. TestChanges(@AppendDeleteChange);
  499. end;
  500. procedure TTestBufDatasetStreams.TestFileNameProperty;
  501. var ds : TDataset;
  502. LoadDs: TDataset;
  503. begin
  504. ds := DBConnector.GetNDataset(true,5);
  505. ds.open;
  506. TCustomBufDataset(ds).FileName:='test.dat';
  507. ds.close;
  508. LoadDs := DBConnector.GetNDataset(True,2);
  509. TCustomBufDataset(LoadDs).FileName:='test.dat';
  510. LoadDs.Open;
  511. ds := DBConnector.GetNDataset(true,4);
  512. ds.Open;
  513. CompareDatasets(ds,LoadDs);
  514. ds.close;
  515. LoadDs.close;
  516. end;
  517. procedure TTestBufDatasetStreams.TestXmlFileRecognition;
  518. var ds : TDataset;
  519. LoadDs: TDataset;
  520. begin
  521. ds := DBConnector.GetNDataset(true,5);
  522. ds.open;
  523. TCustomBufDataset(ds).SaveToFile('test.xml',dfXML);
  524. ds.close;
  525. LoadDs := DBConnector.GetNDataset(True,2);
  526. TCustomBufDataset(LoadDs).FileName:='test.xml';
  527. LoadDs.Open;
  528. ds := DBConnector.GetNDataset(true,4);
  529. ds.Open;
  530. CompareDatasets(ds,LoadDs);
  531. ds.close;
  532. LoadDs.close;
  533. end;
  534. procedure TTestBufDatasetStreams.TestCloseDatasetNoConnection;
  535. var SaveDs: TCustomBufDataset;
  536. LoadDs: TCustomBufDataset;
  537. Conn: TSQLConnection;
  538. begin
  539. SaveDs := DBConnector.GetNDataset(true,15) as TSQLQuery;
  540. SaveDs.Open;
  541. SaveDs.SaveToFile('Basics.xml',dfXML);
  542. SaveDs.Close;
  543. Conn := TSQLConnectionClass(TSQLDBConnector(DBConnector).Connection.ClassType).Create(nil);
  544. LoadDs := TSQLQuery.Create(nil);
  545. LoadDs.DataBase:=Conn;
  546. LoadDs.LoadFromFile('Basics.xml');
  547. LoadDs.Next;
  548. LoadDs.Close;
  549. LoadDs.Free;
  550. Conn.Free;
  551. end;
  552. procedure TTestBufDatasetStreams.TestSimpleEditApplUpd;
  553. begin
  554. TestChangesApplyUpdates(@SimpleEditChange);
  555. end;
  556. procedure TTestBufDatasetStreams.TestSimpleDeleteApplUpd;
  557. begin
  558. TestChangesApplyUpdates(@SimpleDeleteChange);
  559. end;
  560. procedure TTestBufDatasetStreams.TestMoreDeletesApplUpd;
  561. begin
  562. TestChangesApplyUpdates(@MoreDeletesChange);
  563. end;
  564. procedure TTestBufDatasetStreams.TestSimpleInsertApplUpd;
  565. begin
  566. TestChangesApplyUpdates(@SimpleInsertChange,True);
  567. end;
  568. procedure TTestBufDatasetStreams.MoreInsertsApplUpd;
  569. begin
  570. TestChangesApplyUpdates(@MoreInsertsChange,True);
  571. end;
  572. procedure TTestBufDatasetStreams.SeveralEditsApplUpd;
  573. begin
  574. TestChangesApplyUpdates(@SeveralEditsChange, True);
  575. end;
  576. procedure TTestBufDatasetStreams.DeleteAllApplUpd;
  577. begin
  578. TestChangesApplyUpdates(@DeleteAllChange, False);
  579. end;
  580. procedure TTestBufDatasetStreams.DeleteAllInsertApplUpd;
  581. begin
  582. TestChangesApplyUpdates(@DeleteAllInsertChange, False);
  583. end;
  584. procedure TTestBufDatasetStreams.NullInsertUpdateApplUpd;
  585. begin
  586. TestChangesApplyUpdates(@NullInsertChange, True);
  587. TestChangesApplyUpdates(@NullEditChange, True);
  588. end;
  589. procedure TTestBufDatasetStreams.SetUp;
  590. begin
  591. DBConnector.StartTest;
  592. end;
  593. procedure TTestBufDatasetStreams.TearDown;
  594. begin
  595. DBConnector.StopTest;
  596. end;
  597. initialization
  598. if uppercase(dbconnectorname)='SQL' then
  599. RegisterTestDecorator(TDBBasicsTestSetup, TTestBufDatasetStreams);
  600. end.