RowIteratorTest.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <?php
  2. namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
  3. use PhpOffice\PhpSpreadsheet\Exception as Except;
  4. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  5. use PhpOffice\PhpSpreadsheet\Worksheet\Row;
  6. use PhpOffice\PhpSpreadsheet\Worksheet\RowIterator;
  7. use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
  8. use PHPUnit\Framework\TestCase;
  9. class RowIteratorTest extends TestCase
  10. {
  11. private const CELL_VALUES =
  12. [
  13. [110, 120, 130],
  14. [210, 220],
  15. [310, 320, 330],
  16. [410, 420],
  17. [510, 520, 530],
  18. [610, 620],
  19. ];
  20. private static function getPopulatedSheet(Spreadsheet $spreadsheet): Worksheet
  21. {
  22. $sheet = $spreadsheet->getActiveSheet();
  23. $sheet->fromArray(self::CELL_VALUES);
  24. return $sheet;
  25. }
  26. public function testIteratorFullRange(): void
  27. {
  28. $spreadsheet = new Spreadsheet();
  29. $sheet = self::getPopulatedSheet($spreadsheet);
  30. $iterator = new RowIterator($sheet);
  31. $rowIndexResult = 1;
  32. self::assertEquals($rowIndexResult, $iterator->key());
  33. $counter = 0;
  34. foreach ($iterator as $key => $row) {
  35. ++$counter;
  36. self::assertEquals($rowIndexResult++, $key);
  37. self::assertInstanceOf(Row::class, $row);
  38. }
  39. self::assertCount($counter, self::CELL_VALUES);
  40. $spreadsheet->disconnectWorksheets();
  41. }
  42. public function testIteratorStartEndRange(): void
  43. {
  44. $spreadsheet = new Spreadsheet();
  45. $sheet = self::getPopulatedSheet($spreadsheet);
  46. $iterator = new RowIterator($sheet, 2, 4);
  47. $rowIndexResult = 2;
  48. self::assertEquals($rowIndexResult, $iterator->key());
  49. $counter = 0;
  50. foreach ($iterator as $key => $row) {
  51. ++$counter;
  52. self::assertEquals($rowIndexResult++, $key);
  53. self::assertInstanceOf(Row::class, $row);
  54. }
  55. self::assertSame(3, $counter);
  56. $spreadsheet->disconnectWorksheets();
  57. }
  58. public function testIteratorSeekAndPrev(): void
  59. {
  60. $spreadsheet = new Spreadsheet();
  61. $sheet = self::getPopulatedSheet($spreadsheet);
  62. $iterator = new RowIterator($sheet, 2, 4);
  63. $columnIndexResult = 4;
  64. $iterator->seek(4);
  65. self::assertEquals($columnIndexResult, $iterator->key());
  66. $counter = 0;
  67. while ($iterator->valid() !== false) {
  68. ++$counter;
  69. self::assertEquals($columnIndexResult, $iterator->key());
  70. --$columnIndexResult;
  71. $iterator->prev();
  72. }
  73. self::assertSame(3, $counter);
  74. $spreadsheet->disconnectWorksheets();
  75. }
  76. public function testIteratorResetStart(): void
  77. {
  78. $spreadsheet = new Spreadsheet();
  79. $sheet = self::getPopulatedSheet($spreadsheet);
  80. $iterator = new RowIterator($sheet, 2, 4);
  81. $iterator->resetStart(5);
  82. $key = $iterator->key();
  83. self::assertSame(5, $key);
  84. $lastRow = $iterator->key();
  85. while ($iterator->valid() !== false) {
  86. $iterator->next();
  87. $lastRow = $iterator->key();
  88. }
  89. self::assertSame(6, $lastRow);
  90. $spreadsheet->disconnectWorksheets();
  91. }
  92. public function testSeekOutOfRange(): void
  93. {
  94. $spreadsheet = new Spreadsheet();
  95. $sheet = self::getPopulatedSheet($spreadsheet);
  96. $this->expectException(Except::class);
  97. $iterator = new RowIterator($sheet, 2, 4);
  98. $iterator->seek(1);
  99. }
  100. public function testPrevOutOfRange(): void
  101. {
  102. $spreadsheet = new Spreadsheet();
  103. $sheet = self::getPopulatedSheet($spreadsheet);
  104. $iterator = new RowIterator($sheet, 2, 4);
  105. $iterator->prev();
  106. self::assertFalse($iterator->valid());
  107. }
  108. public function testResetStartOutOfRange(): void
  109. {
  110. $spreadsheet = new Spreadsheet();
  111. $sheet = self::getPopulatedSheet($spreadsheet);
  112. $this->expectException(Except::class);
  113. $iterator = new RowIterator($sheet, 2, 4);
  114. $iterator->resetStart(10);
  115. }
  116. }