Browse Source

* Added tests for update-buffers and streaming

git-svn-id: trunk@12448 -
joost 16 years ago
parent
commit
204de0d4cf

+ 1 - 0
.gitattributes

@@ -1337,6 +1337,7 @@ packages/fcl-db/tests/memdstoolsunit.pas svneol=native#text/plain
 packages/fcl-db/tests/sdfdstoolsunit.pas svneol=native#text/plain
 packages/fcl-db/tests/sqldbtoolsunit.pas -text
 packages/fcl-db/tests/testbasics.pas svneol=native#text/plain
+packages/fcl-db/tests/testbufdatasetstreams.pas svneol=native#text/plain
 packages/fcl-db/tests/testdatasources.pas svneol=native#text/plain
 packages/fcl-db/tests/testdbbasics.pas -text
 packages/fcl-db/tests/testdddiff.pp svneol=native#text/plain

+ 2 - 1
packages/fcl-db/tests/dbtestframework.pas

@@ -20,7 +20,8 @@ uses
   testbasics,
   testfieldtypes,
   TestDatasources,
-  testdbbasics;
+  testdbbasics,
+  TestBufDatasetStreams;
 
 var
   FXMLResultsWriter: TXMLResultsWriter;

+ 433 - 0
packages/fcl-db/tests/testbufdatasetstreams.pas

@@ -0,0 +1,433 @@
+unit TestBufDatasetStreams;
+
+{$IFDEF FPC}
+  {$mode objfpc}{$H+}
+{$ENDIF}
+
+interface
+
+uses
+  fpcunit, testutils, testregistry, testdecorator,
+  Classes, SysUtils, db, BufDataset;
+
+type
+
+  { TTestBufDatasetStreams }
+
+  TUpdDatasetProc = procedure(ADataset : TBufDataset) of object;
+
+  TTestBufDatasetStreams = class(TTestCase)
+  private
+    procedure CompareDatasets(ADataset1, ADataset2 : TDataset);
+
+    procedure TestChangesApplyUpdates(AUpdDatasetProc : TUpdDatasetProc; Inserts: Boolean=False);
+    procedure TestChangesCancelUpdates(AUpdDatasetProc : TUpdDatasetProc);
+    procedure TestChangesXML(AUpdDatasetProc : TUpdDatasetProc);
+
+    procedure SimpleEditChange(ADataset: TBufDataset);
+    procedure SimpleDeleteChange(ADataset: TBufDataset);
+    procedure MoreDeletesChange(ADataset: TBufDataset);
+    procedure SimpleInsertChange(ADataset: TBufDataset);
+    procedure MoreInsertsChange(ADataset: TBufDataset);
+    procedure SeveralEditsChange(ADataset: TBufDataset);
+    procedure DeleteAllChange(ADataset: TBufDataset);
+  protected
+    procedure SetUp; override;
+    procedure TearDown; override;
+  published
+    procedure TestSimpleEditCancelUpd;
+    procedure TestSimpleDeleteCancelUpd;
+    procedure TestMoreDeletesCancelUpd;
+    procedure TestSimpleInsertCancelUpd;
+    procedure MoreInsertsCancelUpd;
+    procedure SeveralEditsCancelUpd;
+    procedure DeleteAllCancelUpd;
+
+    procedure TestSimpleEditApplUpd;
+    procedure TestSimpleDeleteApplUpd;
+    procedure TestMoreDeletesApplUpd;
+    procedure TestSimpleInsertApplUpd;
+    procedure MoreInsertsApplUpd;
+    procedure SeveralEditsApplUpd;
+    procedure DeleteAllApplUpd;
+
+    procedure TestBasicsXML;
+    procedure TestSimpleEditXML;
+    procedure TestSimpleDeleteXML;
+    procedure TestMoreDeletesXML;
+    procedure TestSimpleInsertXML;
+    procedure TestMoreInsertsXML;
+    procedure TestSeveralEditsXML;
+    procedure TestDeleteAllXML;
+
+    procedure TestFileNameProperty;
+  end;
+
+  { TSQLTestSetup }
+
+  TDBBasicsTestSetup = class(TTestSetup)
+  protected
+    procedure OneTimeSetup; override;
+    procedure OneTimeTearDown; override;
+  end;
+
+implementation
+
+uses toolsunit, SQLDBToolsUnit, sqldb, XMLDatapacketReader;
+
+procedure TTestBufDatasetStreams.CompareDatasets(ADataset1,
+  ADataset2: TDataset);
+begin
+  ADataset1.First;
+  ADataset2.First;
+  while not ADataset1.EOF do
+    begin
+    AssertEquals(ADataset1.FieldByName('ID').AsInteger,ADataset2.FieldByName('ID').AsInteger);
+    AssertEquals(ADataset1.FieldByName('NAME').AsString,ADataset2.FieldByName('NAME').AsString);
+    ADataset1.Next;
+    ADataset2.Next;
+    end;
+end;
+
+procedure TTestBufDatasetStreams.TestChangesApplyUpdates(
+  AUpdDatasetProc: TUpdDatasetProc; Inserts : Boolean);
+var OrgDs,
+    ChangedDs : TBufDataset;
+begin
+  OrgDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  OrgDs.Open;
+  AUpdDatasetProc(OrgDs);
+  OrgDs.ApplyUpdates;
+
+  if Inserts then
+    begin
+    ChangedDs := TSQLDBConnector(DBConnector).Query;
+    TSQLQuery(ChangedDS).SQL.Text:='SELECT * FROM FPDEV WHERE (ID < 16) or (ID>100) ORDER BY ID';
+
+    OrgDs.IndexFieldNames:='ID';
+    OrgDs.First;
+    end
+  else
+    ChangedDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  ChangedDs.Open;
+  CompareDatasets(OrgDs,ChangedDs);
+end;
+
+procedure TTestBufDatasetStreams.TestChangesCancelUpdates(
+  AUpdDatasetProc: TUpdDatasetProc);
+var OrgDs,
+    ChangedDs : TBufDataset;
+begin
+  OrgDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  OrgDs.Open;
+  AUpdDatasetProc(OrgDs);
+  OrgDs.CancelUpdates;
+
+  ChangedDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  ChangedDs.Open;
+  CompareDatasets(OrgDs,ChangedDs);
+end;
+
+procedure TTestBufDatasetStreams.TestChangesXML(AUpdDatasetProc: TUpdDatasetProc);
+var SaveDs,
+    LoadDs : TBufDataset;
+begin
+  SaveDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  SaveDs.Open;
+  AUpdDatasetProc(SaveDs);
+  SaveDs.SaveToFile('Basics.xml',dfXML);
+
+  LoadDs := TBufDataset.Create(nil);
+  LoadDs.LoadFromFile('Basics.xml');
+
+  CompareDatasets(SaveDs,LoadDs);
+  SaveDs.Close;
+
+  SaveDs.Open;
+  LoadDs.CancelUpdates;
+  CompareDatasets(SaveDs,LoadDs);
+  LoadDs.Free;
+end;
+
+procedure TTestBufDatasetStreams.SimpleEditChange(ADataset: TBufDataset);
+begin
+  ADataset.next;
+  ADataset.edit;
+  ADataset.FieldByName('name').AsString:='jojo';
+  ADataset.Post;
+end;
+
+procedure TTestBufDatasetStreams.SimpleDeleteChange(ADataset: TBufDataset);
+begin
+  ADataset.Next;
+  ADataset.Delete;
+end;
+
+procedure TTestBufDatasetStreams.MoreDeletesChange(ADataset: TBufDataset);
+begin
+  with ADataset do
+    begin
+    Delete;
+    Next;
+    // Next is to test what happens if the delete-buffer of one record is linked
+    // to another deleted record
+    Delete;
+    Delete;
+    Next;
+    Next;
+    Next;
+    Next;
+    // Next is to test two delete-update buffers which are linked to one record
+    Delete;
+    Prior;
+    Delete;
+    Last;
+    Delete;
+    end;
+end;
+
+procedure TTestBufDatasetStreams.SimpleInsertChange(ADataset: TBufDataset);
+begin
+  ADataset.next;
+  ADataset.insert;
+  ADataset.FieldByName('id').AsInteger:=500;
+  ADataset.FieldByName('name').AsString:='TestName0500';
+  ADataset.Post;
+end;
+
+procedure TTestBufDatasetStreams.MoreInsertsChange(ADataset: TBufDataset);
+begin
+  with ADataset do
+    begin
+    insert;
+    FieldByName('id').AsInteger:=501;
+    FieldByName('name').AsString:='TestName0501';
+    Post;
+
+    next;
+    next;
+    insert;
+    FieldByName('id').AsInteger:=502;
+    FieldByName('name').AsString:='TestName0502';
+    Post;
+
+    next;
+    insert;
+    FieldByName('id').AsInteger:=503;
+    FieldByName('name').AsString:='TestName0503';
+    Post;
+
+    next;
+    insert;
+    FieldByName('id').AsInteger:=504;
+    FieldByName('name').AsString:='TestName0504';
+    Post;
+    insert;
+    FieldByName('id').AsInteger:=505;
+    FieldByName('name').AsString:='TestName0505';
+    Post;
+
+    last;
+    insert;
+    FieldByName('id').AsInteger:=506;
+    FieldByName('name').AsString:='TestName0506';
+    Post;
+
+    Append;
+    FieldByName('id').AsInteger:=507;
+    FieldByName('name').AsString:='TestName0507';
+    Post;
+    end;
+end;
+
+procedure TTestBufDatasetStreams.SeveralEditsChange(ADataset: TBufDataset);
+begin
+  with ADataset do
+    begin
+    edit;
+    fieldbyname('id').asinteger := 500;
+    fieldbyname('name').AsString := 'JoJo';
+    post;
+
+    next; next;
+    Delete;
+    Delete;
+
+    next;next;
+    insert;
+    fieldbyname('id').asinteger := 501;
+    post;
+    end;
+end;
+
+procedure TTestBufDatasetStreams.DeleteAllChange(ADataset: TBufDataset);
+begin
+  with ADataset do
+    while not eof do delete;
+end;
+
+procedure TTestBufDatasetStreams.SetUp;
+begin
+  DBConnector.StartTest;
+end;
+
+procedure TTestBufDatasetStreams.TearDown;
+begin
+  DBConnector.StopTest;
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleEditCancelUpd;
+begin
+  TestChangesCancelUpdates(@SimpleEditChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleDeleteCancelUpd;
+begin
+  TestChangesCancelUpdates(@SimpleDeleteChange);
+end;
+
+procedure TTestBufDatasetStreams.TestMoreDeletesCancelUpd;
+begin
+  TestChangesCancelUpdates(@MoreDeletesChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleInsertCancelUpd;
+begin
+  TestChangesCancelUpdates(@SimpleInsertChange);
+end;
+
+procedure TTestBufDatasetStreams.MoreInsertsCancelUpd;
+begin
+  TestChangesCancelUpdates(@MoreInsertsChange);
+end;
+
+procedure TTestBufDatasetStreams.SeveralEditsCancelUpd;
+begin
+  TestChangesCancelUpdates(@SeveralEditsChange);
+end;
+
+procedure TTestBufDatasetStreams.DeleteAllCancelUpd;
+begin
+  TestChangesCancelUpdates(@DeleteAllChange);
+end;
+
+procedure TTestBufDatasetStreams.TestBasicsXML;
+var SaveDs: TBufDataset;
+    LoadDs: TBufDataset;
+begin
+  SaveDs := DBConnector.GetNDataset(true,15) as TBufDataset;
+  SaveDs.Open;
+  SaveDs.SaveToFile('Basics.xml',dfXML);
+
+  LoadDs := TBufDataset.Create(nil);
+  LoadDs.LoadFromFile('Basics.xml');
+  CompareDatasets(SaveDs,LoadDs);
+  LoadDs.Free;
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleEditXML;
+begin
+  TestChangesXML(@SimpleEditChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleDeleteXML;
+begin
+  TestChangesXML(@SimpleDeleteChange);
+end;
+
+procedure TTestBufDatasetStreams.TestMoreDeletesXML;
+begin
+  TestChangesXML(@MoreDeletesChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleInsertXML;
+begin
+  TestChangesXML(@SimpleInsertChange);
+end;
+
+procedure TTestBufDatasetStreams.TestMoreInsertsXML;
+begin
+  TestChangesXML(@MoreInsertsChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSeveralEditsXML;
+begin
+  TestChangesXML(@SeveralEditsChange);
+end;
+
+procedure TTestBufDatasetStreams.TestDeleteAllXML;
+begin
+  TestChangesXML(@DeleteAllChange);
+end;
+
+procedure TTestBufDatasetStreams.TestFileNameProperty;
+var ds    : TDataset;
+    LoadDs: TDataset;
+begin
+  ds := DBConnector.GetNDataset(true,5);
+
+  ds.open;
+  TBufDataset(ds).FileName:='test.dat';
+  ds.close;
+
+  LoadDs := DBConnector.GetNDataset(True,2);
+  TBufDataset(LoadDs).FileName:='test.dat';
+  LoadDs.Open;
+
+  ds := DBConnector.GetNDataset(true,4);
+  ds.Open;
+  CompareDatasets(ds,LoadDs);
+  ds.close;
+  LoadDs.close;
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleEditApplUpd;
+begin
+  TestChangesApplyUpdates(@SimpleEditChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleDeleteApplUpd;
+begin
+  TestChangesApplyUpdates(@SimpleDeleteChange);
+end;
+
+procedure TTestBufDatasetStreams.TestMoreDeletesApplUpd;
+begin
+  TestChangesApplyUpdates(@MoreDeletesChange);
+end;
+
+procedure TTestBufDatasetStreams.TestSimpleInsertApplUpd;
+begin
+  TestChangesApplyUpdates(@SimpleInsertChange,True);
+end;
+
+procedure TTestBufDatasetStreams.MoreInsertsApplUpd;
+begin
+  TestChangesApplyUpdates(@MoreInsertsChange,True);
+end;
+
+procedure TTestBufDatasetStreams.SeveralEditsApplUpd;
+begin
+  TestChangesApplyUpdates(@SeveralEditsChange, True);
+end;
+
+procedure TTestBufDatasetStreams.DeleteAllApplUpd;
+begin
+  TestChangesApplyUpdates(@DeleteAllChange, False);
+end;
+
+{ TSQLTestSetup }
+procedure TDBBasicsTestSetup.OneTimeSetup;
+begin
+  InitialiseDBConnector;
+end;
+
+procedure TDBBasicsTestSetup.OneTimeTearDown;
+begin
+  FreeAndNil(DBConnector);
+end;
+
+initialization
+  if uppercase(dbconnectorname)='SQL' then
+    RegisterTestDecorator(TDBBasicsTestSetup, TTestBufDatasetStreams);
+end.