Browse Source

fcl-db/dbase: tests for findfirst etc, and visual foxpro

git-svn-id: trunk@24111 -
reiniero 12 years ago
parent
commit
6fc43628da

+ 2 - 1
packages/fcl-db/tests/database.ini.txt

@@ -164,7 +164,8 @@ connector=dbf
 ; 3=DBase III
 ; 4=DBase IV
 ; 7=Visual DBase 7 for Windows
-; 25=FoxPro/Visual FoxPro
+; 25=FoxPro
+; 30=Visual FoxPro
 connectorparams=4
 
 ; MemDS in memory dataset:

+ 8 - 5
packages/fcl-db/tests/dbftoolsunit.pas

@@ -13,7 +13,7 @@ interface
 
 uses
   Classes, SysUtils, toolsunit,
-  db, Dbf;
+  db, Dbf, dbf_common;
 
 type
 { TDBFDBConnector }
@@ -68,7 +68,7 @@ begin
   // connectorparams=4
   // If none given, default to DBase IV
   TableLevelProvided:=StrToIntDef(dbconnectorparams,4);
-  if not ((TableLevelProvided = 3) or (TableLevelProvided = 4) or (TableLevelProvided = 7) or (TableLevelProvided = 25)) then
+  if not (TableLevelProvided in [3,4,5,7,TDBF_TABLELEVEL_FOXPRO,TDBF_TABLELEVEL_VISUALFOXPRO]) then
   begin
     writeln('Invalid tablelevel specified in connectorparams= field. Aborting');
     exit;
@@ -151,15 +151,18 @@ begin
     FieldDefs.Add('FSTRING',ftString,10);
     FieldDefs.Add('FSMALLINT',ftSmallint);
     FieldDefs.Add('FINTEGER',ftInteger);
-//    FieldDefs.Add('FWORD',ftWord);
+    FieldDefs.Add('FWORD',ftWord);
     FieldDefs.Add('FBOOLEAN',ftBoolean);
     FieldDefs.Add('FFLOAT',ftFloat);
-//    FieldDefs.Add('FCURRENCY',ftCurrency);
-//    FieldDefs.Add('FBCD',ftBCD);
+    if (result as TDBF).TableLevel>=25 then
+      FieldDefs.Add('FCURRENCY',ftCurrency);
+    if (result as TDBF).TableLevel>=25 then
+      FieldDefs.Add('FBCD',ftBCD);
     FieldDefs.Add('FDATE',ftDate);
 //    FieldDefs.Add('FTIME',ftTime);
     FieldDefs.Add('FDATETIME',ftDateTime);
     FieldDefs.Add('FLARGEINT',ftLargeint);
+    FieldDefs.Add('FMEMO',ftMemo);
     CreateTable;
     Open;
     for i := 0 to testValuesCount-1 do

+ 60 - 15
packages/fcl-db/tests/testspecifictdbf.pas

@@ -25,7 +25,6 @@ type
 
   TTestSpecificTDBF = class(TTestCase)
   private
-    function GetTableLevel: integer;
     procedure WriteReadbackTest(ADBFDataset: TDbf; AutoInc: boolean = false);
   protected
     procedure SetUp; override;
@@ -39,6 +38,14 @@ type
     procedure OpenNonExistingDataset_Fails;
     procedure TestCreationDatasetWithCalcFields;
     procedure TestAutoIncField;
+    // Tests findfirst
+    procedure FindFirst;
+    // Tests findlast
+    procedure FindLast;
+    // Tests findnext
+    procedure FindNext;
+    // Tests findprior
+    procedure FindPrior;
   end;
 
 
@@ -50,19 +57,6 @@ uses
 
 { TTestSpecificTDBF }
 
-function TTestSpecificTDBF.GetTableLevel: integer;
-var
-  TableLevelProvided: integer;
-begin
-  TableLevelProvided:=StrToIntDef(dbconnectorparams,4);
-  if not ((TableLevelProvided = 3) or (TableLevelProvided = 4) or (TableLevelProvided = 7) or (TableLevelProvided = 25)) then
-  begin
-    writeln('Invalid tablelevel specified in connectorparams= field. Aborting');
-    exit;
-  end;
-  result := TableLevelProvided;
-end;
-
 procedure TTestSpecificTDBF.WriteReadbackTest(ADBFDataset: TDbf;
   AutoInc: boolean);
 var
@@ -225,11 +219,62 @@ begin
   ds.Free;
 end;
 
+procedure TTestSpecificTDBF.FindFirst;
+const
+  NumRecs=8;
+var
+  DS: TDataSet;
+begin
+  DS:=DBConnector.GetNDataset(NumRecs);
+  DS.Open;
+  DS.Last;
+  CheckEquals(true,DS.FindFirst,'Findfirst should return true');
+  CheckEquals(1,DS.fieldbyname('ID').asinteger);
+end;
+
+procedure TTestSpecificTDBF.FindLast;
+const
+  NumRecs=8;
+var
+  DS: TDataSet;
+begin
+  DS:=DBConnector.GetNDataset(NumRecs);
+  DS.Open;
+  DS.First;
+  CheckEquals(true,DS.FindLast,'Findlast should return true');
+  CheckEquals(NumRecs,DS.fieldbyname('ID').asinteger);
+end;
+
+procedure TTestSpecificTDBF.FindNext;
+const
+  NumRecs=8;
+var
+  DS: TDataSet;
+begin
+  DS:=DBConnector.GetNDataset(NumRecs);
+  DS.Open;
+  DS.First;
+  CheckEquals(true,DS.FindNext,'FindNext should return true');
+  CheckEquals(2,DS.fieldbyname('ID').asinteger);
+end;
+
+procedure TTestSpecificTDBF.FindPrior;
+const
+  NumRecs=8;
+var
+  DS: TDataSet;
+begin
+  DS:=DBConnector.GetNDataset(NumRecs);
+  DS.Open;
+  DS.Last;
+  CheckEquals(true,DS.FindPrior,'FindPrior should return true');
+  CheckEquals(NumRecs-1,DS.fieldbyname('ID').asinteger);
+end;
+
 
 
 initialization
 {$ifdef fpc}
-
   if uppercase(dbconnectorname)='DBF' then
     begin
     RegisterTestDecorator(TDBBasicsTestSetup, TTestSpecificTDBF);