PageSetupTest.php 5.7 KB

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