Completed
Pull Request — master (#1559)
by Adrien
09:36
created

PageSetupTest::testPageSetup()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 17
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 4
eloc 12
nc 4
nop 0
dl 0
loc 17
rs 9.8666
c 1
b 0
f 0
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheetTests\Reader\Xlsx;
4
5
use PhpOffice\PhpSpreadsheet\Reader\Xlsx;
6
use PhpOffice\PhpSpreadsheet\Spreadsheet;
7
use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
8
use PHPUnit\Framework\TestCase;
9
10
class PageSetupTest extends TestCase
11
{
12
    private const MARGIN_PRECISION = 0.00000001;
13
14
    private const MARGIN_UNIT_CONVERSION = 2.54; // Inches to cm
15
16
    /**
17
     * @var Spreadsheet
18
     */
19
    private $spreadsheet;
20
21
    protected function setup(): void
22
    {
23
        $filename = 'tests/data/Reader/XLSX/PageSetup.xlsx';
24
        $reader = new Xlsx();
25
        $this->spreadsheet = $reader->load($filename);
26
    }
27
28
    public function testPageSetup(): void
29
    {
30
        $assertions = $this->pageSetupAssertions();
31
32
        foreach ($this->spreadsheet->getAllSheets() as $worksheet) {
33
            if (!array_key_exists($worksheet->getTitle(), $assertions)) {
34
                continue;
35
            }
36
37
            $sheetAssertions = $assertions[$worksheet->getTitle()];
38
            foreach ($sheetAssertions as $test => $expectedResult) {
39
                $testMethodName = 'get' . ucfirst($test);
40
                $actualResult = $worksheet->getPageSetup()->$testMethodName();
41
                self::assertSame(
42
                    $expectedResult,
43
                    $actualResult,
44
                    "Failed assertion for Worksheet '{$worksheet->getTitle()}' {$test}"
45
                );
46
            }
47
        }
48
    }
49
50
    public function testPageMargins(): void
51
    {
52
        $assertions = $this->pageMarginAssertions();
53
54
        foreach ($this->spreadsheet->getAllSheets() as $worksheet) {
55
            if (!array_key_exists($worksheet->getTitle(), $assertions)) {
56
                continue;
57
            }
58
59
            $sheetAssertions = $assertions[$worksheet->getTitle()];
60
            foreach ($sheetAssertions as $test => $expectedResult) {
61
                $testMethodName = 'get' . ucfirst($test);
62
                $actualResult = $worksheet->getPageMargins()->$testMethodName();
63
                self::assertEqualsWithDelta(
64
                    $expectedResult,
65
                    $actualResult,
66
                    self::MARGIN_PRECISION,
67
                    "Failed assertion for Worksheet '{$worksheet->getTitle()}' {$test} margin"
68
                );
69
            }
70
        }
71
    }
72
73
    private function pageSetupAssertions(): array
74
    {
75
        return [
76
            'Sheet1' => [
77
                'orientation' => PageSetup::ORIENTATION_PORTRAIT,
78
                'scale' => 75,
79
                'horizontalCentered' => true,
80
                'verticalCentered' => false,
81
                'pageOrder' => PageSetup::PAGEORDER_DOWN_THEN_OVER,
82
            ],
83
            'Sheet2' => [
84
                'orientation' => PageSetup::ORIENTATION_LANDSCAPE,
85
                'scale' => 100,
86
                'horizontalCentered' => false,
87
                'verticalCentered' => true,
88
                'pageOrder' => PageSetup::PAGEORDER_OVER_THEN_DOWN,
89
            ],
90
            'Sheet3' => [
91
                'orientation' => PageSetup::ORIENTATION_PORTRAIT,
92
                'scale' => 90,
93
                'horizontalCentered' => true,
94
                'verticalCentered' => true,
95
                'pageOrder' => PageSetup::PAGEORDER_DOWN_THEN_OVER,
96
            ],
97
            'Sheet4' => [
98
                // Default Settings
99
                'orientation' => PageSetup::ORIENTATION_DEFAULT,
100
                'scale' => 100,
101
                'horizontalCentered' => false,
102
                'verticalCentered' => false,
103
                'pageOrder' => PageSetup::PAGEORDER_DOWN_THEN_OVER,
104
            ],
105
        ];
106
    }
107
108
    private function pageMarginAssertions(): array
109
    {
110
        return [
111
            'Sheet1' => [
112
                // Here the values are in cm, so we convert to inches for comparison with internal uom
113
                'top' => 2.4 / self::MARGIN_UNIT_CONVERSION,
114
                'header' => 0.8 / self::MARGIN_UNIT_CONVERSION,
115
                'left' => 1.3 / self::MARGIN_UNIT_CONVERSION,
116
                'right' => 1.3 / self::MARGIN_UNIT_CONVERSION,
117
                'bottom' => 1.9 / self::MARGIN_UNIT_CONVERSION,
118
                'footer' => 0.8 / self::MARGIN_UNIT_CONVERSION,
119
            ],
120
            'Sheet2' => [
121
                // Here the values are in cm, so we convert to inches for comparison with internal uom
122
                'top' => 1.9 / self::MARGIN_UNIT_CONVERSION,
123
                'header' => 0.8 / self::MARGIN_UNIT_CONVERSION,
124
                'left' => 1.8 / self::MARGIN_UNIT_CONVERSION,
125
                'right' => 1.8 / self::MARGIN_UNIT_CONVERSION,
126
                'bottom' => 1.9 / self::MARGIN_UNIT_CONVERSION,
127
                'footer' => 0.8 / self::MARGIN_UNIT_CONVERSION,
128
            ],
129
            'Sheet3' => [
130
                // Here the values are in cm, so we convert to inches for comparison with internal uom
131
                'top' => 2.4 / self::MARGIN_UNIT_CONVERSION,
132
                'header' => 1.3 / self::MARGIN_UNIT_CONVERSION,
133
                'left' => 1.8 / self::MARGIN_UNIT_CONVERSION,
134
                'right' => 1.8 / self::MARGIN_UNIT_CONVERSION,
135
                'bottom' => 2.4 / self::MARGIN_UNIT_CONVERSION,
136
                'footer' => 1.3 / self::MARGIN_UNIT_CONVERSION,
137
            ],
138
            'Sheet4' => [
139
                // Default Settings (already in inches for comparison)
140
                'top' => 0.75,
141
                'header' => 0.3,
142
                'left' => 0.7,
143
                'right' => 0.7,
144
                'bottom' => 0.75,
145
                'footer' => 0.3,
146
            ],
147
        ];
148
    }
149
}
150