PageSetupTest.php 5.3 KB

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