diff --git a/components/fpspreadsheet/tests/optiontests.pas b/components/fpspreadsheet/tests/optiontests.pas
new file mode 100644
index 000000000..54ab84da3
--- /dev/null
+++ b/components/fpspreadsheet/tests/optiontests.pas
@@ -0,0 +1,257 @@
+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,
+ fpspreadsheet, xlsbiff2, xlsbiff5, xlsbiff8 {and a project requirement for lclbase for utf8 handling},
+ testsutility;
+
+type
+ { TSpreadWriteReadColorTests }
+ //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);
+
+ published
+ // Writes out colors & reads back.
+
+ { BIFF2 file format tests }
+// procedure TestWriteReadBIFF2_Font_InternalPal; // internal palette for BIFF2 file format
+
+ { BIFF5 file format tests }
+ procedure TestWriteReadBIFF5_GridLines_Headers;
+ procedure TestWriteReadBIFF5_GridLines;
+ procedure TestWriteReadBIFF5_Headers;
+ procedure TestWriteReadBIFF5_NoGridLines_NoHeaders;
+
+ procedure TestWriteReadBIFF5_Panes_HorVert;
+ procedure TestWriteReadBIFF5_Panes_Hor;
+ procedure TestWriteReadBIFF5_Panes_Vert;
+ procedure TestWriteReadBIFF5_Panes_None;
+
+ { BIFF8 file format tests }
+ procedure TestWriteReadBIFF8_GridLines_Headers;
+ procedure TestWriteReadBIFF8_GridLines;
+ procedure TestWriteReadBIFF8_Headers;
+ procedure TestWriteReadBIFF8_NoGridLines_NoHeaders;
+
+ procedure TestWriteReadBIFF8_Panes_HorVert;
+ procedure TestWriteReadBIFF8_Panes_Hor;
+ procedure TestWriteReadBIFF8_Panes_Vert;
+ procedure TestWriteReadBIFF8_Panes_None;
+ 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;
+ 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);
+ MyWorkbook.Free;
+
+ // Read back presence of grid lines/sheet headers
+ MyWorkbook := TsWorkbook.Create;
+ 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');
+ MyWorkbook.Free;
+
+ DeleteFile(TempFile);
+end;
+
+{ Tests for BIFF5 grid lines and/or headers }
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_GridLines_Headers;
+begin
+ TestWriteReadGridHeaders(sfExcel5, true, true);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_GridLines;
+begin
+ TestWriteReadGridHeaders(sfExcel5, true, false);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_Headers;
+begin
+ TestWriteReadGridHeaders(sfExcel5, false, true);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_NoGridLines_NoHeaders;
+begin
+ TestWriteReadGridHeaders(sfExcel5, false, false);
+end;
+
+{ Tests for BIFF8 grid lines and/or headers }
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_GridLines_Headers;
+begin
+ TestWriteReadGridHeaders(sfExcel8, true, true);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_GridLines;
+begin
+ TestWriteReadGridHeaders(sfExcel8, true, false);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_Headers;
+begin
+ TestWriteReadGridHeaders(sfExcel8, false, true);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_NoGridLines_NoHeaders;
+begin
+ TestWriteReadGridHeaders(sfExcel8, 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;
+ MyWorkSheet:= MyWorkBook.AddWorksheet(OptionsSheet);
+ MyWorksheet.LeftPaneWidth := ALeftPaneWidth;
+ MyWorksheet.TopPaneHeight := ATopPaneHeight;
+ MyWorksheet.Options := MyWorksheet.Options + [soHasFrozenPanes];
+ MyWorkBook.WriteToFile(TempFile, AFormat, true);
+ MyWorkbook.Free;
+
+ // Read back pane sizes
+ MyWorkbook := TsWorkbook.Create;
+ 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(soHasFrozenPanes in MyWorksheet.Options, true,
+ 'Test saved frozen panes mismatch');
+ CheckEquals(MyWorksheet.LeftPaneWidth, ALeftPaneWidth,
+ 'Test saved left pane width mismatch');
+ CheckEquals(MyWorksheet.TopPaneHeight, ATopPaneHeight,
+ 'Test save top pane height mismatch');
+ MyWorkbook.Free;
+
+ DeleteFile(TempFile);
+end;
+
+{ Tests for BIFF5 frozen panes }
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_Panes_HorVert;
+begin
+ TestWriteReadPanes(sfExcel5, 1, 2);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_Panes_Hor;
+begin
+ TestWriteReadPanes(sfExcel5, 1, 0);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_Panes_Vert;
+begin
+ TestWriteReadPanes(sfExcel5, 0, 2);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF5_Panes_None;
+begin
+ TestWriteReadPanes(sfExcel5, 0, 0);
+end;
+
+{ Tests for BIFF8 frozen panes }
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_Panes_HorVert;
+begin
+ TestWriteReadPanes(sfExcel8, 1, 2);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_Panes_Hor;
+begin
+ TestWriteReadPanes(sfExcel8, 1, 0);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_Panes_Vert;
+begin
+ TestWriteReadPanes(sfExcel8, 0, 2);
+end;
+
+procedure TSpreadWriteReadOptionsTests.TestWriteReadBIFF8_Panes_None;
+begin
+ TestWriteReadPanes(sfExcel8, 0, 0);
+end;
+
+initialization
+ RegisterTest(TSpreadWriteReadOptionsTests);
+
+end.
+
diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi
index 492991859..100bda984 100644
--- a/components/fpspreadsheet/tests/spreadtestgui.lpi
+++ b/components/fpspreadsheet/tests/spreadtestgui.lpi
@@ -79,7 +79,7 @@
-
+
@@ -130,6 +130,11 @@
+
+
+
+
+
diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpr b/components/fpspreadsheet/tests/spreadtestgui.lpr
index d3a39ee6c..4d09ec536 100644
--- a/components/fpspreadsheet/tests/spreadtestgui.lpr
+++ b/components/fpspreadsheet/tests/spreadtestgui.lpr
@@ -4,7 +4,8 @@ program spreadtestgui;
uses
Interfaces, Forms, GuiTestRunner, datetests, stringtests, numberstests,
- manualtests, testsutility, internaltests, formattests, colortests, fonttests;
+ manualtests, testsutility, internaltests, formattests, colortests, fonttests,
+ optiontests;
begin
Application.Initialize;
diff --git a/components/fpspreadsheet/xlscommon.pas b/components/fpspreadsheet/xlscommon.pas
index acc97d571..b2a532269 100644
--- a/components/fpspreadsheet/xlscommon.pas
+++ b/components/fpspreadsheet/xlscommon.pas
@@ -917,9 +917,9 @@ end;
{ Reads the WINDOW2 record containing information like "show grid lines",
"show sheet headers", "panes are frozen", etc.
- The record structure is different for BIFF5 and BIFF8, but we use here only
- the common part.
- BIFF2 is completely different and has to be overridden. }
+ The record structure is slightly different for BIFF5 and BIFF8, but we use
+ here only the common part.
+ BIFF2 has a different structure and has to be re-written. }
procedure TsSpreadBIFFReader.ReadWindow2(AStream: TStream);
var
flags: Word;