fpspreadsheet: Add another set of unit tests for virtual mode, now with SaveMemory options.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3326 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-07-15 21:31:59 +00:00
parent 4c723b9fc3
commit ed197af6c1
3 changed files with 60 additions and 19 deletions

View File

@ -34,7 +34,7 @@ type
// Set up expected values:
procedure SetUp; override;
procedure TearDown; override;
procedure TestVirtualMode(AFormat: TsSpreadsheetFormat);
procedure TestVirtualMode(AFormat: TsSpreadsheetFormat; SaveMemoryMode: Boolean);
published
// Tests getting Excel style A1 cell locations from row/column based locations.
// Bug 26447
@ -55,12 +55,17 @@ type
procedure TestVirtualMode_BIFF5;
procedure TestVirtualMode_BIFF8;
procedure TestVirtualMode_OOXML;
procedure TestVirtualMode_BIFF2_SaveMemory;
procedure TestVirtualMode_BIFF5_SaveMemory;
procedure TestVirtualMode_BIFF8_SaveMemory;
procedure TestVirtualMode_OOXML_SaveMemory;
end;
implementation
uses
numberstests;
numberstests, stringtests;
const
InternalSheet = 'Internal'; //worksheet name
@ -178,7 +183,9 @@ begin
CheckEquals('$AA$2',GetCellString(1,26,[])); //just past the last letter
CheckEquals('$GW$5',GetCellString(4,204,[])); //some big value
CheckEquals('$IV$1',GetCellString(0,255,[])); //the last column of xls
CheckEquals('$IW$1',GetCellString(0,256,[])); //the first column beyond xls
CheckEquals('$XFD$1',GetCellString(0,16383,[])); // the last column of xlsx
CheckEquals('$XFE$1',GetCellString(0,16384,[])); // the first column beyond xlsx
// Something VERY big, beyond xlsx
s := 'ZZZZ1';
@ -199,18 +206,25 @@ end;
procedure TSpreadInternalTests.NeedVirtualCellData(Sender: TObject;
ARow, ACol: Cardinal; var AValue:Variant; var AStyleCell: PCell);
begin
AValue := SollNumbers[ARow];
// 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 TSpreadInternalTests.TestVirtualMode(AFormat: TsSpreadsheetFormat);
procedure TSpreadInternalTests.TestVirtualMode(AFormat: TsSpreadsheetFormat;
SaveMemoryMode: Boolean);
var
tempFile: String;
workbook: TsWorkbook;
worksheet: TsWorksheet;
row, col: Integer;
value: Double;
s: String;
begin
TempFile:=GetTempFileName;
TempFile := GetTempFileName;
if FileExists(TempFile) then
DeleteFile(TempFile);
@ -218,10 +232,13 @@ begin
try
worksheet := workbook.AddWorksheet('VirtualMode');
workbook.WritingOptions := workbook.WritingOptions + [woVirtualMode];
workbook.VirtualRowCount := Length(SollNumbers);
if SaveMemoryMode then
workbook.WritingOptions := workbook.WritingOptions + [woSaveMemory];
workbook.VirtualColCount := 1;
workbook.VirtualRowCount := Length(SollNumbers) + 4;
// We'll use only the first 4 SollStrings, the others cause trouble due to utf8 and formatting.
workbook.OnNeedCellData := @NeedVirtualCellData;
workbook.WriteToFile(tempfile, AFormat);
workbook.WriteToFile(tempfile, AFormat, true);
finally
workbook.Free;
end;
@ -232,13 +249,18 @@ begin
workbook.ReadFromFile(tempFile, AFormat);
worksheet := workbook.GetWorksheetByIndex(0);
col := 0;
CheckEquals(Length(SollNumbers), worksheet.GetLastRowIndex+1,
CheckEquals(Length(SollNumbers) + 4, worksheet.GetLastRowIndex+1,
'Row count mismatch');
for row := 0 to worksheet.GetLastRowIndex do begin
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.ReadAsUTF8Text(row, col);
CheckEquals(SollStrings[row - Length(SollNumbers)], s,
'Test string value mismatch, cell '+CellNotation(workSheet, row, col));
end;
finally
workbook.Free;
end;
@ -249,22 +271,42 @@ end;
procedure TSpreadInternalTests.TestVirtualMode_BIFF2;
begin
TestVirtualMode(sfExcel2);
TestVirtualMode(sfExcel2, false);
end;
procedure TSpreadInternalTests.TestVirtualMode_BIFF5;
begin
TestVirtualMode(sfExcel5);
TestVirtualMode(sfExcel5, false);
end;
procedure TSpreadInternalTests.TestVirtualMode_BIFF8;
begin
TestVirtualMode(sfExcel8);
TestVirtualMode(sfExcel8, false);
end;
procedure TSpreadInternalTests.TestVirtualMode_OOXML;
begin
TestVirtualMode(sfOOXML);
TestVirtualMode(sfOOXML, false);
end;
procedure TSpreadInternalTests.TestVirtualMode_BIFF2_SaveMemory;
begin
TestVirtualMode(sfExcel2, True);
end;
procedure TSpreadInternalTests.TestVirtualMode_BIFF5_SaveMemory;
begin
TestVirtualMode(sfExcel5, true);
end;
procedure TSpreadInternalTests.TestVirtualMode_BIFF8_SaveMemory;
begin
TestVirtualMode(sfExcel8, true);
end;
procedure TSpreadInternalTests.TestVirtualMode_OOXML_SaveMemory;
begin
TestVirtualMode(sfOOXML, true);
end;
initialization

View File

@ -84,16 +84,15 @@
<Unit2>
<Filename Value="stringtests.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="stringtests"/>
</Unit2>
<Unit3>
<Filename Value="numberstests.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="numberstests"/>
</Unit3>
<Unit4>
<Filename Value="manualtests.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="manualtests"/>
</Unit4>
<Unit5>
<Filename Value="testsutility.pas"/>
@ -107,7 +106,6 @@
<Unit7>
<Filename Value="formattests.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="formattests"/>
</Unit7>
<Unit8>
<Filename Value="colortests.pas"/>
@ -128,7 +126,6 @@
<Unit12>
<Filename Value="rpnformulaunit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="rpnFormulaUnit"/>
</Unit12>
<Unit13>
<Filename Value="formulatests.pas"/>
@ -138,7 +135,6 @@
<Unit14>
<Filename Value="emptycelltests.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="emptycelltests"/>
</Unit14>
</Units>
</ProjectOptions>

View File

@ -364,7 +364,8 @@ var
fn: String;
begin
if (woSaveMemory in Workbook.WritingOptions) then begin
fn := GetTempFileName;
fn := GetTempFileName('', 'fpsB8');
if FileExists(fn) then DeleteFile(fn);
Stream := TFileStream.Create(fn, fmCreate + fmOpenRead)
end else
Stream := TMemoryStream.Create;
@ -378,6 +379,8 @@ begin
OutputStorage.WriteOLEFile(AFileName, OLEDocument, AOverwriteExisting, 'Workbook');
finally
if (woSaveMemory in Workbook.WritingOptions) then
DeleteFile(fn);
Stream.Free;
OutputStorage.Free;
end;