
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@5206 8e941d3f-bd1b-0410-a28a-d453659cc2b4
184 lines
5.0 KiB
ObjectPascal
184 lines
5.0 KiB
ObjectPascal
unit virtualmodetests;
|
|
{ Tests for VirtualMode }
|
|
|
|
{$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, xlsbiff8 {and a project requirement for lclbase for utf8 handling},
|
|
fpsutils, testsutility;
|
|
|
|
type
|
|
{ TSpreadVirtualModeTests }
|
|
|
|
TSpreadVirtualModeTests= class(TTestCase)
|
|
private
|
|
procedure WriteVirtualCellDataHandler(Sender: TsWorksheet; ARow, ACol: Cardinal;
|
|
var AValue:Variant; var AStyleCell: PCell);
|
|
protected
|
|
// Set up expected values:
|
|
procedure SetUp; override;
|
|
procedure TearDown; override;
|
|
procedure TestWriteVirtualMode(AFormat: TsSpreadsheetFormat; ABufStreamMode: Boolean);
|
|
|
|
published
|
|
// Virtual mode tests for all file formats
|
|
procedure TestWriteVirtualMode_BIFF2;
|
|
procedure TestWriteVirtualMode_BIFF5;
|
|
procedure TestWriteVirtualMode_BIFF8;
|
|
procedure TestWriteVirtualMode_ODS;
|
|
procedure TestWriteVirtualMode_OOXML;
|
|
|
|
procedure TestWriteVirtualMode_BIFF2_BufStream;
|
|
procedure TestWriteVirtualMode_BIFF5_BufStream;
|
|
procedure TestWriteVirtualMode_BIFF8_BufStream;
|
|
procedure TestWriteVirtualMode_ODS_BufStream;
|
|
procedure TestWriteVirtualMode_OOXML_BufStream;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
numberstests, stringtests;
|
|
|
|
const
|
|
VIRTUALMODE_SHEET = 'VirtualMode'; //worksheet name
|
|
|
|
procedure TSpreadVirtualModeTests.SetUp;
|
|
begin
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TearDown;
|
|
begin
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.WriteVirtualCellDataHandler(Sender: TsWorksheet;
|
|
ARow, ACol: Cardinal; var AValue:Variant; var AStyleCell: PCell);
|
|
begin
|
|
Unused(ACol);
|
|
Unused(AStyleCell);
|
|
// First read the SollNumbers, then the first 4 SollStrings
|
|
// See comment in TestVirtualMode().
|
|
if ARow < Length(SollNumbers) then
|
|
AValue := SollNumbers[ARow]
|
|
else
|
|
AValue := SollStrings[ARow - Length(SollNumbers)];
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode(AFormat: TsSpreadsheetFormat;
|
|
ABufStreamMode: Boolean);
|
|
var
|
|
tempFile: String;
|
|
workbook: TsWorkbook;
|
|
worksheet: TsWorksheet;
|
|
row, col: Integer;
|
|
value: Double;
|
|
s: String;
|
|
begin
|
|
try
|
|
workbook := TsWorkbook.Create;
|
|
try
|
|
worksheet := workbook.AddWorksheet(VIRTUALMODE_SHEET);
|
|
workbook.Options := workbook.Options + [boVirtualMode];
|
|
if ABufStreamMode then
|
|
workbook.Options := workbook.Options + [boBufStream];
|
|
worksheet.VirtualColCount := 1;
|
|
worksheet.VirtualRowCount := Length(SollNumbers) + 4;
|
|
// We'll use only the first 4 SollStrings, the others cause trouble due to utf8 and formatting.
|
|
worksheet.OnWriteCellData := @WriteVirtualCellDataHandler;
|
|
tempFile:=NewTempFile;
|
|
workbook.WriteToFile(tempfile, AFormat, true);
|
|
finally
|
|
workbook.Free;
|
|
end;
|
|
|
|
workbook := TsWorkbook.Create;
|
|
try
|
|
workbook.ReadFromFile(tempFile, AFormat);
|
|
worksheet := workbook.GetWorksheetByIndex(0);
|
|
col := 0;
|
|
CheckEquals(Length(SollNumbers) + 4, worksheet.GetLastRowIndex+1,
|
|
'Row count mismatch');
|
|
for row := 0 to Length(SollNumbers)-1 do
|
|
begin
|
|
value := worksheet.ReadAsNumber(row, col);
|
|
CheckEquals(SollNumbers[row], value,
|
|
'Test number value mismatch, cell '+CellNotation(workSheet, row, col))
|
|
end;
|
|
for row := Length(SollNumbers) to worksheet.GetLastRowIndex do
|
|
begin
|
|
s := worksheet.ReadAsText(row, col);
|
|
CheckEquals(SollStrings[row - Length(SollNumbers)], s,
|
|
'Test string value mismatch, cell '+CellNotation(workSheet, row, col));
|
|
end;
|
|
finally
|
|
workbook.Free;
|
|
end;
|
|
|
|
finally
|
|
DeleteFile(tempFile);
|
|
end;
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_BIFF2;
|
|
begin
|
|
TestWriteVirtualMode(sfExcel2, false);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_BIFF5;
|
|
begin
|
|
TestWriteVirtualMode(sfExcel5, false);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_BIFF8;
|
|
begin
|
|
TestWriteVirtualMode(sfExcel8, false);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_ODS;
|
|
begin
|
|
TestWriteVirtualMode(sfOpenDocument, false);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_OOXML;
|
|
begin
|
|
TestWriteVirtualMode(sfOOXML, false);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_BIFF2_BufStream;
|
|
begin
|
|
TestWriteVirtualMode(sfExcel2, True);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_BIFF5_BufStream;
|
|
begin
|
|
TestWriteVirtualMode(sfExcel5, true);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_BIFF8_BufStream;
|
|
begin
|
|
TestWriteVirtualMode(sfExcel8, true);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_ODS_BufStream;
|
|
begin
|
|
TestWriteVirtualMode(sfOpenDocument, true);
|
|
end;
|
|
|
|
procedure TSpreadVirtualModeTests.TestWriteVirtualMode_OOXML_BufStream;
|
|
begin
|
|
TestWriteVirtualMode(sfOOXML, true);
|
|
end;
|
|
|
|
|
|
initialization
|
|
// Register so these tests are included in a full run
|
|
RegisterTest(TSpreadVirtualModeTests);
|
|
|
|
end.
|
|
|