lazarus-ccr/components/fpspreadsheet/unit-tests/common/optiontests.pas
2021-09-24 08:45:28 +00:00

563 lines
16 KiB
ObjectPascal

unit optiontests;
{$mode objfpc}{$H+}
interface
{ Tests for spreadsheet options
This unit tests writing out to and reading back from files.
}
uses
// Not using Lazarus package as the user may be working with multiple versions
// Instead, add .. to unit search path
Classes, SysUtils, fpcunit, testregistry,
fpstypes, fpspreadsheet, xlsbiff2, xlsbiff5, xlsbiff8 {and a project requirement for lclbase for utf8 handling},
testsutility;
type
{ TSpreadWriteReadOptionTests }
//Write to xls/xml file and read back
TSpreadWriteReadOptionsTests = class(TTestCase)
private
protected
// Set up expected values:
procedure SetUp; override;
procedure TearDown; override;
procedure TestWriteReadPanes(AFormat: TsSpreadsheetFormat;
ALeftPaneWidth, ATopPaneHeight: Integer);
procedure TestWriteReadGridHeaders(AFormat: TsSpreadsheetFormat;
AShowGridLines, AShowHeaders: Boolean);
procedure TestWriteReadHiddenSheet(AFormat: TsSpreadsheetFormat);
published
// Writes out sheet options & reads back.
{ BIFF2 tests }
procedure TestWriteRead_BIFF2_ShowGridLines_ShowHeaders;
procedure TestWriteRead_BIFF2_ShowGridLines_HideHeaders;
procedure TestWriteRead_BIFF2_HideGridLines_ShowHeaders;
procedure TestWriteRead_BIFF2_HideGridLines_HideHeaders;
procedure TestWriteRead_BIFF2_Panes_HorVert;
procedure TestWriteRead_BIFF2_Panes_Hor;
procedure TestWriteRead_BIFF2_Panes_Vert;
procedure TestWriteRead_BIFF2_Panes_None;
{ BIFF5 tests }
procedure TestWriteRead_BIFF5_ShowGridLines_ShowHeaders;
procedure TestWriteRead_BIFF5_ShowGridLines_HideHeaders;
procedure TestWriteRead_BIFF5_HideGridLines_ShowHeaders;
procedure TestWriteRead_BIFF5_HideGridLines_HideHeaders;
procedure TestWriteRead_BIFF5_Panes_HorVert;
procedure TestWriteRead_BIFF5_Panes_Hor;
procedure TestWriteRead_BIFF5_Panes_Vert;
procedure TestWriteRead_BIFF5_Panes_None;
procedure TestWriteRead_BIFF5_HiddenSheet;
{ BIFF8 tests }
procedure TestWriteRead_BIFF8_ShowGridLines_ShowHeaders;
procedure TestWriteRead_BIFF8_ShowGridLines_HideHeaders;
procedure TestWriteRead_BIFF8_HideGridLines_ShowHeaders;
procedure TestWriteRead_BIFF8_HideGridLines_HideHeaders;
procedure TestWriteRead_BIFF8_Panes_HorVert;
procedure TestWriteRead_BIFF8_Panes_Hor;
procedure TestWriteRead_BIFF8_Panes_Vert;
procedure TestWriteRead_BIFF8_Panes_None;
procedure TestWriteRead_BIFF8_HiddenSheet;
{ ODS tests }
procedure TestWriteRead_ODS_ShowGridLines_ShowHeaders;
procedure TestWriteRead_ODS_ShowGridLines_HideHeaders;
procedure TestWriteRead_ODS_HideGridLines_ShowHeaders;
procedure TestWriteRead_ODS_HideGridLines_HideHeaders;
procedure TestWriteRead_ODS_Panes_HorVert;
procedure TestWriteRead_ODS_Panes_Hor;
procedure TestWriteRead_ODS_Panes_Vert;
procedure TestWriteRead_ODS_Panes_None;
procedure TestWriteRead_ODS_HiddenSheet;
{ OOXML tests }
procedure TestWriteRead_OOXML_ShowGridLines_ShowHeaders;
procedure TestWriteRead_OOXML_ShowGridLines_HideHeaders;
procedure TestWriteRead_OOXML_HideGridLines_ShowHeaders;
procedure TestWriteRead_OOXML_HideGridLines_HideHeaders;
procedure TestWriteRead_OOXML_Panes_HorVert;
procedure TestWriteRead_OOXML_Panes_Hor;
procedure TestWriteRead_OOXML_Panes_Vert;
procedure TestWriteRead_OOXML_Panes_None;
procedure TestWriteRead_OOXML_HiddenSheet;
{ Excel 2003/XML tests }
procedure TestWriteRead_XML_ShowGridLines_ShowHeaders;
procedure TestWriteRead_XML_ShowGridLines_HideHeaders;
procedure TestWriteRead_XML_HideGridLines_ShowHeaders;
procedure TestWriteRead_XML_HideGridLines_HideHeaders;
procedure TestWriteRead_XML_Panes_HorVert;
procedure TestWriteRead_XML_Panes_Hor;
procedure TestWriteRead_XML_Panes_Vert;
procedure TestWriteRead_XML_Panes_None;
procedure TestWriteRead_XML_HiddenSheet;
end;
implementation
const
OptionsSheet = 'Options';
{ TSpreadWriteReadOptions }
procedure TSpreadWriteReadOptionsTests.SetUp;
begin
inherited SetUp;
end;
procedure TSpreadWriteReadOptionsTests.TearDown;
begin
inherited TearDown;
end;
{ Test for grid lines and sheet headers }
procedure TSpreadWriteReadOptionsTests.TestWriteReadGridHeaders(AFormat: TsSpreadsheetFormat;
AShowGridLines, AShowHeaders: Boolean);
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
TempFile: string; //write xls/xml to this file and read back from it
begin
TempFile := GetTempFileName;
{// Not needed: use workbook.writetofile with overwrite=true
if fileexists(TempFile) then
DeleteFile(TempFile);
}
// Write out show/hide grid lines/sheet headers
MyWorkbook := TsWorkbook.Create;
try
MyWorkSheet:= MyWorkBook.AddWorksheet(OptionsSheet);
if AShowGridLines then
MyWorksheet.Options := MyWorksheet.Options + [soShowGridLines]
else
MyWorksheet.Options := MyWorksheet.Options - [soShowGridLines];
if AShowHeaders then
MyWorksheet.Options := MyWorksheet.Options + [soShowHeaders]
else
MyWorksheet.Options := MyWorksheet.Options - [soShowHeaders];
MyWorkBook.WriteToFile(TempFile, AFormat, true);
finally
MyWorkbook.Free;
end;
// Read back presence of grid lines/sheet headers
MyWorkbook := TsWorkbook.Create;
try
MyWorkbook.ReadFromFile(TempFile, AFormat);
if AFormat = sfExcel2 then
MyWorksheet := MyWorkbook.GetFirstWorksheet
else
MyWorksheet := GetWorksheetByName(MyWorkBook, OptionsSheet);
if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet');
CheckEquals(soShowGridLines in MyWorksheet.Options, AShowGridLines,
'Test saved show grid lines mismatch');
CheckEquals(soShowHeaders in MyWorksheet.Options, AShowHeaders,
'Test saved show headers mismatch');
finally
MyWorkbook.Free;
DeleteFile(TempFile);
end;
end;
{ Tests for BIFF2 grid lines and/or headers }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_ShowGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcel2, true, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_ShowGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcel2, true, false);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_HideGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcel2, false, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_HideGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcel2, false, false);
end;
{ Tests for BIFF5 grid lines and/or headers }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_ShowGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcel5, true, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_ShowGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcel5, true, false);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_HideGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcel5, false, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_HideGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcel5, false, false);
end;
{ Tests for BIFF8 grid lines and/or headers }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_ShowGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcel8, true, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_ShowGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcel8, true, false);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_HideGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcel8, false, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_HideGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcel8, false, false);
end;
{ Tests for ODS grid lines and/or headers }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_ShowGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfOpenDocument, true, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_ShowGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfOpenDocument, true, false);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_HideGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfOpenDocument, false, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_HideGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfOpenDocument, false, false);
end;
{ Tests for OOXML grid lines and/or headers }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_ShowGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfOOXML, true, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_ShowGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfOOXML, true, false);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_HideGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfOOXML, false, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_HideGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfOOXML, false, false);
end;
{ Tests for Excel2003/XML grid lines and/or headers }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_ShowGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcelXML, true, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_ShowGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcelXML, true, false);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_HideGridLines_ShowHeaders;
begin
TestWriteReadGridHeaders(sfExcelXML, false, true);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_HideGridLines_HideHeaders;
begin
TestWriteReadGridHeaders(sfExcelXML, false, false);
end;
{ Test for frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteReadPanes(AFormat: TsSpreadsheetFormat;
ALeftPaneWidth, ATopPaneHeight: Integer);
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
TempFile: string; //write xls/xml to this file and read back from it
begin
TempFile := GetTempFileName;
{// Not needed: use workbook.writetofile with overwrite=true
if fileexists(TempFile) then
DeleteFile(TempFile);
}
// Write out pane sizes
MyWorkbook := TsWorkbook.Create;
try
MyWorkSheet:= MyWorkBook.AddWorksheet(OptionsSheet);
MyWorksheet.LeftPaneWidth := ALeftPaneWidth;
MyWorksheet.TopPaneHeight := ATopPaneHeight;
MyWorksheet.Options := MyWorksheet.Options + [soHasFrozenPanes];
MyWorkBook.WriteToFile(TempFile, AFormat, true);
finally
MyWorkbook.Free;
end;
// Read back pane sizes
MyWorkbook := TsWorkbook.Create;
try
MyWorkbook.ReadFromFile(TempFile, AFormat);
if AFormat = sfExcel2 then
MyWorksheet := MyWorkbook.GetFirstWorksheet
else
MyWorksheet := GetWorksheetByName(MyWorkBook, OptionsSheet);
if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet');
CheckEquals(
(AleftPaneWidth > 0) or (ATopPaneHeight > 0),
(soHasFrozenPanes in MyWorksheet.Options)
and ((MyWorksheet.LeftPaneWidth > 0) or (MyWorksheet.TopPaneHeight > 0)),
'Test saved frozen panes mismatch');
CheckEquals(ALeftPaneWidth, MyWorksheet.LeftPaneWidth,
'Test saved left pane width mismatch');
CheckEquals(ATopPaneHeight, MyWorksheet.TopPaneHeight,
'Test save top pane height mismatch');
finally
MyWorkbook.Free;
DeleteFile(TempFile);
end;
end;
{ Tests for BIFF2 frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_Panes_HorVert;
begin
TestWriteReadPanes(sfExcel2, 1, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_Panes_Hor;
begin
TestWriteReadPanes(sfExcel2, 1, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_Panes_Vert;
begin
TestWriteReadPanes(sfExcel2, 0, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF2_Panes_None;
begin
TestWriteReadPanes(sfExcel2, 0, 0);
end;
{ Tests for BIFF5 frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_Panes_HorVert;
begin
TestWriteReadPanes(sfExcel5, 1, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_Panes_Hor;
begin
TestWriteReadPanes(sfExcel5, 1, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_Panes_Vert;
begin
TestWriteReadPanes(sfExcel5, 0, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_Panes_None;
begin
TestWriteReadPanes(sfExcel5, 0, 0);
end;
{ Tests for BIFF8 frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_Panes_HorVert;
begin
TestWriteReadPanes(sfExcel8, 1, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_Panes_Hor;
begin
TestWriteReadPanes(sfExcel8, 1, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_Panes_Vert;
begin
TestWriteReadPanes(sfExcel8, 0, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_Panes_None;
begin
TestWriteReadPanes(sfExcel8, 0, 0);
end;
{ Tests for ODS frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_Panes_HorVert;
begin
TestWriteReadPanes(sfOpenDocument, 1, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_Panes_Hor;
begin
TestWriteReadPanes(sfOpenDocument, 1, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_Panes_Vert;
begin
TestWriteReadPanes(sfOpenDocument, 0, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_Panes_None;
begin
TestWriteReadPanes(sfOpenDocument, 0, 0);
end;
{ Tests for OOXML frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_Panes_HorVert;
begin
TestWriteReadPanes(sfOOXML, 1, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_Panes_Hor;
begin
TestWriteReadPanes(sfOOXML, 1, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_Panes_Vert;
begin
TestWriteReadPanes(sfOOXML, 0, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_Panes_None;
begin
TestWriteReadPanes(sfOOXML, 0, 0);
end;
{ Tests for Excel 2003/XML frozen panes }
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_Panes_HorVert;
begin
TestWriteReadPanes(sfExcelXML, 1, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_Panes_Hor;
begin
TestWriteReadPanes(sfExcelXML, 1, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_Panes_Vert;
begin
TestWriteReadPanes(sfExcelXML, 0, 2);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_Panes_None;
begin
TestWriteReadPanes(sfExcelXML, 0, 0);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteReadHiddenSheet(
AFormat: TsSpreadsheetFormat);
const
RESULTS: array[0..1] of Boolean = (false, true);
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
TempFile: string; //write xls/xml to this file and read back from it
i: Integer;
begin
TempFile := GetTempFileName;
// Write out pane sizes
MyWorkbook := TsWorkbook.Create;
try
MyWorkBook.AddWorksheet(OptionsSheet);
MyWorkSheet := MyWorkBook.AddWorksheet(OptionsSheet + '-hidden');
MyWorksheet.Options := myWorksheet.Options + [soHidden];
MyWorkBook.WriteToFile(TempFile, AFormat, true);
finally
MyWorkbook.Free;
end;
// Read back pane sizes
MyWorkbook := TsWorkbook.Create;
try
MyWorkbook.ReadFromFile(TempFile, AFormat);
for i:=0 to MyWorkbook.GetWorksheetCount-1 do begin
MyWorksheet := MyWorkbook.GetWorksheetByIndex(i);
if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet #' + IntToStr(i));
CheckEquals(RESULTS[i], soHidden in MyWorksheet.Options,
'Test saved hidden state mismatch, sheet #' + IntToStr(i));
end;
finally
MyWorkbook.Free;
DeleteFile(TempFile);
end;
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF5_HiddenSheet;
begin
TestWriteReadHiddenSheet(sfExcel5);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_BIFF8_HiddenSheet;
begin
TestWriteReadHiddenSheet(sfExcel8);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_OOXML_HiddenSheet;
begin
TestWriteReadHiddenSheet(sfOOXML);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_ODS_HiddenSheet;
begin
TestWriteReadHiddenSheet(sfOpenDocument);
end;
procedure TSpreadWriteReadOptionsTests.TestWriteRead_XML_HiddenSheet;
begin
TestWriteReadHiddenSheet(sfExcelXML);
end;
initialization
RegisterTest(TSpreadWriteReadOptionsTests);
end.