fpspreadsheet: Add unit tests for some more page layout properties (Fit width/height to pages, start page number) (completing the first 1000 test cases...)

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@4113 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
wp_xxyyzz 2015-05-04 17:38:56 +00:00
parent 607585d146
commit 4e420fa876
5 changed files with 328 additions and 27 deletions

View File

@ -943,7 +943,7 @@ begin
if (s <> '') then
begin
if s[Length(s)] = '%' then Delete(s, Length(s), 1);
data.PageLayout.ScalingFactor := StrToFloat(s, FPointSeparatorSettings);
data.PageLayout.ScalingFactor := round(StrToFloat(s, FPointSeparatorSettings));
Exclude(data.PageLayout.Options, poFitPages);
end;
@ -3169,7 +3169,7 @@ procedure TsSpreadOpenDocWriter.WriteAutomaticStyles(AStream: TStream);
if APageLayout.FitHeightToPages > 0 then
pageLayoutStr := pageLayoutStr + 'style:scale-to-Y="' + IntToStr(APageLayout.FitHeightToPages) + '" ';
end else
pageLayoutStr := pageLayoutStr + 'style:scale-to="' + IntToStr(round(APageLayout.ScalingFactor)) + '%" ';
pageLayoutStr := pageLayoutStr + 'style:scale-to="' + IntToStr(APageLayout.ScalingFactor) + '%" ';
options := 'charts drawings objects zero-values';
if poPrintGridLines in APageLayout.Options then

View File

@ -688,7 +688,7 @@ type
HeaderMargin: Double;
FooterMargin: Double;
StartPageNumber: Integer;
ScalingFactor: Double; // in percent
ScalingFactor: Integer; // in percent
FitWidthToPages: Integer;
FitHeightToPages: Integer;
Copies: Integer;

View File

@ -71,6 +71,18 @@ type
procedure TestWriteRead_BIFF5_ScalingFactor_2sheets;
procedure TestWriteRead_BIFF5_ScalingFactor_3sheets;
procedure TestWriteRead_BIFF5_WidthToPages_1sheet;
procedure TestWriteRead_BIFF5_WidthToPages_2sheets;
procedure TestWriteRead_BIFF5_WidthToPages_3sheets;
procedure TestWriteRead_BIFF5_HeightToPages_1sheet;
procedure TestWriteRead_BIFF5_HeightToPages_2sheets;
procedure TestWriteRead_BIFF5_HeightToPages_3sheets;
procedure TestWriteRead_BIFF5_PageNumber_1sheet;
procedure TestWriteRead_BIFF5_PageNumber_2sheets;
procedure TestWriteRead_BIFF5_PageNumber_3sheets;
{ BIFF8 page layout tests }
procedure TestWriteRead_BIFF8_PageMargins_1sheet_0;
procedure TestWriteRead_BIFF8_PageMargins_1sheet_1;
@ -97,6 +109,18 @@ type
procedure TestWriteRead_BIFF8_ScalingFactor_2sheets;
procedure TestWriteRead_BIFF8_ScalingFactor_3sheets;
procedure TestWriteRead_BIFF8_WidthToPages_1sheet;
procedure TestWriteRead_BIFF8_WidthToPages_2sheets;
procedure TestWriteRead_BIFF8_WidthToPages_3sheets;
procedure TestWriteRead_BIFF8_HeightToPages_1sheet;
procedure TestWriteRead_BIFF8_HeightToPages_2sheets;
procedure TestWriteRead_BIFF8_HeightToPages_3sheets;
procedure TestWriteRead_BIFF8_PageNumber_1sheet;
procedure TestWriteRead_BIFF8_PageNumber_2sheets;
procedure TestWriteRead_BIFF8_PageNumber_3sheets;
{ OOXML page layout tests }
procedure TestWriteRead_OOXML_PageMargins_1sheet_0;
procedure TestWriteRead_OOXML_PageMargins_1sheet_1;
@ -123,6 +147,18 @@ type
procedure TestWriteRead_OOXML_ScalingFactor_2sheets;
procedure TestWriteRead_OOXML_ScalingFactor_3sheets;
procedure TestWriteRead_OOXML_WidthToPages_1sheet;
procedure TestWriteRead_OOXML_WidthToPages_2sheets;
procedure TestWriteRead_OOXML_WidthToPages_3sheets;
procedure TestWriteRead_OOXML_HeightToPages_1sheet;
procedure TestWriteRead_OOXML_HeightToPages_2sheets;
procedure TestWriteRead_OOXML_HeightToPages_3sheets;
procedure TestWriteRead_OOXML_PageNumber_1sheet;
procedure TestWriteRead_OOXML_PageNumber_2sheets;
procedure TestWriteRead_OOXML_PageNumber_3sheets;
{ OpenDocument page layout tests }
procedure TestWriteRead_ODS_PageMargins_1sheet_0;
procedure TestWriteRead_ODS_PageMargins_1sheet_1;
@ -149,6 +185,18 @@ type
procedure TestWriteRead_ODS_ScalingFactor_2sheets;
procedure TestWriteRead_ODS_ScalingFactor_3sheets;
procedure TestWriteRead_ODS_WidthToPages_1sheet;
procedure TestWriteRead_ODS_WidthToPages_2sheets;
procedure TestWriteRead_ODS_WidthToPages_3sheets;
procedure TestWriteRead_ODS_HeightToPages_1sheet;
procedure TestWriteRead_ODS_HeightToPages_2sheets;
procedure TestWriteRead_ODS_HeightToPages_3sheets;
procedure TestWriteRead_ODS_PageNumber_1sheet;
procedure TestWriteRead_ODS_PageNumber_2sheets;
procedure TestWriteRead_ODS_PageNumber_3sheets;
end;
implementation
@ -263,6 +311,9 @@ end;
0 - Landscape page orientation for sheets 0 und 2, sheet 1 is portrait
1 - Paper size: sheet 1 "Letter" (8.5" x 11"), sheets 0 and 2 "A5" (148 mm x 210 mm)
2 - Scaling factor: sheet 1 50%, sheet 2 200%, sheet 3 100%
3 - Scale n pages to width: sheet 1 n=2, sheet 2 n=3, sheet 3 n=1
4 - Scale n pages to height: sheet 1 n=2, sheet 2 n=3, sheet 3 n=1
5 - First page number: sheet 1 - 3, sheet 2 - automatic, sheet 3 - 1
-------------------------------------------------------------------------------}
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_PageLayout(
AFormat: TsSpreadsheetFormat; ANumSheets, ATestMode: Integer);
@ -294,23 +345,51 @@ begin
PageWidth := 148; PageHeight := 210;
end;
2: // Scaling factor: sheet 1 50%, sheet 2 200%, sheet 3 100%
begin
if p = 0 then ScalingFactor := 50 else
if p = 1 then ScalingFactor := 200;
Exclude(Options, poFitPages);
end;
begin
if p = 0 then ScalingFactor := 50 else
if p = 1 then ScalingFactor := 200;
Exclude(Options, poFitPages);
end;
3: // Scale width to n pages
begin
case p of
0: FitWidthToPages := 2;
1: FitWidthToPages := 3;
2: FitWidthToPages := 1;
end;
Include(Options, poFitPages);
end;
4: // Scale height to n pages
begin
case p of
0: FitHeightToPages := 2;
1: FitHeightToPages := 3;
2: FitHeightToPages := 1;
end;
Include(Options, poFitPages);
end;
5: // Page number of first pge
begin
Options := Options + [poPrintHeaders, poUseStartPageNumber];
case p of
0: StartPageNumber := 3;
1: Exclude(Options, poUseStartPageNumber);
2: StartPageNumber := 1;
end;
Headers[HEADER_FOOTER_INDEX_ALL] := '&LPage &P of &N';
end;
end;
end;
end;
MyWorkbook := TsWorkbook.Create;
try
col := 0;
for p := 0 to ANumSheets-1 do
begin
MyWorkSheet:= MyWorkBook.AddWorksheet(PageLayoutSheet+IntToStr(p+1));
for row := 0 to 99 do
Myworksheet.WriteNumber(row, 0, (row+1)+(col+1)*100+(p+1)*10000 );
for col := 0 to 29 do
Myworksheet.WriteNumber(row, col, (row+1)+(col+1)*100+(p+1)*10000 );
MyWorksheet.PageLayout := SollPageLayout[p];
end;
MyWorkBook.WriteToFile(TempFile, AFormat, true);
@ -349,6 +428,27 @@ begin
CheckEquals(sollPageLayout[p].ScalingFactor, actualPageLayout.ScalingFactor,
'Scaling factor mismatch, sheet "' + MyWorksheet.Name + '"');
end;
3: // Fit width to pages
begin
CheckEquals(poFitPages in sollPageLayout[p].Options, poFitPages in actualPageLayout.Options,
'"poFitPages" option mismatch, sheet "' + MyWorksheet.name + '"');
CheckEquals(sollPageLayout[p].FitWidthToPages, actualPageLayout.FitWidthToPages,
'FitWidthToPages mismatch, sheet "' + MyWorksheet.Name + '"');
end;
4: // Fit height to pages
begin
CheckEquals(poFitPages in sollPageLayout[p].Options, poFitPages in actualPageLayout.Options,
'"poFitPages" option mismatch, sheet "' + MyWorksheet.name + '"');
CheckEquals(sollPageLayout[p].FitHeightToPages, actualPageLayout.FitHeightToPages,
'FitWidthToPages mismatch, sheet "' + MyWorksheet.Name + '"');
end;
5: // Start page number
begin
CheckEquals(poUseStartPageNumber in sollPageLayout[p].Options, poUseStartPageNumber in actualPageLayout.Options,
'"poUseStartPageNumber" option mismatch, sheet "' + MyWorksheet.name + '"');
CheckEquals(sollPageLayout[p].StartPageNumber, actualPageLayout.StartPageNumber,
'StartPageNumber value mismatch, sheet "' + MyWorksheet.Name + '"');
end;
end;
end;
@ -536,6 +636,55 @@ begin
TestWriteRead_PageLayout(sfExcel5, 3, 2);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_WidthToPages_1sheet;
begin
TestWriteRead_PageLayout(sfExcel5, 1, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_WidthToPages_2sheets;
begin
TestWriteRead_PageLayout(sfExcel5, 2, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_WidthToPages_3sheets;
begin
TestWriteRead_PageLayout(sfExcel5, 3, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_HeightToPages_1sheet;
begin
TestWriteRead_PageLayout(sfExcel5, 1, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_HeightToPages_2sheets;
begin
TestWriteRead_PageLayout(sfExcel5, 2, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_HeightToPages_3sheets;
begin
TestWriteRead_PageLayout(sfExcel5, 3, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_PageNumber_1sheet;
begin
TestWriteRead_PageLayout(sfExcel5, 1, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_PageNumber_2sheets;
begin
TestWriteRead_PageLayout(sfExcel5, 2, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF5_PageNumber_3sheets;
begin
TestWriteRead_PageLayout(sfExcel5, 3, 5);
end;
{ Tests for BIFF8 file format }
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_PageMargins_1sheet_0;
@ -648,6 +797,55 @@ begin
TestWriteRead_PageLayout(sfExcel8, 3, 2);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_WidthToPages_1sheet;
begin
TestWriteRead_PageLayout(sfExcel8, 1, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_WidthToPages_2sheets;
begin
TestWriteRead_PageLayout(sfExcel8, 2, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_WidthToPages_3sheets;
begin
TestWriteRead_PageLayout(sfExcel8, 3, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_HeightToPages_1sheet;
begin
TestWriteRead_PageLayout(sfExcel8, 1, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_HeightToPages_2sheets;
begin
TestWriteRead_PageLayout(sfExcel8, 2, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_HeightToPages_3sheets;
begin
TestWriteRead_PageLayout(sfExcel8, 3, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_PageNumber_1sheet;
begin
TestWriteRead_PageLayout(sfExcel8, 1, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_PageNumber_2sheets;
begin
TestWriteRead_PageLayout(sfExcel8, 2, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_BIFF8_PageNumber_3sheets;
begin
TestWriteRead_PageLayout(sfExcel8, 3, 5);
end;
{ Tests for OOXML file format }
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_PageMargins_1sheet_0;
@ -761,6 +959,54 @@ begin
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_WidthToPages_1sheet;
begin
TestWriteRead_PageLayout(sfOOXML, 1, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_WidthToPages_2sheets;
begin
TestWriteRead_PageLayout(sfOOXML, 2, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_WidthToPages_3sheets;
begin
TestWriteRead_PageLayout(sfOOXML, 3, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_HeightToPages_1sheet;
begin
TestWriteRead_PageLayout(sfOOXML, 1, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_HeightToPages_2sheets;
begin
TestWriteRead_PageLayout(sfOOXML, 2, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_HeightToPages_3sheets;
begin
TestWriteRead_PageLayout(sfOOXML, 3, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_PageNumber_1sheet;
begin
TestWriteRead_PageLayout(sfOOXML, 1, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_PageNumber_2sheets;
begin
TestWriteRead_PageLayout(sfOOXML, 2, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_OOXML_PageNumber_3sheets;
begin
TestWriteRead_PageLayout(sfOOXML, 3, 5);
end;
{ Tests for Open Document file format }
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_PageMargins_1sheet_0;
@ -874,6 +1120,54 @@ begin
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_WidthToPages_1sheet;
begin
TestWriteRead_PageLayout(sfOpenDocument, 1, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_WidthToPages_2sheets;
begin
TestWriteRead_PageLayout(sfOpenDocument, 2, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_WidthToPages_3sheets;
begin
TestWriteRead_PageLayout(sfOpenDocument, 3, 3);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_HeightToPages_1sheet;
begin
TestWriteRead_PageLayout(sfOpenDocument, 1, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_HeightToPages_2sheets;
begin
TestWriteRead_PageLayout(sfOpenDocument, 2, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_HeightToPages_3sheets;
begin
TestWriteRead_PageLayout(sfOpenDocument, 3, 4);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_PageNumber_1sheet;
begin
TestWriteRead_PageLayout(sfOpenDocument, 1, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_PageNumber_2sheets;
begin
TestWriteRead_PageLayout(sfOpenDocument, 2, 5);
end;
procedure TSpreadWriteReadPageLayoutTests.TestWriteRead_ODS_PageNumber_3sheets;
begin
TestWriteRead_PageLayout(sfOpenDocument, 3, 5);
end;
initialization
RegisterTest(TSpreadWriteReadPageLayoutTests);

View File

@ -2754,7 +2754,7 @@ begin
AStream.WriteWord(WordToLE(w));
{ Scaling factor in percent }
w := Round(FWorksheet.PageLayout.ScalingFactor);
w := FWorksheet.PageLayout.ScalingFactor;
AStream.WriteWord(WordToLE(w));
{ Start page number }

View File

@ -1409,23 +1409,32 @@ begin
// Scaling factor
s := GetAttrValue(ANode, 'scale');
if s <> '' then
begin
AWorksheet.PageLayout.ScalingFactor := StrToInt(s);
Exclude(AWorksheet.PageLayout.Options, poFitPages);
end;
// Fit print job to pages
s := GetAttrValue(ANode, 'fitToHeight');
if s <> '' then
begin
AWorksheet.PageLayout.FitHeightToPages := StrToInt(s);
if poFitPages in AWorksheet.PageLayout.Options then
Include(AWorksheet.PageLayout.Options, poFitPages);
end;
s := GetAttrValue(ANode, 'fitToWidth');
if s <> '' then
begin
AWorksheet.PageLayout.FitWidthToPages := StrToInt(s);
if (AWorksheet.PageLayout.FitHeightToPages > 0) or (AWorksheet.PageLayout.FitWidthToPages > 0) then
Include(AWorksheet.pageLayout.Options, poFitPages);
Include(AWorksheet.PageLayout.Options, poFitPages);
end;
// First page number
s := GetAttrValue(ANode, 'useFirstPageNumber');
if s = '1' then
Include(AWorksheet.PageLayout.Options, poUseStartPageNumber);
s := GetAttrValue(ANode, 'firstPageNumber');
if s <> '' then
AWorksheet.PageLayout.StartPageNumber := StrToInt(s);
@ -2520,19 +2529,15 @@ begin
break;
end;
// Scaling factor
if AWorksheet.PageLayout.ScalingFactor <> 100 then
s := Format('%s scale="%.0f" fitToHeight="0" fitToWidth="0"', [
s, AWorksheet.PageLayout.ScalingFactor
], FPointSeparatorSettings);
// Fit width pages
if AWorksheet.PageLayout.FitWidthToPages > 0 then
if poFitPages in AWorksheet.PageLayout.Options then
begin
// Fit width to pages
s := Format('%s fitToWidth="%d"', [s, AWorksheet.PageLayout.FitWidthToPages]);
// Fit height pages
if AWorksheet.PageLayout.FitHeightToPages > 0 then
// Fit height to pages
s := Format('%s fitToHeight="%d"', [s, AWorksheet.PageLayout.FitHeightToPages]);
end else
// Scaling factor
s := Format('%s scale="%d"', [s, AWorksheet.PageLayout.ScalingFactor]);
// Orientation
s := Format('%s orientation="%s"', [
@ -2541,7 +2546,9 @@ begin
// First page number
if poUseStartPageNumber in FWorksheet.PageLayout.Options then
s := Format('%s useFirstPageNumber="%d"', [s, AWorksheet.PageLayout.StartPageNumber]);
s := Format('%s useFirstPageNumber="1"', [s]);
s := Format('%s firstPageNumber="%d"', [s, AWorksheet.PageLayout.StartPageNumber]);
// Print order
if poPrintPagesByRows in AWorksheet.PageLayout.Options then