From 3e6fce3a2987e1899fe72d7c94c69fde363d783c Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 4 May 2014 19:08:17 +0000 Subject: [PATCH] fpspreadsheet: Add unit test cases for pane support and showing/hiding of grid lines and sheet headers (write/read of BIFF5 and BIFF8). Passed. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3006 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../fpspreadsheet/tests/optiontests.pas | 257 ++++++++++++++++++ .../fpspreadsheet/tests/spreadtestgui.lpi | 7 +- .../fpspreadsheet/tests/spreadtestgui.lpr | 3 +- components/fpspreadsheet/xlscommon.pas | 6 +- 4 files changed, 268 insertions(+), 5 deletions(-) create mode 100644 components/fpspreadsheet/tests/optiontests.pas 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;