
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8126 8e941d3f-bd1b-0410-a28a-d453659cc2b4
217 lines
5.2 KiB
ObjectPascal
217 lines
5.2 KiB
ObjectPascal
{ - Creates a new WorksheetDataset with a variety of fields
|
||
- Appends a record and posts the dataset
|
||
- Opens the created spreadsheet file and compares its cells with the
|
||
posted data.
|
||
}
|
||
|
||
unit PostTestUnit;
|
||
|
||
{$mode objfpc}{$H+}
|
||
|
||
interface
|
||
|
||
uses
|
||
Classes, SysUtils, fpcunit, testregistry,
|
||
DB,
|
||
fpsdataset, fpspreadsheet, fpstypes, fpsutils;
|
||
|
||
type
|
||
|
||
TPostTest= class(TTestCase)
|
||
protected
|
||
procedure RunPostTest(ADataType: TFieldType; ASize: Integer = 0);
|
||
procedure SetUp; override;
|
||
procedure TearDown; override;
|
||
published
|
||
procedure PostTest_Int;
|
||
procedure PostTest_String_20;
|
||
procedure PostTest_String_10;
|
||
procedure PostTest_Widestring_20;
|
||
procedure PostTest_Widestring_10;
|
||
end;
|
||
|
||
implementation
|
||
|
||
uses
|
||
LazUTF8, LazUTF16;
|
||
|
||
const
|
||
FILE_NAME = 'testfile.xls';
|
||
SHEET_NAME = 'Sheet';
|
||
COL_NAME = 'TestCol';
|
||
|
||
var
|
||
DataFileName: String;
|
||
|
||
type
|
||
TTestRecord = record
|
||
IntValue: Integer;
|
||
StringValue: String;
|
||
WideStringValue: WideString;
|
||
end;
|
||
|
||
const
|
||
TestData: Array[0..5] of TTestRecord = (
|
||
(IntValue: 10; StringValue: 'abc'; WideStringValue: 'abc'), // 0
|
||
(IntValue: -20; StringValue: 'äöüαβγ'; WideStringvalue: 'äöüαβγ'), // 1
|
||
(IntValue: 100; StringValue: 'a234567890'; WideStringvalue: 'a234567890'), // 2
|
||
(IntValue: 0; StringValue: 'a234567890123'; WideStringvalue: 'a234567890123'), // 3
|
||
(IntValue: 501; StringValue: 'äα34567890'; WideStringValue: 'äα34567890'), // 4
|
||
(IntValue: 502; StringValue: 'äα34567890123'; WideStringValue: 'äα34567890123') // 5
|
||
);
|
||
|
||
procedure TPostTest.RunPostTest(ADataType: TFieldType; ASize: Integer = 0);
|
||
var
|
||
dataset: TsWorksheetDataset;
|
||
field: TField;
|
||
i: Integer;
|
||
workbook: TsWorkbook;
|
||
worksheet: TsWorksheet;
|
||
row, lastRow: Integer;
|
||
actualIntValue: Integer;
|
||
actualStringValue: String;
|
||
actualWideStringValue: WideString;
|
||
expectedIntValue: Integer;
|
||
expectedStringValue: String;
|
||
expectedWideStringValue: WideString;
|
||
begin
|
||
dataset := TsWorksheetDataset.Create(nil);
|
||
try
|
||
dataset.FileName := DataFileName;
|
||
dataset.SheetName := SHEET_NAME;
|
||
dataset.AddFieldDef(COL_NAME, ADataType, ASize);
|
||
dataset.CreateTable;
|
||
dataset.Open;
|
||
|
||
field := dataset.FieldByName(COL_NAME);
|
||
for i := 0 to High(TestData) do
|
||
begin
|
||
dataset.Append;
|
||
case ADataType of
|
||
ftInteger : field.AsInteger := TestData[i].IntValue;
|
||
ftString : field.AsString := TestData[i].StringValue;
|
||
ftWideString : field.AsString := UTF8Encode(TestData[i].WideStringValue);
|
||
end;
|
||
dataset.Post;
|
||
end;
|
||
dataset.Close;
|
||
finally
|
||
dataset.Free;
|
||
end;
|
||
|
||
CheckEquals(
|
||
true,
|
||
FileExists(DatafileName),
|
||
'Spreadsheet data file not found'
|
||
);
|
||
|
||
workbook := TsWorkbook.Create;
|
||
try
|
||
workbook.ReadFromFile(DataFileName);
|
||
worksheet := workbook.GetWorksheetByName(SHEET_NAME);
|
||
CheckEquals(
|
||
true,
|
||
worksheet <> nil,
|
||
'Worksheet not found'
|
||
);
|
||
|
||
lastRow := worksheet.GetLastRowIndex(true);
|
||
CheckEquals(
|
||
Length(TestData),
|
||
lastRow,
|
||
'Row count mismatch in worksheet'
|
||
);
|
||
|
||
actualStringValue := worksheet.ReadAsText(0, 0);
|
||
CheckEquals(
|
||
COL_NAME,
|
||
actualStringValue,
|
||
'Column name mismatch'
|
||
);
|
||
|
||
i := 0;
|
||
for row := 1 to lastRow do
|
||
begin
|
||
case ADataType of
|
||
ftInteger:
|
||
begin
|
||
expectedIntValue := TestData[i].IntValue;
|
||
actualIntValue := Round(worksheet.ReadAsNumber(row, 0));
|
||
CheckEquals(
|
||
expectedIntValue,
|
||
actualIntValue,
|
||
'Integer field mismatch, row ' + IntToStr(row)
|
||
);
|
||
end;
|
||
ftString:
|
||
begin
|
||
expectedStringValue := UTF8Copy(TestData[i].StringValue, 1, ASize);
|
||
actualStringValue := worksheet.ReadAsText(row, 0);
|
||
CheckEquals(
|
||
expectedStringValue,
|
||
actualStringValue,
|
||
'String field mismatch, Row ' + IntToStr(row)
|
||
);
|
||
end;
|
||
ftWideString:
|
||
begin
|
||
expectedWideStringValue := UTF16Copy(TestData[i].WideStringValue, 1, ASize);
|
||
actualWideStringValue := UTF8Decode(worksheet.ReadAsText(row, 0));
|
||
CheckEquals(
|
||
expectedWidestringValue,
|
||
actualWideStringValue,
|
||
'Widestring field mismatch, row ' + IntToStr(row)
|
||
);
|
||
end;
|
||
else
|
||
raise Exception.Create('Field type not tested here.');
|
||
end;
|
||
inc(i);
|
||
end;
|
||
finally
|
||
workbook.Free;
|
||
end;
|
||
end;
|
||
|
||
procedure TPostTest.PostTest_Int;
|
||
begin
|
||
RunPostTest(ftInteger);
|
||
end;
|
||
|
||
procedure TPostTest.PostTest_String_20;
|
||
begin
|
||
RunPostTest(ftString, 20);
|
||
end;
|
||
|
||
procedure TPostTest.PostTest_String_10;
|
||
begin
|
||
RunPostTest(ftString, 10);
|
||
end;
|
||
|
||
procedure TPostTest.PostTest_WideString_20;
|
||
begin
|
||
RunPostTest(ftWideString, 20);
|
||
end;
|
||
|
||
procedure TPostTest.PostTest_WideString_10;
|
||
begin
|
||
RunPostTest(ftWideString, 10);
|
||
end;
|
||
|
||
procedure TPostTest.SetUp;
|
||
begin
|
||
DataFileName := GetTempDir + FILE_NAME;
|
||
end;
|
||
|
||
procedure TPostTest.TearDown;
|
||
begin
|
||
if FileExists(DataFileName) then DeleteFile(DataFileName);
|
||
end;
|
||
|
||
|
||
initialization
|
||
RegisterTest(TPostTest);
|
||
|
||
end.
|
||
|