From f9663739db020029247b3d05ffc4e1e3419b313e Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sun, 1 Jun 2014 22:11:31 +0000 Subject: [PATCH] fpspreadsheet: Add test case for empty cells for all biff and ods. All passed. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3124 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../fpspreadsheet/tests/emptycelltests.pas | 473 ++++++++++++++++++ .../fpspreadsheet/tests/spreadtestgui.lpi | 7 +- .../fpspreadsheet/tests/spreadtestgui.lpr | 3 +- 3 files changed, 481 insertions(+), 2 deletions(-) create mode 100644 components/fpspreadsheet/tests/emptycelltests.pas diff --git a/components/fpspreadsheet/tests/emptycelltests.pas b/components/fpspreadsheet/tests/emptycelltests.pas new file mode 100644 index 000000000..a57312ec5 --- /dev/null +++ b/components/fpspreadsheet/tests/emptycelltests.pas @@ -0,0 +1,473 @@ +unit emptycelltests; + +{$mode objfpc}{$H+} + +interface +{ Tests for correct location of empty cells +This unit test is 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, fpsopendocument, {and a project requirement for lclbase for utf8 handling} + testsutility; + +var + // Norm to test against - list of strings that show the layout of empty and occupied cells + SollLayoutStrings: array[0..5] of string; + + procedure InitSollLayouts; + +type + { TSpreadWriteReadEmptyCellTests } + //Write to xls/xml file and read back + TSpreadWriteReadEmptyCellTests = class(TTestCase) + private + protected + // Set up expected values: + procedure SetUp; override; + procedure TearDown; override; + procedure TestWriteReadEmptyCells(AFormat: TsSpreadsheetFormat; + ALayout: Integer; AInverted: Boolean); + + published + // Writes out cell layouts + + { BIFF2 file format tests } + procedure TestWriteReadEmptyCells_BIFF2_0; + procedure TestWriteReadEmptyCells_BIFF2_0_inv; + procedure TestWriteReadEmptyCells_BIFF2_1; + procedure TestWriteReadEmptyCells_BIFF2_1_inv; + procedure TestWriteReadEmptyCells_BIFF2_2; + procedure TestWriteReadEmptyCells_BIFF2_2_inv; + procedure TestWriteReadEmptyCells_BIFF2_3; + procedure TestWriteReadEmptyCells_BIFF2_3_inv; + procedure TestWriteReadEmptyCells_BIFF2_4; + procedure TestWriteReadEmptyCells_BIFF2_4_inv; + procedure TestWriteReadEmptyCells_BIFF2_5; + procedure TestWriteReadEmptyCells_BIFF2_5_inv; + + { BIFF5 file format tests } + procedure TestWriteReadEmptyCells_BIFF5_0; + procedure TestWriteReadEmptyCells_BIFF5_0_inv; + procedure TestWriteReadEmptyCells_BIFF5_1; + procedure TestWriteReadEmptyCells_BIFF5_1_inv; + procedure TestWriteReadEmptyCells_BIFF5_2; + procedure TestWriteReadEmptyCells_BIFF5_2_inv; + procedure TestWriteReadEmptyCells_BIFF5_3; + procedure TestWriteReadEmptyCells_BIFF5_3_inv; + procedure TestWriteReadEmptyCells_BIFF5_4; + procedure TestWriteReadEmptyCells_BIFF5_4_inv; + procedure TestWriteReadEmptyCells_BIFF5_5; + procedure TestWriteReadEmptyCells_BIFF5_5_inv; + + { BIFF8 file format tests } + procedure TestWriteReadEmptyCells_BIFF8_0; + procedure TestWriteReadEmptyCells_BIFF8_0_inv; + procedure TestWriteReadEmptyCells_BIFF8_1; + procedure TestWriteReadEmptyCells_BIFF8_1_inv; + procedure TestWriteReadEmptyCells_BIFF8_2; + procedure TestWriteReadEmptyCells_BIFF8_2_inv; + procedure TestWriteReadEmptyCells_BIFF8_3; + procedure TestWriteReadEmptyCells_BIFF8_3_inv; + procedure TestWriteReadEmptyCells_BIFF8_4; + procedure TestWriteReadEmptyCells_BIFF8_4_inv; + procedure TestWriteReadEmptyCells_BIFF8_5; + procedure TestWriteReadEmptyCells_BIFF8_5_inv; + + { OpenDocument file format tests } + procedure TestWriteReadEmptyCells_ODS_0; + procedure TestWriteReadEmptyCells_ODS_0_inv; + procedure TestWriteReadEmptyCells_ODS_1; + procedure TestWriteReadEmptyCells_ODS_1_inv; + procedure TestWriteReadEmptyCells_ODS_2; + procedure TestWriteReadEmptyCells_ODS_2_inv; + procedure TestWriteReadEmptyCells_ODS_3; + procedure TestWriteReadEmptyCells_ODS_3_inv; + procedure TestWriteReadEmptyCells_ODS_4; + procedure TestWriteReadEmptyCells_ODS_4_inv; + procedure TestWriteReadEmptyCells_ODS_5; + procedure TestWriteReadEmptyCells_ODS_5_inv; + + end; + +implementation + +const + EmptyCellsSheet = 'EmptyCells'; + +procedure InitSollLayouts; +begin + SollLayoutStrings[0] := 'x x|'+ + ' |'+ + ' x |'+ + ' |'+ + 'x x|'; + + SollLayoutStrings[1] := 'xx xx |'+ + ' xx xx|'+ + 'xx xx |'; + + SollLayoutStrings[2] := ' |'+ + 'xxxxxxxx|'+ + ' |'; + + SollLayoutStrings[3] := ' |'+ + 'xxxxxxxx'; + + SollLayoutStrings[4] := 'xxxxxxxx|'+ + ' |'+ + ' '; + + SollLayoutStrings[5] := 'xxxxxxxx|'+ + ' x x |'+ + ' |'; +end; + + +{ TSpreadWriteReadEmptyCellTests } + +procedure TSpreadWriteReadEmptyCellTests.SetUp; +begin + inherited SetUp; + InitSollLayouts; +end; + +procedure TSpreadWriteReadEmptyCellTests.TearDown; +begin + inherited TearDown; +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells( + AFormat: TsSpreadsheetFormat; ALayout: Integer; AInverted: Boolean); +const + CELLTEXT = 'x'; +var + MyWorksheet: TsWorksheet; + MyWorkbook: TsWorkbook; + row, col: Integer; + MyCell: PCell; + TempFile: string; //write xls/xml to this file and read back from it + i: Integer; + L: TStringList; + s: String; +begin + TempFile := GetTempFileName; + + MyWorkbook := TsWorkbook.Create; + MyWorkSheet:= MyWorkBook.AddWorksheet(EmptyCellsSheet); + + L := TStringList.Create; + try + L.Delimiter := '|'; + L.StrictDelimiter := true; + L.DelimitedText := SollLayoutStrings[ALayout]; + + // Write out cells + for row := 0 to L.Count-1 do begin + s := L[row]; + for col := 0 to Length(s)-1 do begin + if AInverted then begin + if s[col+1] = ' ' then s[col+1] := 'x' else s[col+1] := ' '; + end; + if s[col+1] = 'x' then + MyWorksheet.WriteUTF8Text(row, col, CELLTEXT); + end; + end; + MyWorkBook.WriteToFile(TempFile, AFormat, true); + MyWorkbook.Free; + + // Open the spreadsheet + MyWorkbook := TsWorkbook.Create; + MyWorkbook.ReadFromFile(TempFile, AFormat); + if AFormat = sfExcel2 then + MyWorksheet := MyWorkbook.GetFirstWorksheet + else + MyWorksheet := GetWorksheetByName(MyWorkBook, EmptyCellsSheet); + if MyWorksheet=nil then + fail('Error in test code. Failed to get named worksheet'); + + for row := 0 to MyWorksheet.GetLastRowIndex do begin + SetLength(s, MyWorksheet.GetLastColIndex + 1); + for col := 0 to MyWorksheet.GetLastColIndex do begin + MyCell := MyWorksheet.FindCell(row, col); + if MyCell = nil then s[col+1] := ' ' else s[col+1] := 'x'; + if AInverted then begin + if s[col+1] = ' ' then s[col+1] := 'x' else s[col+1] := ' '; + end; + end; + if AInverted then + while Length(s) < Length(L[row]) do s := s + 'x' + else + while Length(s) < Length(L[row]) do s := s + ' '; + CheckEquals(L[row], s, + 'Test empty cell layout mismatch, cell '+CellNotation(MyWorksheet, Row, Col)); + end; + finally + L.Free; + end; + + MyWorkbook.Free; + + DeleteFile(TempFile); +end; + +{ BIFF2 tests } + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_0; +begin + TestWriteReadEmptyCells(sfExcel2, 0, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_0_inv; +begin + TestWriteReadEmptyCells(sfExcel2, 0, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_1; +begin + TestWriteReadEmptyCells(sfExcel2, 1, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_1_inv; +begin + TestWriteReadEmptyCells(sfExcel2, 1, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_2; +begin + TestWriteReadEmptyCells(sfExcel2, 2, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_2_inv; +begin + TestWriteReadEmptyCells(sfExcel2, 2, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_3; +begin + TestWriteReadEmptyCells(sfExcel2, 3, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_3_inv; +begin + TestWriteReadEmptyCells(sfExcel2, 3, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_4; +begin + TestWriteReadEmptyCells(sfExcel2, 4, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_4_inv; +begin + TestWriteReadEmptyCells(sfExcel2, 4, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_5; +begin + TestWriteReadEmptyCells(sfExcel2, 5, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF2_5_inv; +begin + TestWriteReadEmptyCells(sfExcel2, 5, true); +end; + + +{ BIFF5 tests } + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_0; +begin + TestWriteReadEmptyCells(sfExcel5, 0, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_0_inv; +begin + TestWriteReadEmptyCells(sfExcel5, 0, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_1; +begin + TestWriteReadEmptyCells(sfExcel5, 1, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_1_inv; +begin + TestWriteReadEmptyCells(sfExcel5, 1, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_2; +begin + TestWriteReadEmptyCells(sfExcel5, 2, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_2_inv; +begin + TestWriteReadEmptyCells(sfExcel5, 2, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_3; +begin + TestWriteReadEmptyCells(sfExcel5, 3, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_3_inv; +begin + TestWriteReadEmptyCells(sfExcel5, 3, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_4; +begin + TestWriteReadEmptyCells(sfExcel5, 4, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_4_inv; +begin + TestWriteReadEmptyCells(sfExcel5, 4, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_5; +begin + TestWriteReadEmptyCells(sfExcel5, 5, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF5_5_inv; +begin + TestWriteReadEmptyCells(sfExcel5, 5, true); +end; + + +{ BIFF8 tests } + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_0; +begin + TestWriteReadEmptyCells(sfExcel8, 0, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_0_inv; +begin + TestWriteReadEmptyCells(sfExcel8, 0, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_1; +begin + TestWriteReadEmptyCells(sfExcel8, 1, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_1_inv; +begin + TestWriteReadEmptyCells(sfExcel8, 1, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_2; +begin + TestWriteReadEmptyCells(sfExcel8, 2, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_2_inv; +begin + TestWriteReadEmptyCells(sfExcel8, 2, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_3; +begin + TestWriteReadEmptyCells(sfExcel8, 3, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_3_inv; +begin + TestWriteReadEmptyCells(sfExcel8, 3, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_4; +begin + TestWriteReadEmptyCells(sfExcel8, 4, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_4_inv; +begin + TestWriteReadEmptyCells(sfExcel8, 4, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_5; +begin + TestWriteReadEmptyCells(sfExcel8, 5, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_BIFF8_5_inv; +begin + TestWriteReadEmptyCells(sfExcel8, 5, true); +end; + +{ OpenDocument tests } + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_0; +begin + TestWriteReadEmptyCells(sfOpenDocument, 0, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_0_inv; +begin + TestWriteReadEmptyCells(sfOpenDocument, 0, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_1; +begin + TestWriteReadEmptyCells(sfOpenDocument, 1, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_1_inv; +begin + TestWriteReadEmptyCells(sfOpenDocument, 1, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_2; +begin + TestWriteReadEmptyCells(sfOpenDocument, 2, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_2_inv; +begin + TestWriteReadEmptyCells(sfOpenDocument, 2, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_3; +begin + TestWriteReadEmptyCells(sfOpenDocument, 3, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_3_inv; +begin + TestWriteReadEmptyCells(sfOpenDocument, 3, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_4; +begin + TestWriteReadEmptyCells(sfOpenDocument, 4, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_4_inv; +begin + TestWriteReadEmptyCells(sfOpenDocument, 4, true); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_5; +begin + TestWriteReadEmptyCells(sfOpenDocument, 5, false); +end; + +procedure TSpreadWriteReadEmptyCellTests.TestWriteReadEmptyCells_ODS_5_inv; +begin + TestWriteReadEmptyCells(sfOpenDocument, 5, true); +end; + + +initialization + RegisterTest(TSpreadWriteReadEmptyCellTests); + InitSollLayouts; + +end. + diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi index f8a97486a..750a96485 100644 --- a/components/fpspreadsheet/tests/spreadtestgui.lpi +++ b/components/fpspreadsheet/tests/spreadtestgui.lpi @@ -78,7 +78,7 @@ - + @@ -149,6 +149,11 @@ + + + + + diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpr b/components/fpspreadsheet/tests/spreadtestgui.lpr index 495bbf073..ee867af5d 100644 --- a/components/fpspreadsheet/tests/spreadtestgui.lpr +++ b/components/fpspreadsheet/tests/spreadtestgui.lpr @@ -5,7 +5,8 @@ program spreadtestgui; uses Interfaces, Forms, GuiTestRunner, datetests, stringtests, numberstests, manualtests, testsutility, internaltests, formattests, colortests, fonttests, - optiontests, numformatparsertests, formulatests, rpnFormulaUnit; + optiontests, numformatparsertests, formulatests, rpnFormulaUnit, + emptycelltests; begin Application.Initialize;