Browse Source

* fcl-db/dbase: test data remains in memo memory storage after closing and opening

git-svn-id: trunk@24386 -
reiniero 12 years ago
parent
commit
3d74c089d2
1 changed files with 46 additions and 2 deletions
  1. 46 2
      packages/fcl-db/tests/testspecifictdbf.pas

+ 46 - 2
packages/fcl-db/tests/testspecifictdbf.pas

@@ -53,6 +53,9 @@ type
     procedure TestFindPrior;
     // Tests writing and reading a memo field
     procedure TestMemo;
+    // Tests like TestMemo, but closes and reopens in memory file
+    // in between. Data should still be there.
+    procedure TestMemoClose;
     // Tests string field with
     // 254 characters (max for DBase IV)
     // 32767 characters (FoxPro, Visual FoxPro)
@@ -73,11 +76,13 @@ uses
 
 procedure TTestSpecificTDBF.WriteReadbackTest(ADBFDataset: TDbf;
   AutoInc: boolean);
+const
+  MaxRecs = 10;
 var
   i  : integer;
 begin
   // Add sample data
-  for i := 1 to 10 do
+  for i := 1 to MaxRecs do
     begin
     ADBFDataset.Append;
     if not AutoInc then
@@ -86,7 +91,7 @@ begin
     ADBFDataset.Post;
     end;
   ADBFDataset.first;
-  for i := 1 to 10 do
+  for i := 1 to MaxRecs do
     begin
     CheckEquals(i,ADBFDataset.fieldbyname('ID').asinteger);
     CheckEquals('TestName' + inttostr(i),ADBFDataset.fieldbyname('NAME').AsString);
@@ -367,6 +372,7 @@ begin
   ds := TDBFAutoClean.Create(nil);
   DS.FieldDefs.Add('ID',ftInteger);
   DS.FieldDefs.Add('NAME',ftMemo);
+  DS.OpenMode:=omAutoCreate; //let dbf code create memo etc files when needed
   DS.CreateTable;
   DS.Open;
   WriteReadbackTest(ds);
@@ -374,6 +380,44 @@ begin
   ds.free;
 end;
 
+procedure TTestSpecificTDBF.TestMemoClose;
+const
+  MaxRecs = 10;
+var
+  ds : TDBF;
+  i: integer;
+begin
+  ds := TDBF.Create(nil);
+  ds.Storage:=stoMemory;
+  DS.FieldDefs.Add('ID',ftInteger);
+  DS.FieldDefs.Add('NAME',ftMemo);
+  DS.OpenMode:=omAutoCreate; //let dbf code create memo etc files when needed
+  DS.CreateTable;
+  
+  DS.Open;  
+  for i := 1 to MaxRecs do
+    begin
+    DS.Append;
+    DS.FieldByName('ID').AsInteger := i;
+    DS.FieldByName('NAME').AsString := 'TestName' + inttostr(i);
+    DS.Post;
+    end;  
+  DS.Close; //in old implementations, this erased memo memory
+  
+  DS.Open;
+  DS.First;
+  for i := 1 to MaxRecs do
+    begin
+    CheckEquals(i,DS.fieldbyname('ID').asinteger);
+    CheckEquals('TestName' + inttostr(i),DS.fieldbyname('NAME').AsString);
+    DS.next;
+    end;
+  CheckTrue(DS.EOF,'After reading all records the dataset should show EOF');  
+  DS.Close;
+  
+  ds.free;
+end;
+
 procedure TTestSpecificTDBF.TestLargeString;
 var
   ds : TDBF;