PageSetupTest.php 4.7 KB

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