Files
lazarus-ccr/components/fpspreadsheet/unit-tests/dataset/copyfromdatasetunit.pas

219 lines
5.0 KiB
ObjectPascal
Raw Normal View History

unit CopyFromDatasetUnit;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpcunit, {%H-}testutils, testregistry,
DB, dbf,
fpsDataset;
type
{ TCopyFromDatasetTest }
TCopyFromDatasetTest= class(TTestCase)
private
function CreateDbf: TDbf;
procedure CopyDatasetTest(ATestIndex: Integer);
protected
procedure SetUp; override;
procedure TearDown; override;
published
procedure CopyDatasetTest_FieldDefs;
procedure CopyDatasetTest_Fields;
procedure CopyDatasetTest_Records;
end;
implementation
uses
TypInfo;
const
DBF_FILE_NAME = 'testdata.dbf';
FILE_NAME = 'testfile.xlsx';
STRING_FIELD = 'StringCol';
INT_FIELD = 'IntegerCol';
FLOAT_FIELD = 'FloatCol';
NUM_RECORDS = 10;
var
DataFileName: String;
DbfPath: String;
function TCopyFromDatasetTest.CreateDbf: TDbf;
var
i: Integer;
begin
Result := TDbf.Create(nil);
Result.FilePathFull := DbfPath;
Result.TableName := DBF_FILE_NAME;
Result.FieldDefs.Add(STRING_FIELD, ftString, 20);
Result.FieldDefs.Add(INT_FIELD, ftInteger);
Result.FieldDefs.Add(FLOAT_FIELD, ftFloat);
Result.CreateTable;
Result.Open;
for i := 1 to NUM_RECORDS do
begin
Result.Append;
Result.FieldByName(STRING_FIELD).AsString := 'abc' + IntToStr(i);
Result.FieldByName(INT_FIELD).AsInteger := -5 + i;
Result.FieldByName(FLOAT_FIELD).AsFloat := -5.1 * (i + 5.1);
Result.Post;
end;
end;
procedure TCopyFromDatasetTest.CopyDatasetTest(ATestIndex: Integer);
const
DEBUG = false;
var
dbf: TDbf;
dataset: TsWorksheetDataset;
i: Integer;
begin
dbf := CreateDbf;
if DEBUG then
{%H-}begin
dbf.Close;
dbf.Open;
end;
dataset := TsWorksheetDataset.Create(nil);
try
dataset.CopyFromDataset(dbf, DataFileName, dbf.TableName);
// Save for debugging
if DEBUG then
{%H-}begin
dataset.Close;
dataset.Open;
end;
case ATestIndex of
// FIELD DEFS
0: begin
CheckEquals( // Compare FieldDef count
dbf.FieldDefs.Count,
dataset.FieldDefs.Count,
'Mismatch in number of FieldDefs'
);
// Compare FieldDefs
for i := 0 to dbf.FieldDefs.Count-1 do
begin
CheckEquals(
dbf.FieldDefs[i].Name,
dataset.FieldDefs[i].Name,
'Mismatch in FieldDefs[' + IntToStr(i) + '].Name'
);
CheckEquals(
GetEnumName(TypeInfo(TFieldType), integer(dbf.FieldDefs[i].DataType)),
GetEnumName(TypeInfo(TFieldType), integer(dataset.FieldDefs[i].DataType)),
'Mismatch in FieldDefs[' + IntToStr(i) + '].DataType'
);
CheckEquals(
dbf.FieldDefs[i].Size,
dataset.FieldDefs[i].Size,
'Mismatch in FieldDefs[' + IntToStr(i) + '].Size'
);
end;
end;
// FIELDS
1: begin
// Compare field count
CheckEquals(
dbf.FieldCount,
dataset.FieldCount,
'Mismatch in FieldCount'
);
// Compare fields
for i := 0 to dbf.FieldCount-1 do
begin
CheckEquals(
dbf.Fields[i].FieldName,
dataset.Fields[i].FieldName,
'Mismatch in Fields[' + IntToStr(i) + '].FieldName'
);
CheckEquals(
GetEnumName(TypeInfo(TFieldType), integer(dbf.Fields[i].DataType)),
GetEnumName(TypeInfo(TFieldType), integer(dataset.Fields[i].DataType)),
'Mismatch in Fields[' + IntToStr(i) + '].DataType'
);
end;
end;
// RECORDS
2: begin
// Compare record count
CheckEquals(
dbf.RecordCount,
dataset.RecordCount,
'Mismatch in RecordCount'
);
dbf.First;
dataset.First;
while not dbf.EoF do
begin
for i := 0 to dbf.FieldCount-1 do
begin
CheckEquals(
dbf.Fields[i].AsString,
dataset.Fields[i].AsString,
'Record value mismatch, Field #[' + IntToStr(i) + '], RecNo ' + IntToStr(dbf.RecNo)
);
end;
dbf.Next;
dataset.Next;
end;
end;
end;
finally
dataset.Free;
dbf.Free;
end;
end;
procedure TCopyFromDatasetTest.CopyDatasetTest_FieldDefs;
begin
CopyDatasetTest(0);
end;
procedure TCopyFromDatasetTest.CopyDatasetTest_Fields;
begin
CopyDatasetTest(1);
end;
procedure TCopyFromDatasetTest.CopyDatasetTest_Records;
begin
CopyDatasetTest(2);
end;
procedure TCopyFromDatasetTest.SetUp;
begin
DataFileName := GetTempDir + FILE_NAME;
DbfPath := GetTempDir;
end;
procedure TCopyFromDatasetTest.TearDown;
begin
if FileExists(DataFileName) then DeleteFile(DataFileName);
if FileExists(DbfPath + DBF_FILE_NAME) then DeleteFile(DbfPath + DBF_FILE_NAME);
end;
initialization
RegisterTest(TCopyFromDatasetTest);
end.