fpspreadsheet: Add number and datetime test cases for biff5 and biff2 (in unit formattests). Passed (the formats not supported by biff2 are omitted).

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3001 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-05-03 17:49:07 +00:00
parent c4724b28de
commit baaa13c757

View File

@ -57,6 +57,10 @@ type
procedure TestWriteReadTextRotation(AFormat:TsSpreadsheetFormat); procedure TestWriteReadTextRotation(AFormat:TsSpreadsheetFormat);
// Test word wrapping // Test word wrapping
procedure TestWriteReadWordWrap(AFormat: TsSpreadsheetFormat); procedure TestWriteReadWordWrap(AFormat: TsSpreadsheetFormat);
// Test number formats
procedure TestWriteReadNumberFormats(AFormat: TsSpreadsheetFormat);
// Repeat with date/times
procedure TestWriteReadDateTimeFormats(AFormat: TsSpreadsheetFormat);
published published
// Writes out numbers & reads back. // Writes out numbers & reads back.
@ -66,6 +70,8 @@ type
procedure TestWriteReadBIFF2_Alignment; procedure TestWriteReadBIFF2_Alignment;
procedure TestWriteReadBIFF2_Border; procedure TestWriteReadBIFF2_Border;
procedure TestWriteReadBIFF2_ColWidths; procedure TestWriteReadBIFF2_ColWidths;
procedure TestWriteReadBIFF2_DateTimeFormats;
procedure TestWriteReadBIFF2_NumberFormats;
// These features are not supported by Excel2 --> no test cases required! // These features are not supported by Excel2 --> no test cases required!
// - BorderStyle // - BorderStyle
// - TextRotation // - TextRotation
@ -76,6 +82,8 @@ type
procedure TestWriteReadBIFF5_Border; procedure TestWriteReadBIFF5_Border;
procedure TestWriteReadBIFF5_BorderStyles; procedure TestWriteReadBIFF5_BorderStyles;
procedure TestWriteReadBIFF5_ColWidths; procedure TestWriteReadBIFF5_ColWidths;
procedure TestWriteReadBIFF5_DateTimeFormats;
procedure TestWriteReadBIFF5_NumberFormats;
procedure TestWriteReadBIFF5_TextRotation; procedure TestWriteReadBIFF5_TextRotation;
procedure TestWriteReadBIFF5_WordWrap; procedure TestWriteReadBIFF5_WordWrap;
@ -84,11 +92,10 @@ type
procedure TestWriteReadBIFF8_Border; procedure TestWriteReadBIFF8_Border;
procedure TestWriteReadBIFF8_BorderStyles; procedure TestWriteReadBIFF8_BorderStyles;
procedure TestWriteReadBIFF8_ColWidths; procedure TestWriteReadBIFF8_ColWidths;
procedure TestWriteReadBIFF8_DateTimeFormats;
procedure TestWriteReadBIFF8_NumberFormats;
procedure TestWriteReadBIFF8_TextRotation; procedure TestWriteReadBIFF8_TextRotation;
procedure TestWriteReadBIFF8_WordWrap; procedure TestWriteReadBIFF8_WordWrap;
procedure TestWriteReadNumberFormats;
// Repeat with date/times
procedure TestWriteReadDateTimeFormats;
end; end;
implementation implementation
@ -131,9 +138,9 @@ begin
SollNumberFormats[3] := nfFixedTh; SollNumberDecimals[3] := 0; SollNumberFormats[3] := nfFixedTh; SollNumberDecimals[3] := 0;
SollNumberFormats[4] := nfFixedTh; SollNumberDecimals[4] := 2; SollNumberFormats[4] := nfFixedTh; SollNumberDecimals[4] := 2;
SollNumberFormats[5] := nfExp; SollNumberDecimals[5] := 2; SollNumberFormats[5] := nfExp; SollNumberDecimals[5] := 2;
SollNumberFormats[6] := nfSci; SollNumberDecimals[6] := 1; SollNumberFormats[6] := nfPercentage; SollNumberDecimals[6] := 0;
SollNumberFormats[7] := nfPercentage; SollNumberDecimals[7] := 0; SollNumberFormats[7] := nfPercentage; SollNumberDecimals[7] := 2;
SollNumberFormats[8] := nfPercentage; SollNumberDecimals[8] := 2; SollNumberFormats[8] := nfSci; SollNumberDecimals[8] := 1;
for i:=Low(SollNumbers) to High(SollNumbers) do begin for i:=Low(SollNumbers) to High(SollNumbers) do begin
SollNumberStrings[i, 0] := FloatToStr(SollNumbers[i]); SollNumberStrings[i, 0] := FloatToStr(SollNumbers[i]);
@ -142,9 +149,9 @@ begin
SollNumberStrings[i, 3] := FormatFloat('#,##0', SollNumbers[i]); SollNumberStrings[i, 3] := FormatFloat('#,##0', SollNumbers[i]);
SollNumberStrings[i, 4] := FormatFloat('#,##0.00', SollNumbers[i]); SollNumberStrings[i, 4] := FormatFloat('#,##0.00', SollNumbers[i]);
SollNumberStrings[i, 5] := FormatFloat('0.00E+00', SollNumbers[i]); SollNumberStrings[i, 5] := FormatFloat('0.00E+00', SollNumbers[i]);
SollNumberStrings[i, 6] := SciFloat(SollNumbers[i], 1); SollNumberStrings[i, 6] := FormatFloat('0', SollNumbers[i]*100) + '%';
SollNumberStrings[i, 7] := FormatFloat('0', SollNumbers[i]*100) + '%'; SollNumberStrings[i, 7] := FormatFloat('0.00', SollNumbers[i]*100) + '%';
SollNumberStrings[i, 8] := FormatFloat('0.00', SollNumbers[i]*100) + '%'; SollNumberStrings[i, 8] := SciFloat(SollNumbers[i], 1);
end; end;
// Date/time values // Date/time values
@ -229,7 +236,7 @@ begin
inherited TearDown; inherited TearDown;
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteReadNumberFormats; procedure TSpreadWriteReadFormatTests.TestWriteReadNumberFormats(AFormat: TsSpreadsheetFormat);
var var
MyWorksheet: TsWorksheet; MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook; MyWorkbook: TsWorkbook;
@ -249,19 +256,26 @@ begin
for Col := ord(Low(SollNumberFormats)) to ord(High(SollNumberFormats)) do begin for Col := ord(Low(SollNumberFormats)) to ord(High(SollNumberFormats)) do begin
MyWorksheet.WriteNumber(Row, Col, SollNumbers[Row], SollNumberFormats[Col], SollNumberDecimals[Col]); MyWorksheet.WriteNumber(Row, Col, SollNumbers[Row], SollNumberFormats[Col], SollNumberDecimals[Col]);
ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col); ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col);
if (AFormat=sfExcel2) and (SollNumberFormats[Col] = nfSci) then
Continue; // BIFF2 does not support nfSci -> ignore
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; end;
MyWorkBook.WriteToFile(TempFile,sfExcel8,true); MyWorkBook.WriteToFile(TempFile, AFormat, true);
MyWorkbook.Free; MyWorkbook.Free;
// Open the spreadsheet, as biff8 // Open the spreadsheet, as biff8
MyWorkbook := TsWorkbook.Create; MyWorkbook := TsWorkbook.Create;
MyWorkbook.ReadFromFile(TempFile, sfExcel8); MyWorkbook.ReadFromFile(TempFile, AFormat);
MyWorksheet:=GetWorksheetByName(MyWorkBook, FmtNumbersSheet); if AFormat = sfExcel2 then
MyWorksheet := MyWorkbook.GetFirstWorksheet
else
MyWorksheet := GetWorksheetByName(MyWorkBook, FmtNumbersSheet);
if MyWorksheet=nil then if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet'); fail('Error in test code. Failed to get named worksheet');
for Row := Low(SollNumbers) to High(SollNumbers) do for Row := Low(SollNumbers) to High(SollNumbers) do
for Col := Low(SollNumberFormats) to High(SollNumberFormats) do begin for Col := Low(SollNumberFormats) to High(SollNumberFormats) do begin
if (AFormat=sfExcel2) and (SollNumberFormats[Col] = nfSci) then
Continue; // BIFF2 does not support nfSci --> ignore
ActualString := MyWorkSheet.ReadAsUTF8Text(Row,Col); 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; end;
@ -272,7 +286,22 @@ begin
DeleteFile(TempFile); DeleteFile(TempFile);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteReadDateTimeFormats; procedure TSpreadWriteReadFormatTests.TestWriteReadBIFF2_NumberFormats;
begin
TestWriteReadNumberFormats(sfExcel2);
end;
procedure TSpreadWriteReadFormatTests.TestWriteReadBIFF5_NumberFormats;
begin
TestWriteReadNumberFormats(sfExcel5);
end;
procedure TSpreadWriteReadFormatTests.TestWriteReadBIFF8_NumberFormats;
begin
TestWriteReadNumberFormats(sfExcel8);
end;
procedure TSpreadWriteReadFormatTests.TestWriteReadDateTimeFormats(AFormat: TsSpreadsheetFormat);
var var
MyWorksheet: TsWorksheet; MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook; MyWorkbook: TsWorkbook;
@ -286,22 +315,29 @@ begin
MyWorksheet := MyWorkbook.AddWorksheet(FmtDateTimesSheet); MyWorksheet := MyWorkbook.AddWorksheet(FmtDateTimesSheet);
for Row := Low(SollDateTimes) to High(SollDateTimes) do for Row := Low(SollDateTimes) to High(SollDateTimes) do
for Col := Low(SollDateTimeFormats) to High(SollDateTimeFormats) do begin for Col := Low(SollDateTimeFormats) to High(SollDateTimeFormats) do begin
if (AFormat = sfExcel2) and (SollDateTimeFormats[Col] in [nfFmtDateTime, nfTimeInterval]) then
Continue; // The formats nfFmtDateTime and nfTimeInterval are not supported by BIFF2
MyWorksheet.WriteDateTime(Row, Col, SollDateTimes[Row], SollDateTimeFormats[Col], SollDateTimeFormatStrings[Col]); MyWorksheet.WriteDateTime(Row, Col, SollDateTimes[Row], SollDateTimeFormats[Col], SollDateTimeFormatStrings[Col]);
ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col); ActualString := MyWorksheet.ReadAsUTF8Text(Row, Col);
CheckEquals(SollDateTimeStrings[Row, Col], ActualString, 'Test unsaved string mismatch cell ' + CellNotation(MyWorksheet,Row,Col)); CheckEquals(SollDateTimeStrings[Row, Col], ActualString, 'Test unsaved string mismatch cell ' + CellNotation(MyWorksheet,Row,Col));
end; end;
MyWorkBook.WriteToFile(TempFile,sfExcel8,true); MyWorkBook.WriteToFile(TempFile, AFormat, true);
MyWorkbook.Free; MyWorkbook.Free;
// Open the spreadsheet, as biff8 // Open the spreadsheet, as biff8
MyWorkbook := TsWorkbook.Create; MyWorkbook := TsWorkbook.Create;
MyWorkbook.ReadFromFile(TempFile, sfExcel8); MyWorkbook.ReadFromFile(TempFile, AFormat);
MyWorksheet := GetWorksheetByName(MyWorkbook, FmtDateTimesSheet); if AFormat = sfExcel2 then
MyWorksheet := MyWorkbook.GetFirstWorksheet
else
MyWorksheet := GetWorksheetByName(MyWorkbook, FmtDateTimesSheet);
if MyWorksheet = nil then if MyWorksheet = nil then
fail('Error in test code. Failed to get named worksheet'); fail('Error in test code. Failed to get named worksheet');
for Row := Low(SollDateTimes) to High(SollDateTimes) do for Row := Low(SollDateTimes) to High(SollDateTimes) do
for Col := Low(SollDateTimeFormats) to High(SollDateTimeFormats) do begin for Col := Low(SollDateTimeFormats) to High(SollDateTimeFormats) do begin
ActualString := myWorksheet.ReadAsUTF8Text(Row,Col); if (AFormat = sfExcel2) and (SollDateTimeFormats[Col] in [nfFmtDateTime, nfTimeInterval]) then
Continue; // The formats nfFmtDateTime and nfTimeInterval are not supported by BIFF2
ActualString := MyWorksheet.ReadAsUTF8Text(Row,Col);
CheckEquals(SollDateTimeStrings[Row, Col], ActualString, 'Test saved string mismatch cell '+CellNotation(MyWorksheet,Row,Col)); CheckEquals(SollDateTimeStrings[Row, Col], ActualString, 'Test saved string mismatch cell '+CellNotation(MyWorksheet,Row,Col));
end; end;
@ -311,6 +347,21 @@ begin
DeleteFile(TempFile); DeleteFile(TempFile);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteReadBIFF2_DateTimeFormats;
begin
TestWriteReadDateTimeFormats(sfExcel2);
end;
procedure TSpreadWriteReadFormatTests.TestWriteReadBIFF5_DateTimeFormats;
begin
TestWriteReadDateTimeFormats(sfExcel5);
end;
procedure TSpreadWriteReadFormatTests.TestWriteReadBIFF8_DateTimeFormats;
begin
TestWriteReadDateTimeFormats(sfExcel8);
end;
procedure TSpreadWriteReadFormatTests.TestWriteReadAlignment(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteReadAlignment(AFormat: TsSpreadsheetFormat);
const const
CELLTEXT = 'This is a text.'; CELLTEXT = 'This is a text.';