
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8094 8e941d3f-bd1b-0410-a28a-d453659cc2b4
172 lines
3.9 KiB
ObjectPascal
172 lines
3.9 KiB
ObjectPascal
unit dbexporttests;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
// Not using Lazarus package as the user may be working with multiple versions
|
|
// Instead, add .. to unit search path
|
|
Classes, SysUtils, fpcunit, testutils, testregistry,
|
|
fpstypes, fpsallformats, fpspreadsheet,
|
|
testsutility, db, bufdataset, fpsexport;
|
|
|
|
type
|
|
TExportTestData=record
|
|
id: integer;
|
|
Name: string;
|
|
DOB: TDateTime;
|
|
end;
|
|
|
|
var
|
|
ExportTestData: array[0..4] of TExportTestData;
|
|
|
|
procedure InitExportTestData;
|
|
|
|
type
|
|
{ TSpreadExportTests }
|
|
|
|
TSpreadExportTests = class(TTestCase)
|
|
private
|
|
FDataset: TBufDataset;
|
|
protected
|
|
// Set up expected values:
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
published
|
|
procedure TestExport;
|
|
end;
|
|
|
|
implementation
|
|
|
|
procedure InitExportTestData;
|
|
begin
|
|
with ExportTestData[0] do
|
|
begin
|
|
id:=1;
|
|
name:='Elvis Wesley';
|
|
dob:=encodedate(1912,12,31);
|
|
end;
|
|
|
|
with ExportTestData[1] do
|
|
begin
|
|
id:=2;
|
|
name:='Kingsley Dill';
|
|
dob:=encodedate(1918,11,11);
|
|
end;
|
|
|
|
with ExportTestData[2] do
|
|
begin
|
|
id:=3;
|
|
name:='Joe Snort';
|
|
dob:=encodedate(1988,8,4);
|
|
end;
|
|
|
|
with ExportTestData[3] do
|
|
begin
|
|
id:=4;
|
|
//> may give problems with character encoding
|
|
//http://forum.lazarus.freepascal.org/index.php/topic,26471.0.html
|
|
name:='Hagen > Dit';
|
|
dob:=encodedate(1944,2,24);
|
|
end;
|
|
|
|
with ExportTestData[4] do
|
|
begin
|
|
id:=5;
|
|
name:='';
|
|
dob:=encodedate(2112,4,12);
|
|
end;
|
|
end;
|
|
|
|
{ TSpreadExportTests }
|
|
|
|
procedure TSpreadExportTests.SetUp;
|
|
var
|
|
i:integer;
|
|
begin
|
|
inherited SetUp;
|
|
InitExportTestData;
|
|
|
|
FDataset:=TBufDataset.Create(nil);
|
|
with FDataset.FieldDefs do
|
|
begin
|
|
Add('id',ftAutoinc);
|
|
Add('name',ftString,40);
|
|
Add('dob',ftDateTime);
|
|
end;
|
|
FDataset.CreateDataset;
|
|
|
|
for i:=low(ExportTestData) to high(ExportTestData) do
|
|
begin
|
|
FDataset.Append;
|
|
//autoinc field should be filled by bufdataset
|
|
FDataSet.Fields.FieldByName('name').AsString:=ExportTestData[i].Name;
|
|
FDataSet.Fields.FieldByName('dob').AsDateTime:=ExportTestData[i].dob;
|
|
FDataSet.Post;
|
|
end;
|
|
end;
|
|
|
|
procedure TSpreadExportTests.TearDown;
|
|
begin
|
|
FDataset.Free;
|
|
inherited TearDown;
|
|
end;
|
|
|
|
procedure TSpreadExportTests.TestExport;
|
|
var
|
|
Exp: TFPSExport;
|
|
ExpSettings: TFPSExportFormatSettings;
|
|
MyWorksheet: TsWorksheet;
|
|
MyWorkbook: TsWorkbook;
|
|
Row: cardinal;
|
|
TempFile: string;
|
|
TheDate: TDateTime;
|
|
begin
|
|
Exp := TFPSExport.Create(nil);
|
|
ExpSettings := TFPSExportFormatSettings.Create(true);
|
|
try
|
|
ExpSettings.ExportFormat := efXLS;
|
|
ExpSettings.HeaderRow := true;
|
|
Exp.FormatSettings := ExpSettings;
|
|
Exp.Dataset:=FDataset;
|
|
Exp.FromCurrent:=false; //export from beginning
|
|
TempFile := NewTempFile;
|
|
Exp.FileName := TempFile;
|
|
CheckEquals(length(ExportTestData),Exp.Execute,'Number of exported records');
|
|
CheckTrue(FileExists(TempFile),'Export file must exist');
|
|
|
|
// Open the workbook for verification
|
|
MyWorkbook := TsWorkbook.Create;
|
|
try
|
|
// Format must match ExpSettings.ExportFormat above
|
|
MyWorkbook.ReadFromFile(TempFile, sfExcel8);
|
|
MyWorksheet := MyWorkbook.GetFirstWorksheet;
|
|
// ignore header row for now
|
|
for Row := 1 to length(ExportTestData) do
|
|
begin
|
|
// cell 0 is id
|
|
CheckEquals(ExportTestData[Row-1].id,MyWorkSheet.ReadAsNumber(Row,0),'Cell data: id');
|
|
CheckEquals(ExportTestData[Row-1].name,MyWorkSheet.ReadAsUTF8Text(Row,1),'Cell data: name');
|
|
MyWorkSheet.ReadAsDateTime(Row,2,TheDate);
|
|
CheckEquals(ExportTestData[Row-1].dob,TheDate,'Cell data: dob');
|
|
end;
|
|
finally
|
|
MyWorkBook.Free;
|
|
end;
|
|
finally
|
|
Exp.Free;
|
|
ExpSettings.Free;
|
|
DeleteFile(TempFile);
|
|
end;
|
|
end;
|
|
|
|
initialization
|
|
// Register so these tests are included in a full run
|
|
RegisterTest(TSpreadExportTests);
|
|
InitExportTestData; //useful to have norm data if other code want to use this unit
|
|
end.
|
|
|
|
end.
|
|
|