| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399 |
- <?php
- namespace PhpOffice\PhpSpreadsheetTests\Cell;
- use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
- use PhpOffice\PhpSpreadsheet\Exception;
- use PHPUnit\Framework\TestCase;
- use TypeError;
- class CoordinateTest extends TestCase
- {
- /**
- * @dataProvider providerColumnString
- *
- * @param mixed $expectedResult
- * @param mixed $string
- */
- public function testColumnIndexFromString($expectedResult, $string): void
- {
- $columnIndex = Coordinate::columnIndexFromString($string);
- self::assertEquals($expectedResult, $columnIndex);
- $stringBack = Coordinate::stringFromColumnIndex($columnIndex);
- self::assertEquals($stringBack, $string, 'should be able to get the original input with opposite method');
- }
- public function providerColumnString(): array
- {
- return require 'tests/data/ColumnString.php';
- }
- public function testColumnIndexFromStringTooLong(): void
- {
- $cellAddress = 'ABCD';
- try {
- Coordinate::columnIndexFromString($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Column string index can not be longer than 3 characters');
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- public function testColumnIndexFromStringTooShort(): void
- {
- $cellAddress = '';
- try {
- Coordinate::columnIndexFromString($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Column string index can not be empty');
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- /**
- * @dataProvider providerColumnIndex
- *
- * @param mixed $expectedResult
- * @param int $columnIndex
- */
- public function testStringFromColumnIndex($expectedResult, $columnIndex): void
- {
- $string = Coordinate::stringFromColumnIndex($columnIndex);
- self::assertEquals($expectedResult, $string);
- $columnIndexBack = Coordinate::columnIndexFromString($string);
- self::assertEquals($columnIndexBack, $columnIndex, 'should be able to get the original input with opposite method');
- }
- public function providerColumnIndex(): array
- {
- return require 'tests/data/ColumnIndex.php';
- }
- /**
- * @dataProvider providerCoordinates
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testCoordinateFromString($expectedResult, $rangeSet): void
- {
- $result = Coordinate::coordinateFromString($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerCoordinates(): array
- {
- return require 'tests/data/CellCoordinates.php';
- }
- /**
- * @dataProvider providerIndexesFromString
- */
- public function testIndexesFromString(array $expectedResult, string $rangeSet): void
- {
- $result = Coordinate::indexesFromString($rangeSet);
- self::assertSame($expectedResult, $result);
- }
- public function providerIndexesFromString(): array
- {
- return require 'tests/data/Cell/IndexesFromString.php';
- }
- public function testCoordinateFromStringWithRangeAddress(): void
- {
- $cellAddress = 'A1:AI2012';
- try {
- Coordinate::coordinateFromString($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells');
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- public function testCoordinateFromStringWithEmptyAddress(): void
- {
- $cellAddress = '';
- try {
- Coordinate::coordinateFromString($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Cell coordinate can not be zero-length string');
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- public function testCoordinateFromStringWithInvalidAddress(): void
- {
- $cellAddress = 'AI';
- try {
- Coordinate::coordinateFromString($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Invalid cell coordinate ' . $cellAddress);
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- /**
- * @dataProvider providerAbsoluteCoordinates
- *
- * @param string $expectedResult
- * @param string $rangeSet
- */
- public function testAbsoluteCoordinateFromString($expectedResult, $rangeSet): void
- {
- $result = Coordinate::absoluteCoordinate($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerAbsoluteCoordinates(): array
- {
- return require 'tests/data/CellAbsoluteCoordinate.php';
- }
- public function testAbsoluteCoordinateFromStringWithRangeAddress(): void
- {
- $cellAddress = 'A1:AI2012';
- try {
- Coordinate::absoluteCoordinate($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells');
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- /**
- * @dataProvider providerAbsoluteReferences
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testAbsoluteReferenceFromString($expectedResult, $rangeSet): void
- {
- $result = Coordinate::absoluteReference($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerAbsoluteReferences(): array
- {
- return require 'tests/data/CellAbsoluteReference.php';
- }
- public function testAbsoluteReferenceFromStringWithRangeAddress(): void
- {
- $cellAddress = 'A1:AI2012';
- try {
- Coordinate::absoluteReference($cellAddress);
- } catch (\Exception $e) {
- self::assertInstanceOf(Exception::class, $e);
- self::assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells');
- return;
- }
- self::fail('An expected exception has not been raised.');
- }
- /**
- * @dataProvider providerSplitRange
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testSplitRange($expectedResult, $rangeSet): void
- {
- $result = Coordinate::splitRange($rangeSet);
- foreach ($result as $key => $split) {
- if (!is_array($expectedResult[$key])) {
- self::assertEquals($expectedResult[$key], $split[0]);
- } else {
- self::assertEquals($expectedResult[$key], $split);
- }
- }
- }
- public function providerSplitRange(): array
- {
- return require 'tests/data/CellSplitRange.php';
- }
- /**
- * @dataProvider providerBuildRange
- *
- * @param mixed $expectedResult
- * @param mixed $rangeSets
- */
- public function testBuildRange($expectedResult, $rangeSets): void
- {
- $result = Coordinate::buildRange($rangeSets);
- self::assertEquals($expectedResult, $result);
- }
- public function providerBuildRange(): array
- {
- return require 'tests/data/CellBuildRange.php';
- }
- public function testBuildRangeInvalid(): void
- {
- $this->expectException(TypeError::class);
- $cellRange = null;
- // @phpstan-ignore-next-line
- Coordinate::buildRange(/** @scrutinizer ignore-type */ $cellRange);
- }
- public function testBuildRangeInvalid2(): void
- {
- $this->expectException(Exception::class);
- $this->expectExceptionMessage('Range does not contain any information');
- $cellRange = [];
- Coordinate::buildRange($cellRange);
- }
- /**
- * @dataProvider providerRangeBoundaries
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testRangeBoundaries($expectedResult, $rangeSet): void
- {
- $result = Coordinate::rangeBoundaries($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerRangeBoundaries(): array
- {
- return require 'tests/data/CellRangeBoundaries.php';
- }
- /**
- * @dataProvider providerRangeDimension
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testRangeDimension($expectedResult, $rangeSet): void
- {
- $result = Coordinate::rangeDimension($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerRangeDimension(): array
- {
- return require 'tests/data/CellRangeDimension.php';
- }
- /**
- * @dataProvider providerGetRangeBoundaries
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testGetRangeBoundaries($expectedResult, $rangeSet): void
- {
- $result = Coordinate::getRangeBoundaries($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerGetRangeBoundaries(): array
- {
- return require 'tests/data/CellGetRangeBoundaries.php';
- }
- /**
- * @dataProvider providerExtractAllCellReferencesInRange
- *
- * @param array $expectedResult
- * @param string $rangeSet
- */
- public function testExtractAllCellReferencesInRange($expectedResult, $rangeSet): void
- {
- $result = Coordinate::extractAllCellReferencesInRange($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerExtractAllCellReferencesInRange(): array
- {
- return require 'tests/data/CellExtractAllCellReferencesInRange.php';
- }
- /**
- * @dataProvider providerInvalidRange
- *
- * @param string $range
- */
- public function testExtractAllCellReferencesInRangeInvalidRange($range): void
- {
- $this->expectException(Exception::class);
- $this->expectExceptionMessage('Invalid range: "' . $range . '"');
- Coordinate::extractAllCellReferencesInRange($range);
- }
- public function providerInvalidRange(): array
- {
- return [['Z1:A1'], ['A4:A1'], ['B1:A1'], ['AA1:Z1']];
- }
- /**
- * @dataProvider providerMergeRangesInCollection
- *
- * @param mixed $expectedResult
- * @param mixed $rangeSets
- */
- public function testMergeRangesInCollection($expectedResult, $rangeSets): void
- {
- $result = Coordinate::mergeRangesInCollection($rangeSets);
- self::assertEquals($expectedResult, $result);
- }
- public function providerMergeRangesInCollection(): array
- {
- return require 'tests/data/CellMergeRangesInCollection.php';
- }
- /**
- * @dataProvider providerCoordinateIsRange
- *
- * @param mixed $expectedResult
- * @param string $rangeSet
- */
- public function testCoordinateIsRange($expectedResult, $rangeSet): void
- {
- $result = Coordinate::coordinateIsRange($rangeSet);
- self::assertEquals($expectedResult, $result);
- }
- public function providerCoordinateIsRange(): array
- {
- return require 'tests/data/CoordinateIsRange.php';
- }
- }
|