fpspreadsheet: Test cases for merged cells in xls, xlsx, ods files. Passed.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3557 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz
2014-09-12 19:26:31 +00:00
parent b8cef77420
commit 4809b84f2f
3 changed files with 226 additions and 65 deletions

View File

@ -51,23 +51,25 @@ type
procedure TearDown; override; procedure TearDown; override;
// Test alignments // Test alignments
procedure TestWriteReadAlignment(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_Alignment(AFormat: TsSpreadsheetFormat);
// Test border // Test border
procedure TestWriteReadBorder(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_Border(AFormat: TsSpreadsheetFormat);
// Test border styles // Test border styles
procedure TestWriteReadBorderStyles(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_BorderStyles(AFormat: TsSpreadsheetFormat);
// Test column widths // Test column widths
procedure TestWriteReadColWidths(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_ColWidths(AFormat: TsSpreadsheetFormat);
// Test row heights // Test row heights
procedure TestWriteReadRowHeights(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_RowHeights(AFormat: TsSpreadsheetFormat);
// Test text rotation // Test text rotation
procedure TestWriteReadTextRotation(AFormat:TsSpreadsheetFormat); procedure TestWriteRead_TextRotation(AFormat:TsSpreadsheetFormat);
// Test word wrapping // Test word wrapping
procedure TestWriteReadWordWrap(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_WordWrap(AFormat: TsSpreadsheetFormat);
// Test number formats // Test number formats
procedure TestWriteReadNumberFormats(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_NumberFormats(AFormat: TsSpreadsheetFormat);
// Repeat with date/times // Repeat with date/times
procedure TestWriteReadDateTimeFormats(AFormat: TsSpreadsheetFormat); procedure TestWriteRead_DateTimeFormats(AFormat: TsSpreadsheetFormat);
// Test merged cells
procedure TestWriteRead_MergedCells(AFormat: TsSpreadsheetFormat);
published published
// Writes out numbers & reads back. // Writes out numbers & reads back.
@ -79,6 +81,7 @@ type
procedure TestWriteRead_BIFF2_ColWidths; procedure TestWriteRead_BIFF2_ColWidths;
procedure TestWriteRead_BIFF2_RowHeights; procedure TestWriteRead_BIFF2_RowHeights;
procedure TestWriteRead_BIFF2_DateTimeFormats; procedure TestWriteRead_BIFF2_DateTimeFormats;
procedure TestWriteRead_BIFF2_MergedCells;
procedure TestWriteRead_BIFF2_NumberFormats; procedure TestWriteRead_BIFF2_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
@ -92,6 +95,7 @@ type
procedure TestWriteRead_BIFF5_ColWidths; procedure TestWriteRead_BIFF5_ColWidths;
procedure TestWriteRead_BIFF5_RowHeights; procedure TestWriteRead_BIFF5_RowHeights;
procedure TestWriteRead_BIFF5_DateTimeFormats; procedure TestWriteRead_BIFF5_DateTimeFormats;
procedure TestWriteRead_BIFF5_MergedCells;
procedure TestWriteRead_BIFF5_NumberFormats; procedure TestWriteRead_BIFF5_NumberFormats;
procedure TestWriteRead_BIFF5_TextRotation; procedure TestWriteRead_BIFF5_TextRotation;
procedure TestWriteRead_BIFF5_WordWrap; procedure TestWriteRead_BIFF5_WordWrap;
@ -103,6 +107,7 @@ type
procedure TestWriteRead_BIFF8_ColWidths; procedure TestWriteRead_BIFF8_ColWidths;
procedure TestWriteRead_BIFF8_RowHeights; procedure TestWriteRead_BIFF8_RowHeights;
procedure TestWriteRead_BIFF8_DateTimeFormats; procedure TestWriteRead_BIFF8_DateTimeFormats;
procedure TestWriteRead_BIFF8_MergedCells;
procedure TestWriteRead_BIFF8_NumberFormats; procedure TestWriteRead_BIFF8_NumberFormats;
procedure TestWriteRead_BIFF8_TextRotation; procedure TestWriteRead_BIFF8_TextRotation;
procedure TestWriteRead_BIFF8_WordWrap; procedure TestWriteRead_BIFF8_WordWrap;
@ -114,6 +119,7 @@ type
procedure TestWriteRead_ODS_ColWidths; procedure TestWriteRead_ODS_ColWidths;
procedure TestWriteRead_ODS_RowHeights; procedure TestWriteRead_ODS_RowHeights;
procedure TestWriteRead_ODS_DateTimeFormats; procedure TestWriteRead_ODS_DateTimeFormats;
procedure TestWriteRead_ODS_MergedCells;
procedure TestWriteRead_ODS_NumberFormats; procedure TestWriteRead_ODS_NumberFormats;
procedure TestWriteRead_ODS_TextRotation; procedure TestWriteRead_ODS_TextRotation;
procedure TestWriteRead_ODS_WordWrap; procedure TestWriteRead_ODS_WordWrap;
@ -125,6 +131,7 @@ type
procedure TestWriteRead_OOXML_ColWidths; procedure TestWriteRead_OOXML_ColWidths;
procedure TestWriteRead_OOXML_RowHeights; procedure TestWriteRead_OOXML_RowHeights;
procedure TestWriteRead_OOXML_DateTimeFormats; procedure TestWriteRead_OOXML_DateTimeFormats;
procedure TestWriteRead_OOXML_MergedCells;
procedure TestWriteRead_OOXML_NumberFormats; procedure TestWriteRead_OOXML_NumberFormats;
procedure TestWriteRead_OOXML_TextRotation; procedure TestWriteRead_OOXML_TextRotation;
procedure TestWriteRead_OOXML_WordWrap; procedure TestWriteRead_OOXML_WordWrap;
@ -290,7 +297,7 @@ end;
{ --- Number format tests --- } { --- Number format tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadNumberFormats(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_NumberFormats(AFormat: TsSpreadsheetFormat);
var var
MyWorksheet: TsWorksheet; MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook; MyWorkbook: TsWorkbook;
@ -345,33 +352,33 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_NumberFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_NumberFormats;
begin begin
TestWriteReadNumberFormats(sfExcel2); TestWriteRead_NumberFormats(sfExcel2);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_NumberFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_NumberFormats;
begin begin
TestWriteReadNumberFormats(sfExcel5); TestWriteRead_NumberFormats(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_NumberFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_NumberFormats;
begin begin
TestWriteReadNumberFormats(sfExcel8); TestWriteRead_NumberFormats(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_NumberFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_NumberFormats;
begin begin
TestWriteReadNumberFormats(sfOpenDocument); TestWriteRead_NumberFormats(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_NumberFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_NumberFormats;
begin begin
TestWriteReadNumberFormats(sfOOXML); TestWriteRead_NumberFormats(sfOOXML);
end; end;
{ --- Date/time formats --- } { --- Date/time formats --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadDateTimeFormats(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_DateTimeFormats(AFormat: TsSpreadsheetFormat);
var var
MyWorksheet: TsWorksheet; MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook; MyWorkbook: TsWorkbook;
@ -432,32 +439,32 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_DateTimeFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_DateTimeFormats;
begin begin
TestWriteReadDateTimeFormats(sfExcel2); TestWriteRead_DateTimeFormats(sfExcel2);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_DateTimeFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_DateTimeFormats;
begin begin
TestWriteReadDateTimeFormats(sfExcel5); TestWriteRead_DateTimeFormats(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_DateTimeFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_DateTimeFormats;
begin begin
TestWriteReadDateTimeFormats(sfExcel8); TestWriteRead_DateTimeFormats(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_DateTimeFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_DateTimeFormats;
begin begin
TestWriteReadDateTimeFormats(sfOpenDocument); TestWriteRead_DateTimeFormats(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_DateTimeFormats; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_DateTimeFormats;
begin begin
TestWriteReadDateTimeFormats(sfOOXML); TestWriteRead_DateTimeFormats(sfOOXML);
end; end;
{ --- Alignment tests --- } { --- Alignment tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadAlignment(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_Alignment(AFormat: TsSpreadsheetFormat);
const const
HORALIGN_TEXT: Array[TsHorAlignment] of String = ('haDefault', 'haLeft', 'haCenter', 'haRight'); HORALIGN_TEXT: Array[TsHorAlignment] of String = ('haDefault', 'haLeft', 'haCenter', 'haRight');
VERTALIGN_TEXT: Array[TsVertAlignment] of String = ('vaDefault', 'vaTop', 'vaCenter', 'vaBottom'); VERTALIGN_TEXT: Array[TsVertAlignment] of String = ('vaDefault', 'vaTop', 'vaCenter', 'vaBottom');
@ -582,33 +589,33 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_Alignment; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_Alignment;
begin begin
TestWriteReadAlignment(sfExcel2); TestWriteRead_Alignment(sfExcel2);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_Alignment; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_Alignment;
begin begin
TestWriteReadAlignment(sfExcel5); TestWriteRead_Alignment(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_Alignment; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_Alignment;
begin begin
TestWriteReadAlignment(sfExcel8); TestWriteRead_Alignment(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_Alignment; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_Alignment;
begin begin
TestWriteReadAlignment(sfOpenDocument); TestWriteRead_Alignment(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_Alignment; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_Alignment;
begin begin
TestWriteReadAlignment(sfOOXML); TestWriteRead_Alignment(sfOOXML);
end; end;
{ --- Border on/off tests --- } { --- Border on/off tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadBorder(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_Border(AFormat: TsSpreadsheetFormat);
const const
row = 0; row = 0;
var var
@ -686,33 +693,33 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_Border; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_Border;
begin begin
TestWriteReadBorder(sfExcel2); TestWriteRead_Border(sfExcel2);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_Border; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_Border;
begin begin
TestWriteReadBorder(sfExcel5); TestWriteRead_Border(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_Border; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_Border;
begin begin
TestWriteReadBorder(sfExcel8); TestWriteRead_Border(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_Border; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_Border;
begin begin
TestWriteReadBorder(sfOpenDocument); TestWriteRead_Border(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_Border; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_Border;
begin begin
TestWriteReadBorder(sfOOXML); TestWriteRead_Border(sfOOXML);
end; end;
{ --- BorderStyle tests --- } { --- BorderStyle tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadBorderStyles(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_BorderStyles(AFormat: TsSpreadsheetFormat);
{ This test paints 10x10 cells with all borders, each separated by an empty { This test paints 10x10 cells with all borders, each separated by an empty
column and an empty row. The border style varies from border to border column and an empty row. The border style varies from border to border
according to the line styles defined in SollBorderStyles. At first, all border according to the line styles defined in SollBorderStyles. At first, all border
@ -837,28 +844,28 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_BorderStyles; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_BorderStyles;
begin begin
TestWriteReadBorderStyles(sfExcel5); TestWriteRead_BorderStyles(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_BorderStyles; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_BorderStyles;
begin begin
TestWriteReadBorderStyles(sfExcel8); TestWriteRead_BorderStyles(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_BorderStyles; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_BorderStyles;
begin begin
TestWriteReadBorderStyles(sfOpenDocument); TestWriteRead_BorderStyles(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_BorderStyles; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_BorderStyles;
begin begin
TestWriteReadBorderStyles(sfOOXML); TestWriteRead_BorderStyles(sfOOXML);
end; end;
{ --- Column widths tests --- } { --- Column widths tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadColWidths(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_ColWidths(AFormat: TsSpreadsheetFormat);
var var
MyWorksheet: TsWorksheet; MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook; MyWorkbook: TsWorkbook;
@ -916,33 +923,33 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_ColWidths; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_ColWidths;
begin begin
TestWriteReadColWidths(sfExcel2); TestWriteRead_ColWidths(sfExcel2);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_ColWidths; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_ColWidths;
begin begin
TestWriteReadColWidths(sfExcel5); TestWriteRead_ColWidths(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_ColWidths; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_ColWidths;
begin begin
TestWriteReadColWidths(sfExcel8); TestWriteRead_ColWidths(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_ColWidths; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_ColWidths;
begin begin
TestWriteReadColWidths(sfOpenDocument); TestWriteRead_ColWidths(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_ColWidths; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_ColWidths;
begin begin
TestWriteReadColWidths(sfOOXML); TestWriteRead_ColWidths(sfOOXML);
end; end;
{ --- Row height tests --- } { --- Row height tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadRowHeights(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_RowHeights(AFormat: TsSpreadsheetFormat);
var var
MyWorksheet: TsWorksheet; MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook; MyWorkbook: TsWorkbook;
@ -993,33 +1000,33 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_RowHeights; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_RowHeights;
begin begin
TestWriteReadRowHeights(sfExcel2); TestWriteRead_RowHeights(sfExcel2);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_RowHeights; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_RowHeights;
begin begin
TestWriteReadRowHeights(sfExcel5); TestWriteRead_RowHeights(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_RowHeights; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_RowHeights;
begin begin
TestWriteReadRowHeights(sfExcel8); TestWriteRead_RowHeights(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_RowHeights; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_RowHeights;
begin begin
TestWriteReadRowHeights(sfOpenDocument); TestWriteRead_RowHeights(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_RowHeights; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_RowHeights;
begin begin
TestWriteReadRowHeights(sfOOXML); TestWriteRead_RowHeights(sfOOXML);
end; end;
{ --- Text rotation tests --- } { --- Text rotation tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadTextRotation(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_TextRotation(AFormat: TsSpreadsheetFormat);
const const
col = 0; col = 0;
var var
@ -1083,28 +1090,28 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_TextRotation; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_TextRotation;
begin begin
TestWriteReadTextRotation(sfExcel5); TestWriteRead_TextRotation(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_TextRotation; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_TextRotation;
begin begin
TestWriteReadTextRotation(sfExcel8); TestWriteRead_TextRotation(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_TextRotation; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_TextRotation;
begin begin
TestWriteReadTextRotation(sfOpenDocument); TestWriteRead_TextRotation(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_TextRotation; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_TextRotation;
begin begin
TestWriteReadTextRotation(sfOOXML); TestWriteRead_TextRotation(sfOOXML);
end; end;
{ --- Wordwrap tests --- } { --- Wordwrap tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteReadWordWrap(AFormat: TsSpreadsheetFormat); procedure TSpreadWriteReadFormatTests.TestWriteRead_WordWrap(AFormat: TsSpreadsheetFormat);
const const
LONGTEXT = 'This is a very, very, very, very long text.'; LONGTEXT = 'This is a very, very, very, very long text.';
var var
@ -1168,25 +1175,180 @@ end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_Wordwrap; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_Wordwrap;
begin begin
TestWriteReadWordwrap(sfExcel5); TestWriteRead_Wordwrap(sfExcel5);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_Wordwrap; procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_Wordwrap;
begin begin
TestWriteReadWordwrap(sfExcel8); TestWriteRead_Wordwrap(sfExcel8);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_Wordwrap; procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_Wordwrap;
begin begin
TestWriteReadWordwrap(sfOpenDocument); TestWriteRead_Wordwrap(sfOpenDocument);
end; end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_Wordwrap; procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_Wordwrap;
begin begin
TestWriteReadWordwrap(sfOOXML); TestWriteRead_Wordwrap(sfOOXML);
end; end;
{ --- Merged tests --- }
procedure TSpreadWriteReadFormatTests.TestWriteRead_MergedCells(AFormat: TsSpreadsheetFormat);
const
TEST_RANGES: Array[0..3] of string = ('A1:B1', 'E1:G5', 'H1:H5', 'L2:M4');
SHEETNAME1 = 'Sheet1';
SHEETNAME2 = 'Sheet2';
SHEETNAME3 = 'Sheet3';
CELL_TEXT = 'Lazarus';
var
MyWorksheet: TsWorksheet;
MyWorkbook: TsWorkbook;
cell: PCell;
TempFile: string; //write xls/xml to this file and read back from it
r1, c1, r2, c2: Cardinal;
r, c: Cardinal;
actual, expected: String;
i: Integer;
begin
MyWorkbook := TsWorkbook.Create;
try
// 1st sheet: merged ranges with text
MyWorksheet:= MyWorkBook.AddWorksheet(SHEETNAME1);
for i:=0 to High(TEST_RANGES) do
begin
ParseCellRangeString(TEST_RANGES[i], r1, c1, r2, c2);
Myworksheet.WriteUTF8Text(r1, c1, CELL_TEXT);
Myworksheet.MergeCells(r1, c1, r2, c2);
end;
// 2nd sheet: merged ranges, empty
Myworksheet := MyWorkbook.AddWorksheet(SHEETNAME2);
for i:=0 to High(TEST_RANGES) do
begin
ParseCellRangeString(TEST_RANGES[i], r1, c1, r2, c2);
Myworksheet.MergeCells(r1, c1, r2, c2);
end;
// 3rd sheet: merged ranges, with text, then unmerge all
MyWorksheet:= MyWorkBook.AddWorksheet(SHEETNAME3);
for i:=0 to High(TEST_RANGES) do
begin
ParseCellRangeString(TEST_RANGES[i], r1, c1, r2, c2);
Myworksheet.WriteUTF8Text(r1, c1, CELL_TEXT);
Myworksheet.MergeCells(r1, c1, r2, c2);
Myworksheet.UnmergeCells(r1, c1);
end;
TempFile:=NewTempFile;
MyWorkBook.WriteToFile(TempFile, AFormat, true);
finally
MyWorkbook.Free;
end;
// Open the spreadsheet
MyWorkbook := TsWorkbook.Create;
try
MyWorkbook.ReadFromFile(TempFile, AFormat);
// 1st sheet: merged cells with text
if AFormat = sfExcel2 then
MyWorksheet := MyWorkbook.GetFirstWorksheet
else
MyWorksheet := GetWorksheetByName(MyWorkBook, SHEETNAME1);
if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet ' + SHEETNAME1);
for i:=0 to High(TEST_RANGES) do begin
ParseCellRangeString(TEST_RANGES[i], r1, c1, r2, c2);
cell := MyWorksheet.FindCell(r1, c1);
if MyWorksheet.IsMergeBase(cell) then begin
MyWorksheet.FindMergedRange(cell, r1, c1, r2, c2);
actual := GetCellRangeString(r1, c1, r2, c2);
expected := TEST_RANGES[i];
if AFormat in [sfExcel2, sfExcel5] then
CheckNotEquals(expected, actual, 'No merged cells expected, ' + expected)
else
CheckEquals(expected, actual, 'Merged cell range mismatch, ' + expected);
end else
if not (AFormat in [sfExcel2, sfExcel5]) then
fail('Unmerged cell found, ' + CellNotation(MyWorksheet, r1, c1));
CheckEquals(CELL_TEXT, MyWorksheet.ReadAsUTF8Text(cell),
'Merged cell content mismatch, cell '+ CellNotation(MyWorksheet, r1, c1));
end;
if AFormat = sfExcel2 then
exit; // only 1 page in Excel2
// 2nd sheet: merged empty cells
MyWorksheet := GetWorksheetByName(MyWorkBook, SHEETNAME2);
if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet' + SHEETNAME2);
for i:=0 to High(TEST_RANGES) do begin
ParseCellRangeString(TEST_RANGES[i], r1, c1, r2, c2);
cell := MyWorksheet.FindCell(r1, c1);
if MyWorksheet.IsMergeBase(cell) then begin
MyWorksheet.FindMergedRange(cell, r1, c1, r2, c2);
actual := GetCellRangeString(r1, c1, r2, c2);
expected := TEST_RANGES[i];
if AFormat = sfExcel5 then
CheckNotEquals(expected, actual, 'Merged cells found in Excel5, ' + expected)
else
CheckEquals(expected, actual, 'Merged cell range mismatch, ' + expected);
end else
if AFormat <> sfExcel5 then
fail('Unmerged cell found, ' + CellNotation(MyWorksheet, r1, c1));
CheckEquals('', MyWorksheet.ReadAsUTF8Text(cell),
'Merged cell content mismatch, cell '+CellNotation(MyWorksheet, r1, c1));
end;
// 3rd sheet: merged & unmerged cells
MyWorksheet := GetWorksheetByName(MyWorkBook, SHEETNAME3);
if MyWorksheet=nil then
fail('Error in test code. Failed to get named worksheet' + SHEETNAME3);
for i:=0 to High(TEST_RANGES) do begin
ParseCellRangeString(TEST_RANGES[i], r1, c1, r2, c2);
cell := MyWorksheet.FindCell(r1, c1);
if MyWorksheet.IsMergeBase(cell) then
fail('Unmerged cell expected, cell ' + CellNotation(MyWorksheet, r1, c1));
CheckEquals(CELL_TEXT, MyWorksheet.ReadAsUTF8Text(cell),
'Merged/unmerged cell content mismatch, cell '+CellNotation(MyWorksheet, r1, c1));
end;
finally
MyWorkbook.Free;
DeleteFile(TempFile);
end;
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF2_MergedCells;
begin
TestWriteRead_MergedCells(sfExcel2);
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF5_MergedCells;
begin
TestWriteRead_MergedCells(sfExcel5);
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_BIFF8_MergedCells;
begin
TestWriteRead_MergedCells(sfExcel8);
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_ODS_MergedCells;
begin
TestWriteRead_MergedCells(sfOpenDocument);
end;
procedure TSpreadWriteReadFormatTests.TestWriteRead_OOXML_MergedCells;
begin
TestWriteRead_MergedCells(sfOOXML);
end;
initialization initialization
RegisterTest(TSpreadWriteReadFormatTests); RegisterTest(TSpreadWriteReadFormatTests);
InitSollFmtData; InitSollFmtData;

View File

@ -11,6 +11,7 @@ uses
procedure WriteRPNFormulaSamples(Worksheet: TsWorksheet; procedure WriteRPNFormulaSamples(Worksheet: TsWorksheet;
AFormat: TsSpreadsheetFormat; IncludeErrors: Boolean); AFormat: TsSpreadsheetFormat; IncludeErrors: Boolean);
implementation implementation
uses uses

View File

@ -48,7 +48,6 @@
<Unit1> <Unit1>
<Filename Value="datetests.pas"/> <Filename Value="datetests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="datetests"/>
</Unit1> </Unit1>
<Unit2> <Unit2>
<Filename Value="stringtests.pas"/> <Filename Value="stringtests.pas"/>
@ -57,6 +56,7 @@
<Unit3> <Unit3>
<Filename Value="numberstests.pas"/> <Filename Value="numberstests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="numberstests"/>
</Unit3> </Unit3>
<Unit4> <Unit4>
<Filename Value="manualtests.pas"/> <Filename Value="manualtests.pas"/>
@ -66,20 +66,20 @@
<Unit5> <Unit5>
<Filename Value="testsutility.pas"/> <Filename Value="testsutility.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="testsutility"/>
</Unit5> </Unit5>
<Unit6> <Unit6>
<Filename Value="internaltests.pas"/> <Filename Value="internaltests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="internaltests"/>
</Unit6> </Unit6>
<Unit7> <Unit7>
<Filename Value="formattests.pas"/> <Filename Value="formattests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="formattests"/>
</Unit7> </Unit7>
<Unit8> <Unit8>
<Filename Value="colortests.pas"/> <Filename Value="colortests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="colortests"/>
</Unit8> </Unit8>
<Unit9> <Unit9>
<Filename Value="fonttests.pas"/> <Filename Value="fonttests.pas"/>
@ -110,12 +110,10 @@
<Unit15> <Unit15>
<Filename Value="errortests.pas"/> <Filename Value="errortests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="errortests"/>
</Unit15> </Unit15>
<Unit16> <Unit16>
<Filename Value="virtualmodetests.pas"/> <Filename Value="virtualmodetests.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="virtualmodetests"/>
</Unit16> </Unit16>
</Units> </Units>
</ProjectOptions> </ProjectOptions>