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

View File

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

View File

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