From 565df8a3e3f8f198d6cd4d5530d309943ec36e45 Mon Sep 17 00:00:00 2001 From: wp_xxyyzz Date: Sat, 26 Jul 2014 21:52:59 +0000 Subject: [PATCH] fpspreadsheet: Add test cases for xlsx number and date/time formats. Two fails. git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3384 8e941d3f-bd1b-0410-a28a-d453659cc2b4 --- components/fpspreadsheet/tests/datetests.pas | 6 +++ .../fpspreadsheet/tests/formattests.pas | 38 ++++++++++++++++--- .../fpspreadsheet/tests/numberstests.pas | 7 +++- .../fpspreadsheet/tests/spreadtestgui.lpi | 2 + components/fpspreadsheet/xlsxooxml.pas | 27 ++++++++----- 5 files changed, 64 insertions(+), 16 deletions(-) diff --git a/components/fpspreadsheet/tests/datetests.pas b/components/fpspreadsheet/tests/datetests.pas index 93da57b2a..0f59628af 100644 --- a/components/fpspreadsheet/tests/datetests.pas +++ b/components/fpspreadsheet/tests/datetests.pas @@ -215,6 +215,7 @@ type procedure TestWriteReadDates_BIFF5; procedure TestWriteReadDates_BIFF8; procedure TestWriteReadDates_ODS; + procedure TestWriteReadDates_OOXML; end; @@ -364,6 +365,11 @@ begin TestWriteReadDates(sfOpenDocument); end; +procedure TSpreadWriteReadDateTests.TestWriteReadDates_OOXML; +begin + TestWriteReadDates(sfOOXML); +end; + { TSpreadReadDateTests } diff --git a/components/fpspreadsheet/tests/formattests.pas b/components/fpspreadsheet/tests/formattests.pas index 9e7e0f7c7..97a8569a0 100644 --- a/components/fpspreadsheet/tests/formattests.pas +++ b/components/fpspreadsheet/tests/formattests.pas @@ -113,8 +113,15 @@ type procedure TestWriteRead_ODS_BorderStyles; procedure TestWriteRead_ODS_ColWidths; procedure TestWriteRead_ODS_RowHeights; + procedure TestWriteRead_ODS_DateTimeFormats; + procedure TestWriteRead_ODS_NumberFormats; procedure TestWriteRead_ODS_TextRotation; procedure TestWriteRead_ODS_WordWrap; + + { OOXML Tests } + procedure TestWriteRead_OOXML_DateTimeFormats; + procedure TestWriteRead_OOXML_NumberFormats; + end; implementation @@ -155,9 +162,9 @@ begin SollNumbers[0] := 0.0; SollNumbers[1] := 1.0; SollNumbers[2] := -1.0; - SollNumbers[3] := 1.2345E6; + SollNumbers[3] := 1.23456E6; SollNumbers[4] := -1.23456E6; - SollNumbers[5] := 1.23456E-6; + SollNumbers[5] := 1.23456E-6; SollNumbers[6] := -1.23456E-6; SollNumberFormats[0] := nfGeneral; SollNumberDecimals[0] := 0; @@ -292,13 +299,14 @@ begin begin MyWorksheet.WriteNumber(Row, Col, SollNumbers[Row], SollNumberFormats[Col], SollNumberDecimals[Col]); ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col); - CheckEquals(SollNumberStrings[Row, Col], ActualString, 'Test unsaved string mismatch cell ' + CellNotation(MyWorksheet,Row,Col)); + CheckEquals(SollNumberStrings[Row, Col], ActualString, + 'Test unsaved string mismatch cell ' + CellNotation(MyWorksheet,Row,Col)); end; TempFile:=NewTempFile; MyWorkBook.WriteToFile(TempFile, AFormat, true); MyWorkbook.Free; - // Open the spreadsheet, as biff8 + // Open the spreadsheet MyWorkbook := TsWorkbook.Create; MyWorkbook.ReadFromFile(TempFile, AFormat); if AFormat = sfExcel2 then @@ -311,7 +319,8 @@ begin for Col := Low(SollNumberFormats) to High(SollNumberFormats) do begin ActualString := MyWorkSheet.ReadAsUTF8Text(Row,Col); - CheckEquals(SollNumberStrings[Row,Col],ActualString,'Test saved string mismatch cell '+CellNotation(MyWorkSheet,Row,Col)); + CheckEquals(SollNumberStrings[Row,Col], ActualString, + 'Test saved string mismatch cell '+CellNotation(MyWorkSheet,Row,Col)); end; // Finalization @@ -335,6 +344,16 @@ begin TestWriteReadNumberFormats(sfExcel8); end; +procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_NumberFormats; +begin + TestWriteReadNumberFormats(sfOpenDocument); +end; + +procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_NumberFormats; +begin + TestWriteReadNumberFormats(sfOOXML); +end; + { --- Date/time formats --- } @@ -409,6 +428,15 @@ begin TestWriteReadDateTimeFormats(sfExcel8); end; +procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_DateTimeFormats; +begin + TestWriteReadDateTimeFormats(sfOpenDocument); +end; + +procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_DateTimeFormats; +begin + TestWriteReadDateTimeFormats(sfOOXML); +end; { --- Alignment tests --- } diff --git a/components/fpspreadsheet/tests/numberstests.pas b/components/fpspreadsheet/tests/numberstests.pas index 6c0192ec0..136d6433b 100644 --- a/components/fpspreadsheet/tests/numberstests.pas +++ b/components/fpspreadsheet/tests/numberstests.pas @@ -105,6 +105,7 @@ type procedure TestWriteReadNumbers_BIFF5; procedure TestWriteReadNumbers_BIFF8; procedure TestWriteReadNumbers_ODS; + procedure TestWriteReadNumbers_OOXML; end; @@ -169,7 +170,6 @@ var Row: Cardinal; TempFile: string; //write xls/xml to this file and read back from it begin - //todo: add support for ODF format {// Not needed: use workbook.writetofile with overwrite=true if fileexists(TempFile) then DeleteFile(TempFile); @@ -230,6 +230,11 @@ begin TestWriteReadNumbers(sfOpenDocument); end; +procedure TSpreadWriteReadNumberTests.TestWriteReadNumbers_OOXML; +begin + TestWriteReadNumbers(sfOOXML); +end; + { TSpreadReadNumberTests } diff --git a/components/fpspreadsheet/tests/spreadtestgui.lpi b/components/fpspreadsheet/tests/spreadtestgui.lpi index 0b8a1cc2e..ae08248f0 100644 --- a/components/fpspreadsheet/tests/spreadtestgui.lpi +++ b/components/fpspreadsheet/tests/spreadtestgui.lpi @@ -89,6 +89,7 @@ + @@ -106,6 +107,7 @@ + diff --git a/components/fpspreadsheet/xlsxooxml.pas b/components/fpspreadsheet/xlsxooxml.pas index 461c5cce1..40b988730 100755 --- a/components/fpspreadsheet/xlsxooxml.pas +++ b/components/fpspreadsheet/xlsxooxml.pas @@ -597,15 +597,17 @@ var fmtStr: String; nodeName: String; begin - node := ANode.FirstChild; - while Assigned(node) do begin - nodeName := node.NodeName; - if nodeName = 'numFmt' then begin - idStr := GetAttrValue(node, 'numFmtId'); - fmtStr := GetAttrValue(node, 'formatCode'); - NumFormatList.AnalyzeAndAdd(StrToInt(idStr), fmtStr); + if Assigned(ANode) then begin + node := ANode.FirstChild; + while Assigned(node) do begin + nodeName := node.NodeName; + if nodeName = 'numFmt' then begin + idStr := GetAttrValue(node, 'numFmtId'); + fmtStr := GetAttrValue(node, 'formatCode'); + NumFormatList.AnalyzeAndAdd(StrToInt(idStr), fmtStr); + end; + node := node.NextSibling; end; - node := node.NextSibling; end; end; @@ -1373,7 +1375,8 @@ begin ''); for i:=1 to Workbook.GetWorksheetCount do AppendToStream(FSWorkbook, Format( - '', [i, i, i+2])); + '', [Workbook.GetWorksheetByIndex(i-1).Name, i, i+2])); + // '', [i, i, i+2])); AppendToStream(FSWorkbook, ''); AppendToStream(FSWorkbook, @@ -1831,7 +1834,11 @@ begin CellPosText := TsWorksheet.CellPosToText(ARow, ACol); lStyleIndex := GetStyleIndex(ACell); lDateTime := ConvertDateTimeToExcelDateTime(AValue, FDateMode); - CellValueText := Format('%g', [lDateTime], FPointSeparatorSettings); + // !!!!!!!!!!!!!!!!!!!!! NEED "IF" TO CHECK FOR DATE/TIME !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +// CellValueText := Format('%g', [lDateTime], FPointSeparatorSettings); + CellValueText := FloatToStr(lDateTime, FPointSeparatorSettings); + AppendToStream(AStream, Format( '%s', [CellPosText, lStyleIndex, CellValueText])); end;