testbufdatasetstreams.pas 18 KB

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