|
3 | 3 | namespace PhpOffice\PhpSpreadsheetTests\Worksheet;
|
4 | 4 |
|
5 | 5 | use PhpOffice\PhpSpreadsheet\Spreadsheet;
|
| 6 | +use PhpOffice\PhpSpreadsheet\Worksheet\CellIterator; |
6 | 7 | use PhpOffice\PhpSpreadsheet\Worksheet\ColumnCellIterator;
|
7 | 8 | use PHPUnit\Framework\TestCase;
|
8 | 9 |
|
@@ -32,8 +33,8 @@ public function testEndRange(?bool $existing, string $expectedResultFirst, strin
|
32 | 33 | }
|
33 | 34 | }
|
34 | 35 | }
|
35 |
| - self::assertEquals($expectedResultFirst, $firstCoordinate); |
36 |
| - self::assertEquals($expectedResultLast, $lastCoordinate); |
| 36 | + self::assertSame($expectedResultFirst, $firstCoordinate); |
| 37 | + self::assertSame($expectedResultLast, $lastCoordinate); |
37 | 38 | }
|
38 | 39 |
|
39 | 40 | public function providerExistingCell(): array
|
@@ -63,15 +64,63 @@ public function testEmptyColumn(?bool $existing, int $expectedResult): void
|
63 | 64 | foreach ($iterator as $cell) {
|
64 | 65 | ++$numCells;
|
65 | 66 | }
|
66 |
| - self::assertEquals($expectedResult, $numCells); |
| 67 | + self::assertSame($expectedResult, $numCells); |
67 | 68 | }
|
68 | 69 |
|
69 | 70 | public function providerEmptyColumn(): array
|
70 | 71 | {
|
71 | 72 | return [
|
72 |
| - [null, 6], |
| 73 | + [null, 6], // Default behaviour |
73 | 74 | [false, 6],
|
74 | 75 | [true, 0],
|
75 | 76 | ];
|
76 | 77 | }
|
| 78 | + |
| 79 | + /** |
| 80 | + * @dataProvider providerNullOrCreate |
| 81 | + */ |
| 82 | + public function testNullOrCreateOption(?bool $existingBehaviour, int $expectedCreatedResult): void |
| 83 | + { |
| 84 | + $spreadsheet = new Spreadsheet(); |
| 85 | + $sheet = $spreadsheet->getActiveSheet(); |
| 86 | + $iterator = new ColumnCellIterator($sheet, 'F'); |
| 87 | + if (isset($existingBehaviour)) { |
| 88 | + $iterator->setIfNotExists($existingBehaviour); |
| 89 | + } |
| 90 | + $notExistsBehaviour = $iterator->getIfNotExists(); |
| 91 | + self::assertSame($expectedCreatedResult > 0, $notExistsBehaviour); |
| 92 | + } |
| 93 | + |
| 94 | + /** |
| 95 | + * @dataProvider providerNullOrCreate |
| 96 | + */ |
| 97 | + public function testNullOrCreate(?bool $existing, int $expectedCreatedResult, int $expectedNullResult): void |
| 98 | + { |
| 99 | + $spreadsheet = new Spreadsheet(); |
| 100 | + $sheet = $spreadsheet->getActiveSheet(); |
| 101 | + $sheet->getCell('B2')->setValue('cellb2'); |
| 102 | + $sheet->getCell('F4')->setValue('cellf2'); |
| 103 | + |
| 104 | + $iterator = new ColumnCellIterator($sheet, 'F'); |
| 105 | + if (isset($existing)) { |
| 106 | + $iterator->setIfNotExists($existing); |
| 107 | + } |
| 108 | + $numCreatedCells = $numEmptyCells = 0; |
| 109 | + foreach ($iterator as $cell) { |
| 110 | + $numCreatedCells += (int) ($cell !== null && $cell->getValue() === null); |
| 111 | + // @phpstan-ignore-next-line |
| 112 | + $numEmptyCells += (int) ($cell === null); |
| 113 | + } |
| 114 | + self::assertSame($expectedCreatedResult, $numCreatedCells); |
| 115 | + self::assertSame($expectedNullResult, $numEmptyCells); |
| 116 | + } |
| 117 | + |
| 118 | + public function providerNullOrCreate(): array |
| 119 | + { |
| 120 | + return [ |
| 121 | + [null, 3, 0], // Default behaviour |
| 122 | + [CellIterator::IF_NOT_EXISTS_CREATE_NEW, 3, 0], |
| 123 | + [CellIterator::IF_NOT_EXISTS_RETURN_NULL, 0, 3], |
| 124 | + ]; |
| 125 | + } |
77 | 126 | }
|
0 commit comments