You've already forked lazarus-ccr
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:
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user