testbufdatasetstreams.pas 19 KB

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