From 73365ae2efe51a51a3585497493dc800ee1aed83 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Tue, 14 Oct 2014 21:45:36 +0000 Subject: [PATCH] fpspreadsheet: Forgot to add celltypetests unit to repository... git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3657 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- .../fpspreadsheet/tests/celltypetests.pas | 204 ++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 components/fpspreadsheet/tests/celltypetests.pas diff --git a/components/fpspreadsheet/tests/celltypetests.pas b/components/fpspreadsheet/tests/celltypetests.pas new file mode 100644 index 000000000..cac4994b7 --- /dev/null +++ b/components/fpspreadsheet/tests/celltypetests.pas @@ -0,0 +1,204 @@ +unit celltypetests; + +{$mode objfpc}{$H+} + +interface +{ Cell type tests +This unit tests writing the various cell data types out to and reading them +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 + { TSpreadWriteReadCellTypeTests } + // Write cell types to xls/xml file and read back + TSpreadWriteReadCellTypeTests = class(TTestCase) + private + + protected + // Set up expected values: + procedure SetUp; override; + procedure TearDown; override; + procedure TestWriteRead_Bool(AFormat: TsSpreadsheetFormat); + + published + // BIFF2 test cases + procedure TestWriteRead_Bool_BIFF2; + + // BIFF5 test cases + procedure TestWriteRead_Bool_BIFF5; + + // BIFF8 test cases + procedure TestWriteRead_Bool_BIFF8; + + // ODS test cases + procedure TestWriteRead_Bool_ODS; + + // OOXML test cases + procedure TestWriteRead_Bool_OOXML; + + // CSV test cases + procedure TestWriteRead_Bool_CSV; + end; + +implementation + +uses + TypInfo; + +const + SheetName = 'CellTypes'; + + +{ TSpreadWriteReadCellTypeTests } + +procedure TSpreadWriteReadCellTypeTests.SetUp; +begin + inherited SetUp; +end; + +procedure TSpreadWriteReadCellTypeTests.TearDown; +begin + inherited TearDown; +end; + +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool(AFormat: TsSpreadsheetFormat); +var + MyWorksheet: TsWorksheet; + MyWorkbook: TsWorkbook; + row, col: Integer; + MyCell: PCell; + value: Boolean; + TempFile: string; //write xls/xml to this file and read back from it +begin + MyWorkbook := TsWorkbook.Create; + try + MyWorkbook.Options := MyWorkbook.Options + [boCalcBeforeSaving]; + + MyWorkSheet:= MyWorkBook.AddWorksheet(SheetName); + row := 0; + + // direct cells with TRUE and FALSE + MyWorksheet.WriteBoolValue(row, 0, false); // A1 + Myworksheet.WriteBoolValue(row, 1, true); // B1 + inc(row); + + // cells with TRUE and FALSE as formula results + MyWorksheet.WriteFormula(row, 0, '=FALSE()'); // A2 + MyWorksheet.WriteFormula(row, 1, '=TRUE()'); // B2 + inc(row); + + // Merged cells with TRUE and FALSE + MyWorksheet.MergeCells(row, 0, row+1, 0); // A3 + Myworksheet.WriteBoolValue(row, 0, false); + MyWorksheet.MergeCells(row, 1, row+1, 1); // B3 + MyWorksheet.WriteBoolValue(row, 1, true); + inc(row, 2); + + // Merged cells with TRUE and FALSE function results + MyWorksheet.MergeCells(row, 0, row+1, 0); // A5 + MyWorksheet.WriteFormula(row, 0, '=FALSE()'); + MyWorksheet.MergeCells(row, 1, row+1, 1); // B5 + MyWorksheet.WriteFormula(row, 1, '=TRUE()'); + + TempFile := NewTempFile; + MyWorkBook.WriteToFile(TempFile, AFormat, true); + finally + MyWorkbook.Free; + end; + + // Open the spreadsheet + MyWorkbook := TsWorkbook.Create; + try + MyWorkbook.Options := MyWorkbook.Options + [boReadFormulas]; + MyWorkbook.ReadFromFile(TempFile, AFormat); + if AFormat in [sfExcel2, sfCSV] then + MyWorksheet := MyWorkbook.GetFirstWorksheet // only 1 sheet for BIFF2 + else + MyWorksheet := GetWorksheetByName(MyWorkBook, SheetName); + if MyWorksheet = nil then + fail('Error in test code. Failed to get named worksheet'); + + // Try to read cell + row := 0; + repeat + for col:=0 to 1 do + begin + MyCell := MyWorksheet.FindCell(row, col); + if MyCell = nil then + fail('Error in test code. Failed to get cell '+CellNotation(MyWorksheet, row, col)); + CheckEquals( + GetEnumName(TypeInfo(TCellContentType), ord(cctBool)), + GetEnumName(TypeInfo(TCellContentType), ord(MyCell^.ContentType)), + 'Test saved content type mismatch, cell '+CellNotation(MyWorksheet, row, col) + ); + value := MyCell^.BoolValue; + CheckEquals( + Boolean(col), + MyCell^.BoolValue, + 'Test saved boolean value mismatch, cell '+CellNotation(MyWorksheet, row, col)); + end; + + case row of + 0, 1: inc(row); + 2 : inc(row, 2); + else break; + end; + + until false; + + finally + MyWorkbook.Free; + DeleteFile(TempFile); + end; +end; + + +{ BIFF2 } +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool_BIFF2; +begin + TestWriteRead_Bool(sfExcel2); +end; + +{ BIFF5 } +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool_BIFF5; +begin + TestWriteRead_Bool(sfExcel5); +end; + +{ BIFF8 } +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool_BIFF8; +begin + TestWriteRead_Bool(sfExcel8); +end; + +{ ODS } +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool_ODS; +begin + TestWriteRead_Bool(sfOpenDocument); +end; + +{ OOXML } +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool_OOXML; +begin + TestWriteRead_Bool(sfOOXML); +end; + +{ CSV } +procedure TSpreadWriteReadCellTypeTests.TestWriteRead_Bool_CSV; +begin + TestWriteRead_Bool(sfCSV); +end; + + +initialization + RegisterTest(TSpreadWriteReadCellTypeTests); + +end. +