lazarus-ccr/components/fpspreadsheet/unit-tests/dataset/posttestunit.pas
wp_xxyyzz 1626e8ab2f fpspreadsheet: Less hints and warnings
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8126 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2021-10-27 16:14:40 +00:00

217 lines
5.2 KiB
ObjectPascal
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ - 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.