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:
|
// 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
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user