diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8b17217..ca316ab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -267,4 +267,4 @@ jobs: run: composer install --no-progress --prefer-dist --optimize-autoloader - name: Static Analysis using PHPStan - run: phpstan analyse --no-progress src tests + run: ./vendor/bin/phpstan analyse -c phpstan.neon --no-progress diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..fddfd9c --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,9 @@ +parameters: + level: 3 + paths: + - src + - tests + excludePaths: + # Exclude these files that are OK + - src/Spout/Reader/Common/Creator/ReaderEntityFactory.php + - src/Spout/Writer/Common/Creator/WriterEntityFactory.php diff --git a/src/Spout/Common/Helper/CellTypeHelper.php b/src/Spout/Common/Helper/CellTypeHelper.php index 97d2e8d..8da35cc 100644 --- a/src/Spout/Common/Helper/CellTypeHelper.php +++ b/src/Spout/Common/Helper/CellTypeHelper.php @@ -9,7 +9,7 @@ namespace Box\Spout\Common\Helper; class CellTypeHelper { /** - * @param $value + * @param mixed|null $value * @return bool Whether the given value is considered "empty" */ public static function isEmpty($value) @@ -18,7 +18,7 @@ class CellTypeHelper } /** - * @param $value + * @param mixed $value * @return bool Whether the given value is a non empty string */ public static function isNonEmptyString($value) @@ -30,7 +30,7 @@ class CellTypeHelper * Returns whether the given value is numeric. * A numeric value is from type "integer" or "double" ("float" is not returned by gettype). * - * @param $value + * @param mixed $value * @return bool Whether the given value is numeric */ public static function isNumeric($value) @@ -44,7 +44,7 @@ class CellTypeHelper * Returns whether the given value is boolean. * "true"/"false" and 0/1 are not booleans. * - * @param $value + * @param mixed $value * @return bool Whether the given value is boolean */ public static function isBoolean($value) @@ -55,7 +55,7 @@ class CellTypeHelper /** * Returns whether the given value is a DateTime or DateInterval object. * - * @param $value + * @param mixed $value * @return bool Whether the given value is a DateTime or DateInterval object */ public static function isDateTimeOrDateInterval($value) diff --git a/src/Spout/Common/Helper/StringHelper.php b/src/Spout/Common/Helper/StringHelper.php index 6256b1e..340d65c 100644 --- a/src/Spout/Common/Helper/StringHelper.php +++ b/src/Spout/Common/Helper/StringHelper.php @@ -88,7 +88,7 @@ class StringHelper * @see https://wiki.php.net/rfc/locale_independent_float_to_string for the changed behavior in PHP8. * * @param int|float $numericValue - * @return string + * @return int|float|string */ public function formatNumericValue($numericValue) { diff --git a/src/Spout/Reader/Common/Creator/ReaderFactory.php b/src/Spout/Reader/Common/Creator/ReaderFactory.php index 6b10175..09ca422 100644 --- a/src/Spout/Reader/Common/Creator/ReaderFactory.php +++ b/src/Spout/Reader/Common/Creator/ReaderFactory.php @@ -45,7 +45,7 @@ class ReaderFactory /** * This creates an instance of the appropriate reader, given the type of the file to be read * - * @param string $readerType Type of the reader to instantiate + * @param string $readerType Type of the reader to instantiate * @throws \Box\Spout\Common\Exception\UnsupportedTypeException * @return ReaderInterface */ diff --git a/src/Spout/Reader/ODS/Creator/InternalEntityFactory.php b/src/Spout/Reader/ODS/Creator/InternalEntityFactory.php index cb06ce2..a9d96d6 100644 --- a/src/Spout/Reader/ODS/Creator/InternalEntityFactory.php +++ b/src/Spout/Reader/ODS/Creator/InternalEntityFactory.php @@ -105,7 +105,7 @@ class InternalEntityFactory implements InternalEntityFactoryInterface } /** - * @param $xmlReader + * @param XMLReader $xmlReader * @return XMLProcessor */ private function createXMLProcessor($xmlReader) diff --git a/src/Spout/Reader/ODS/Helper/CellValueFormatter.php b/src/Spout/Reader/ODS/Helper/CellValueFormatter.php index 77bd3c2..b69dcd6 100644 --- a/src/Spout/Reader/ODS/Helper/CellValueFormatter.php +++ b/src/Spout/Reader/ODS/Helper/CellValueFormatter.php @@ -64,7 +64,7 @@ class CellValueFormatter * Returns the (unescaped) correctly marshalled, cell value associated to the given XML node. * @see http://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#refTable13 * - * @param \DOMNode $node + * @param \DOMElement $node * @throws InvalidValueException If the node value is not valid * @return string|int|float|bool|\DateTime|\DateInterval The value associated with the cell, empty string if cell's type is void/undefined */ @@ -96,7 +96,7 @@ class CellValueFormatter /** * Returns the cell String value. * - * @param \DOMNode $node + * @param \DOMElement $node * @return string The value associated with the cell */ protected function formatStringCellValue($node) @@ -115,7 +115,7 @@ class CellValueFormatter } /** - * @param $pNode + * @param \DOMNode $pNode * @return string */ private function extractTextValueFromNode($pNode) @@ -159,7 +159,7 @@ class CellValueFormatter * * @see https://docs.oasis-open.org/office/v1.2/os/OpenDocument-v1.2-os-part1.html#__RefHeading__1415200_253892949 * - * @param \DOMNode $node The XML node representing a whitespace + * @param \DOMElement $node The XML node representing a whitespace * @return string The corresponding whitespace value */ private function transformWhitespaceNode($node) @@ -173,7 +173,7 @@ class CellValueFormatter /** * Returns the cell Numeric value from the given node. * - * @param \DOMNode $node + * @param \DOMElement $node * @return int|float The value associated with the cell */ protected function formatFloatCellValue($node) @@ -190,7 +190,7 @@ class CellValueFormatter /** * Returns the cell Boolean value from the given node. * - * @param \DOMNode $node + * @param \DOMElement $node * @return bool The value associated with the cell */ protected function formatBooleanCellValue($node) @@ -203,7 +203,7 @@ class CellValueFormatter /** * Returns the cell Date value from the given node. * - * @param \DOMNode $node + * @param \DOMElement $node * @throws InvalidValueException If the value is not a valid date * @return \DateTime|string The value associated with the cell */ @@ -234,7 +234,7 @@ class CellValueFormatter /** * Returns the cell Time value from the given node. * - * @param \DOMNode $node + * @param \DOMElement $node * @throws InvalidValueException If the value is not a valid time * @return \DateInterval|string The value associated with the cell */ @@ -265,7 +265,7 @@ class CellValueFormatter /** * Returns the cell Currency value from the given node. * - * @param \DOMNode $node + * @param \DOMElement $node * @return string The value associated with the cell (e.g. "100 USD" or "9.99 EUR") */ protected function formatCurrencyCellValue($node) @@ -279,7 +279,7 @@ class CellValueFormatter /** * Returns the cell Percentage value from the given node. * - * @param \DOMNode $node + * @param \DOMElement $node * @return int|float The value associated with the cell */ protected function formatPercentageCellValue($node) diff --git a/src/Spout/Reader/ODS/RowIterator.php b/src/Spout/Reader/ODS/RowIterator.php index 29643b7..f9a0733 100644 --- a/src/Spout/Reader/ODS/RowIterator.php +++ b/src/Spout/Reader/ODS/RowIterator.php @@ -56,7 +56,7 @@ class RowIterator implements IteratorInterface /** @var Row The currently processed row */ protected $currentlyProcessedRow; - /** @var Row Buffer used to store the current row, while checking if there are more rows to read */ + /** @var Row|null Buffer used to store the current row, while checking if there are more rows to read */ protected $rowBuffer; /** @var bool Indicates whether all rows have been read */ @@ -68,7 +68,7 @@ class RowIterator implements IteratorInterface /** @var int Row index to be processed next (one-based) */ protected $nextRowIndexToBeProcessed = 1; - /** @var Cell Last processed cell (because when reading cell at column N+1, cell N is processed) */ + /** @var Cell|null Last processed cell (because when reading cell at column N+1, cell N is processed) */ protected $lastProcessedCell; /** @var int Number of times the last processed row should be repeated */ @@ -225,6 +225,7 @@ class RowIterator implements IteratorInterface $currentNumColumnsRepeated = $this->getNumColumnsRepeatedForCurrentNode($xmlReader); // NOTE: expand() will automatically decode all XML entities of the child nodes + /** @var \DOMElement $node */ $node = $xmlReader->expand(); $currentCell = $this->getCell($node); @@ -316,7 +317,7 @@ class RowIterator implements IteratorInterface /** * Returns the cell with (unescaped) correctly marshalled, cell value associated to the given XML node. * - * @param \DOMNode $node + * @param \DOMElement $node * @return Cell The cell set with the associated with the cell */ protected function getCell($node) @@ -339,7 +340,7 @@ class RowIterator implements IteratorInterface * row data yet (as we still need to apply the "num-columns-repeated" attribute). * * @param Row $currentRow - * @param Cell $lastReadCell The last read cell + * @param Cell|null $lastReadCell The last read cell * @return bool Whether the row is empty */ protected function isEmptyRow($currentRow, $lastReadCell) diff --git a/src/Spout/Reader/ODS/SheetIterator.php b/src/Spout/Reader/ODS/SheetIterator.php index c396d79..b2cb8b8 100644 --- a/src/Spout/Reader/ODS/SheetIterator.php +++ b/src/Spout/Reader/ODS/SheetIterator.php @@ -108,6 +108,7 @@ class SheetIterator implements IteratorInterface $sheetsVisibility = []; $this->xmlReader->readUntilNodeFound(self::XML_NODE_AUTOMATIC_STYLES); + /** @var \DOMElement $automaticStylesNode */ $automaticStylesNode = $this->xmlReader->expand(); $tableStyleNodes = $automaticStylesNode->getElementsByTagNameNS(self::XML_STYLE_NAMESPACE, self::XML_NODE_STYLE_TABLE_PROPERTIES); diff --git a/src/Spout/Reader/ReaderAbstract.php b/src/Spout/Reader/ReaderAbstract.php index 39b333d..1ef1c20 100644 --- a/src/Spout/Reader/ReaderAbstract.php +++ b/src/Spout/Reader/ReaderAbstract.php @@ -53,7 +53,7 @@ abstract class ReaderAbstract implements ReaderInterface /** * Closes the reader. To be used after reading the file. * - * @return ReaderAbstract + * @return void */ abstract protected function closeReader(); diff --git a/src/Spout/Reader/XLSX/Creator/InternalEntityFactory.php b/src/Spout/Reader/XLSX/Creator/InternalEntityFactory.php index 4dc2dc7..d5ab4c9 100644 --- a/src/Spout/Reader/XLSX/Creator/InternalEntityFactory.php +++ b/src/Spout/Reader/XLSX/Creator/InternalEntityFactory.php @@ -152,7 +152,7 @@ class InternalEntityFactory implements InternalEntityFactoryInterface } /** - * @param $xmlReader + * @param XMLReader $xmlReader * @return XMLProcessor */ public function createXMLProcessor($xmlReader) diff --git a/src/Spout/Reader/XLSX/Helper/CellValueFormatter.php b/src/Spout/Reader/XLSX/Helper/CellValueFormatter.php index 5fcd794..cf4c383 100644 --- a/src/Spout/Reader/XLSX/Helper/CellValueFormatter.php +++ b/src/Spout/Reader/XLSX/Helper/CellValueFormatter.php @@ -66,7 +66,7 @@ class CellValueFormatter /** * Returns the (unescaped) correctly marshalled, cell value associated to the given XML node. * - * @param \DOMNode $node + * @param \DOMElement $node * @throws InvalidValueException If the value is not valid * @return string|int|float|bool|\DateTime The value associated with the cell */ @@ -102,7 +102,7 @@ class CellValueFormatter /** * Returns the cell's string value from a node's nested value node * - * @param \DOMNode $node + * @param \DOMElement $node * @return string The value associated with the cell */ protected function getVNodeValue($node) @@ -117,7 +117,7 @@ class CellValueFormatter /** * Returns the cell String value where string is inline. * - * @param \DOMNode $node + * @param \DOMElement $node * @return string The value associated with the cell */ protected function formatInlineStringCellValue($node) diff --git a/src/Spout/Reader/XLSX/Manager/SharedStringsCaching/FileBasedStrategy.php b/src/Spout/Reader/XLSX/Manager/SharedStringsCaching/FileBasedStrategy.php index 60e69b0..9a4142b 100644 --- a/src/Spout/Reader/XLSX/Manager/SharedStringsCaching/FileBasedStrategy.php +++ b/src/Spout/Reader/XLSX/Manager/SharedStringsCaching/FileBasedStrategy.php @@ -32,7 +32,7 @@ class FileBasedStrategy implements CachingStrategyInterface */ protected $maxNumStringsPerTempFile; - /** @var resource Pointer to the last temp file a shared string was written to */ + /** @var resource|null Pointer to the last temp file a shared string was written to */ protected $tempFilePointer; /** diff --git a/src/Spout/Reader/XLSX/Manager/SharedStringsManager.php b/src/Spout/Reader/XLSX/Manager/SharedStringsManager.php index 46cbe6d..85d0103 100644 --- a/src/Spout/Reader/XLSX/Manager/SharedStringsManager.php +++ b/src/Spout/Reader/XLSX/Manager/SharedStringsManager.php @@ -179,6 +179,7 @@ class SharedStringsManager $sharedStringValue = ''; // NOTE: expand() will automatically decode all XML entities of the child nodes + /** @var \DOMElement $siNode */ $siNode = $xmlReader->expand(); $textNodes = $siNode->getElementsByTagName(self::XML_NODE_T); diff --git a/src/Spout/Reader/XLSX/RowIterator.php b/src/Spout/Reader/XLSX/RowIterator.php index 93c2b9d..fcb2b88 100644 --- a/src/Spout/Reader/XLSX/RowIterator.php +++ b/src/Spout/Reader/XLSX/RowIterator.php @@ -276,6 +276,7 @@ class RowIterator implements IteratorInterface $currentColumnIndex = $this->getColumnIndex($xmlReader); // NOTE: expand() will automatically decode all XML entities of the child nodes + /** @var \DOMElement $node */ $node = $xmlReader->expand(); $cell = $this->getCell($node); @@ -352,7 +353,7 @@ class RowIterator implements IteratorInterface /** * Returns the cell with (unescaped) correctly marshalled, cell value associated to the given XML node. * - * @param \DOMNode $node + * @param \DOMElement $node * @return Cell The cell set with the associated with the cell */ protected function getCell($node) diff --git a/src/Spout/Writer/Common/Entity/Worksheet.php b/src/Spout/Writer/Common/Entity/Worksheet.php index 74c4976..1e496f0 100644 --- a/src/Spout/Writer/Common/Entity/Worksheet.php +++ b/src/Spout/Writer/Common/Entity/Worksheet.php @@ -11,7 +11,7 @@ class Worksheet /** @var string Path to the XML file that will contain the sheet data */ private $filePath; - /** @var resource Pointer to the sheet data file (e.g. xl/worksheets/sheet1.xml) */ + /** @var resource|null Pointer to the sheet data file (e.g. xl/worksheets/sheet1.xml) */ private $filePointer; /** @var Sheet The "external" sheet */ diff --git a/src/Spout/Writer/ODS/Creator/HelperFactory.php b/src/Spout/Writer/ODS/Creator/HelperFactory.php index e6aa645..cdc5a6a 100644 --- a/src/Spout/Writer/ODS/Creator/HelperFactory.php +++ b/src/Spout/Writer/ODS/Creator/HelperFactory.php @@ -30,7 +30,7 @@ class HelperFactory extends \Box\Spout\Common\Creator\HelperFactory } /** - * @param $entityFactory + * @param InternalEntityFactory $entityFactory * @return ZipHelper */ private function createZipHelper($entityFactory) diff --git a/src/Spout/Writer/ODS/Manager/WorksheetManager.php b/src/Spout/Writer/ODS/Manager/WorksheetManager.php index 7d7cb0e..e5d51c1 100644 --- a/src/Spout/Writer/ODS/Manager/WorksheetManager.php +++ b/src/Spout/Writer/ODS/Manager/WorksheetManager.php @@ -86,7 +86,7 @@ class WorksheetManager implements WorksheetManagerInterface * Returns the table XML root node as string. * * @param Worksheet $worksheet - * @return string node as string + * @return string "
" node as string */ public function getTableElementStartAsString(Worksheet $worksheet) { diff --git a/src/Spout/Writer/XLSX/Manager/Style/StyleManager.php b/src/Spout/Writer/XLSX/Manager/Style/StyleManager.php index f0ca9d9..4a72b2f 100644 --- a/src/Spout/Writer/XLSX/Manager/Style/StyleManager.php +++ b/src/Spout/Writer/XLSX/Manager/Style/StyleManager.php @@ -2,6 +2,7 @@ namespace Box\Spout\Writer\XLSX\Manager\Style; +use Box\Spout\Common\Entity\Style\BorderPart; use Box\Spout\Common\Entity\Style\Color; use Box\Spout\Common\Entity\Style\Style; use Box\Spout\Writer\XLSX\Helper\BorderHelper; @@ -186,7 +187,7 @@ EOD; $content .= ''; foreach ($registeredBorders as $styleId) { - /** @var \Box\Spout\Common\Entity\Style\Style $style */ + /** @var Style $style */ $style = $this->styleRegistry->getStyleFromStyleId($styleId); $border = $style->getBorder(); $content .= ''; @@ -196,7 +197,7 @@ EOD; foreach ($sortOrder as $partName) { if ($border->hasPart($partName)) { - /** @var $part \Box\Spout\Common\Entity\Style\BorderPart */ + /** @var BorderPart $part */ $part = $border->getPart($partName); $content .= BorderHelper::serializeBorderPart($part); } diff --git a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php index 25bb88d..1d90da5 100644 --- a/src/Spout/Writer/XLSX/Manager/WorksheetManager.php +++ b/src/Spout/Writer/XLSX/Manager/WorksheetManager.php @@ -240,6 +240,7 @@ EOD; } elseif ($cell->isBoolean()) { $cellXML .= ' t="b">' . (int) ($cell->getValue()) . ''; } elseif ($cell->isNumeric()) { + var_dump($cell); $cellXML .= '>' . $this->stringHelper->formatNumericValue($cell->getValue()) . ''; } elseif ($cell->isError() && is_string($cell->getValueEvenIfError())) { // only writes the error value if it's a string diff --git a/tests/Spout/Common/Entity/RowTest.php b/tests/Spout/Common/Entity/RowTest.php index 9aa12f6..bc58499 100644 --- a/tests/Spout/Common/Entity/RowTest.php +++ b/tests/Spout/Common/Entity/RowTest.php @@ -7,7 +7,7 @@ use Box\Spout\Common\Entity\Style\Style; class RowTest extends \PHPUnit\Framework\TestCase { /** - * @return \PHPUnit_Framework_MockObject_MockObject|Style + * @return \PHPUnit\Framework\MockObject\MockObject|Style */ private function getStyleMock() { @@ -15,7 +15,7 @@ class RowTest extends \PHPUnit\Framework\TestCase } /** - * @return \PHPUnit_Framework_MockObject_MockObject|Cell + * @return \PHPUnit\Framework\MockObject\MockObject|Cell */ private function getCellMock() { diff --git a/tests/Spout/Common/Entity/Style/BorderTest.php b/tests/Spout/Common/Entity/Style/BorderTest.php index fa1e7ef..bb89af7 100644 --- a/tests/Spout/Common/Entity/Style/BorderTest.php +++ b/tests/Spout/Common/Entity/Style/BorderTest.php @@ -113,7 +113,7 @@ class BorderTest extends TestCase $border->addPart($borderPart); $this->assertCount(1, $border->getParts()); - /** @var $part BorderPart */ + /** @var BorderPart $part */ $part = $border->getParts()[$allowedName]; $this->assertEquals($allowedStyle, $part->getStyle()); diff --git a/tests/Spout/Common/Helper/EncodingHelperTest.php b/tests/Spout/Common/Helper/EncodingHelperTest.php index 8d3c158..ad4dd91 100644 --- a/tests/Spout/Common/Helper/EncodingHelperTest.php +++ b/tests/Spout/Common/Helper/EncodingHelperTest.php @@ -68,15 +68,15 @@ class EncodingHelperTest extends TestCase $this->expectException(EncodingConversionException::class); $helperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\GlobalFunctionsHelper') - ->setMethods(['iconv', 'mb_convert_encoding']) + ->onlyMethods(['iconv', 'mb_convert_encoding']) ->getMock(); $helperStub->method('iconv')->willReturn(false); $helperStub->method('mb_convert_encoding')->willReturn(false); - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->setConstructorArgs([$helperStub]) - ->setMethods(['canUseIconv', 'canUseMbString']) + ->onlyMethods(['canUseIconv', 'canUseMbString']) ->getMock(); $encodingHelperStub->method('canUseIconv')->willReturn($shouldUseIconv); $encodingHelperStub->method('canUseMbString')->willReturn(true); @@ -91,10 +91,10 @@ class EncodingHelperTest extends TestCase { $this->expectException(EncodingConversionException::class); - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->disableOriginalConstructor() - ->setMethods(['canUseIconv', 'canUseMbString']) + ->onlyMethods(['canUseIconv', 'canUseMbString']) ->getMock(); $encodingHelperStub->method('canUseIconv')->willReturn(false); $encodingHelperStub->method('canUseMbString')->willReturn(false); @@ -110,10 +110,10 @@ class EncodingHelperTest extends TestCase */ public function testAttemptConversionToUTF8ShouldReturnReencodedString($shouldUseIconv) { - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->setConstructorArgs([new GlobalFunctionsHelper()]) - ->setMethods(['canUseIconv', 'canUseMbString']) + ->onlyMethods(['canUseIconv', 'canUseMbString']) ->getMock(); $encodingHelperStub->method('canUseIconv')->willReturn($shouldUseIconv); $encodingHelperStub->method('canUseMbString')->willReturn(true); @@ -129,10 +129,10 @@ class EncodingHelperTest extends TestCase */ public function testAttemptConversionToUTF8ShouldBeNoopWhenTargetIsUTF8() { - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->disableOriginalConstructor() - ->setMethods(['canUseIconv']) + ->onlyMethods(['canUseIconv']) ->getMock(); $encodingHelperStub->expects($this->never())->method('canUseIconv'); @@ -151,15 +151,15 @@ class EncodingHelperTest extends TestCase $this->expectException(EncodingConversionException::class); $helperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\GlobalFunctionsHelper') - ->setMethods(['iconv', 'mb_convert_encoding']) + ->onlyMethods(['iconv', 'mb_convert_encoding']) ->getMock(); $helperStub->method('iconv')->willReturn(false); $helperStub->method('mb_convert_encoding')->willReturn(false); - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->setConstructorArgs([$helperStub]) - ->setMethods(['canUseIconv', 'canUseMbString']) + ->onlyMethods(['canUseIconv', 'canUseMbString']) ->getMock(); $encodingHelperStub->method('canUseIconv')->willReturn($shouldUseIconv); $encodingHelperStub->method('canUseMbString')->willReturn(true); @@ -174,10 +174,10 @@ class EncodingHelperTest extends TestCase { $this->expectException(EncodingConversionException::class); - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->disableOriginalConstructor() - ->setMethods(['canUseIconv', 'canUseMbString']) + ->onlyMethods(['canUseIconv', 'canUseMbString']) ->getMock(); $encodingHelperStub->method('canUseIconv')->willReturn(false); $encodingHelperStub->method('canUseMbString')->willReturn(false); @@ -193,10 +193,10 @@ class EncodingHelperTest extends TestCase */ public function testAttemptConversionFromUTF8ShouldReturnReencodedString($shouldUseIconv) { - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->setConstructorArgs([new GlobalFunctionsHelper()]) - ->setMethods(['canUseIconv', 'canUseMbString']) + ->onlyMethods(['canUseIconv', 'canUseMbString']) ->getMock(); $encodingHelperStub->method('canUseIconv')->willReturn($shouldUseIconv); $encodingHelperStub->method('canUseMbString')->willReturn(true); @@ -212,10 +212,10 @@ class EncodingHelperTest extends TestCase */ public function testAttemptConversionFromUTF8ShouldBeNoopWhenTargetIsUTF8() { - /** @var EncodingHelper $encodingHelperStub */ + /** @var EncodingHelper|\PHPUnit\Framework\MockObject\MockObject $encodingHelperStub */ $encodingHelperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\EncodingHelper') ->disableOriginalConstructor() - ->setMethods(['canUseIconv']) + ->onlyMethods(['canUseIconv']) ->getMock(); $encodingHelperStub->expects($this->never())->method('canUseIconv'); diff --git a/tests/Spout/Common/Helper/FileSystemHelperTest.php b/tests/Spout/Common/Helper/FileSystemHelperTest.php index 7eb0183..0eb314e 100644 --- a/tests/Spout/Common/Helper/FileSystemHelperTest.php +++ b/tests/Spout/Common/Helper/FileSystemHelperTest.php @@ -10,7 +10,7 @@ use PHPUnit\Framework\TestCase; */ class FileSystemHelperTest extends TestCase { - /** @var \Box\Spout\Writer\XLSX\Helper\FileSystemHelper */ + /** @var FileSystemHelper */ protected $fileSystemHelper; /** diff --git a/tests/Spout/Reader/CSV/ReaderTest.php b/tests/Spout/Reader/CSV/ReaderTest.php index 1d092f0..78f1d42 100644 --- a/tests/Spout/Reader/CSV/ReaderTest.php +++ b/tests/Spout/Reader/CSV/ReaderTest.php @@ -47,9 +47,9 @@ class ReaderTest extends TestCase { $this->expectException(IOException::class); - /** @var \Box\Spout\Common\Helper\GlobalFunctionsHelper|\PHPUnit_Framework_MockObject_MockObject $helperStub */ + /** @var \Box\Spout\Common\Helper\GlobalFunctionsHelper|\PHPUnit\Framework\MockObject\MockObject $helperStub */ $helperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\GlobalFunctionsHelper') - ->setMethods(['is_readable']) + ->onlyMethods(['is_readable']) ->getMock(); $helperStub->method('is_readable')->willReturn(false); @@ -66,9 +66,9 @@ class ReaderTest extends TestCase { $this->expectException(IOException::class); - /** @var \Box\Spout\Common\Helper\GlobalFunctionsHelper|\PHPUnit_Framework_MockObject_MockObject $helperStub */ + /** @var \Box\Spout\Common\Helper\GlobalFunctionsHelper|\PHPUnit\Framework\MockObject\MockObject $helperStub */ $helperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\GlobalFunctionsHelper') - ->setMethods(['fopen']) + ->onlyMethods(['fopen']) ->getMock(); $helperStub->method('fopen')->willReturn(false); @@ -304,9 +304,9 @@ class ReaderTest extends TestCase $allRows = []; $resourcePath = $this->getResourcePath($fileName); - /** @var \Box\Spout\Common\Helper\GlobalFunctionsHelper|\PHPUnit_Framework_MockObject_MockObject $helperStub */ + /** @var \Box\Spout\Common\Helper\GlobalFunctionsHelper|\PHPUnit\Framework\MockObject\MockObject $helperStub */ $helperStub = $this->getMockBuilder('\Box\Spout\Common\Helper\GlobalFunctionsHelper') - ->setMethods(['function_exists']) + ->onlyMethods(['function_exists']) ->getMock(); $returnValueMap = [ diff --git a/tests/Spout/Reader/XLSX/Manager/SharedStringsCaching/CachingStrategyFactoryTest.php b/tests/Spout/Reader/XLSX/Manager/SharedStringsCaching/CachingStrategyFactoryTest.php index 6216b40..5b75cbd 100644 --- a/tests/Spout/Reader/XLSX/Manager/SharedStringsCaching/CachingStrategyFactoryTest.php +++ b/tests/Spout/Reader/XLSX/Manager/SharedStringsCaching/CachingStrategyFactoryTest.php @@ -36,11 +36,11 @@ class CachingStrategyFactoryTest extends TestCase */ public function testCreateBestCachingStrategy($sharedStringsUniqueCount, $memoryLimitInKB, $expectedStrategyClassName) { - /** @var CachingStrategyFactory|\PHPUnit_Framework_MockObject_MockObject $factoryStub */ + /** @var CachingStrategyFactory|\PHPUnit\Framework\MockObject\MockObject $factoryStub */ $factoryStub = $this ->getMockBuilder('\Box\Spout\Reader\XLSX\Manager\SharedStringsCaching\CachingStrategyFactory') ->disableOriginalConstructor() - ->setMethods(['getMemoryLimitInKB']) + ->onlyMethods(['getMemoryLimitInKB']) ->getMock(); $factoryStub->method('getMemoryLimitInKB')->willReturn($memoryLimitInKB); @@ -84,11 +84,11 @@ class CachingStrategyFactoryTest extends TestCase */ public function testGetMemoryLimitInKB($memoryLimitFormatted, $expectedMemoryLimitInKB) { - /** @var CachingStrategyFactory|\PHPUnit_Framework_MockObject_MockObject $factoryStub */ + /** @var CachingStrategyFactory|\PHPUnit\Framework\MockObject\MockObject $factoryStub */ $factoryStub = $this ->getMockBuilder('\Box\Spout\Reader\XLSX\Manager\SharedStringsCaching\CachingStrategyFactory') ->disableOriginalConstructor() - ->setMethods(['getMemoryLimitFromIni']) + ->onlyMethods(['getMemoryLimitFromIni']) ->getMock(); $factoryStub->method('getMemoryLimitFromIni')->willReturn($memoryLimitFormatted); diff --git a/tests/Spout/Reader/XLSX/Manager/SharedStringsManagerTest.php b/tests/Spout/Reader/XLSX/Manager/SharedStringsManagerTest.php index f344b35..4c3e512 100644 --- a/tests/Spout/Reader/XLSX/Manager/SharedStringsManagerTest.php +++ b/tests/Spout/Reader/XLSX/Manager/SharedStringsManagerTest.php @@ -19,7 +19,7 @@ class SharedStringsManagerTest extends TestCase { use TestUsingResource; - /** @var SharedStringsManager */ + /** @var SharedStringsManager|null */ private $sharedStringsManager; /** diff --git a/tests/Spout/Reader/XLSX/Manager/StyleManagerTest.php b/tests/Spout/Reader/XLSX/Manager/StyleManagerTest.php index 794f4bc..7a98f0e 100644 --- a/tests/Spout/Reader/XLSX/Manager/StyleManagerTest.php +++ b/tests/Spout/Reader/XLSX/Manager/StyleManagerTest.php @@ -21,10 +21,10 @@ class StyleManagerTest extends TestCase $workbookRelationshipsManager = $this->createMock(WorkbookRelationshipsManager::class); $workbookRelationshipsManager->method('hasStylesXMLFile')->willReturn(true); - /** @var StyleManager $styleManager */ + /** @var StyleManager|\PHPUnit\Framework\MockObject\MockObject $styleManager */ $styleManager = $this->getMockBuilder('\Box\Spout\Reader\XLSX\Manager\StyleManager') ->setConstructorArgs(['/path/to/file.xlsx', $workbookRelationshipsManager, $entityFactory]) - ->setMethods(['getCustomNumberFormats', 'getStylesAttributes']) + ->onlyMethods(['getCustomNumberFormats', 'getStylesAttributes']) ->getMock(); $styleManager->method('getStylesAttributes')->willReturn($styleAttributes); diff --git a/tests/Spout/ReflectionHelper.php b/tests/Spout/ReflectionHelper.php index d958df0..e046046 100644 --- a/tests/Spout/ReflectionHelper.php +++ b/tests/Spout/ReflectionHelper.php @@ -95,7 +95,6 @@ class ReflectionHelper * * @param object $object * @param string $methodName - * @param *mixed|null $params * * @return mixed|null */ diff --git a/tests/Spout/Writer/ODS/WriterTest.php b/tests/Spout/Writer/ODS/WriterTest.php index dc86f7c..1d1ff44 100644 --- a/tests/Spout/Writer/ODS/WriterTest.php +++ b/tests/Spout/Writer/ODS/WriterTest.php @@ -348,6 +348,7 @@ class WriterTest extends TestCase $fileName = 'test_add_row_should_use_number_columns_repeated.ods'; $this->writeToODSFile($this->createRowsFromValues([$dataRow]), $fileName); + /** @var \DOMElement $sheetXmlNode */ $sheetXmlNode = $this->getSheetXmlNode($fileName, 1); $tableCellNodes = $sheetXmlNode->getElementsByTagName('table-cell'); diff --git a/tests/Spout/Writer/ODS/WriterWithStyleTest.php b/tests/Spout/Writer/ODS/WriterWithStyleTest.php index 75177da..3c7a6fd 100644 --- a/tests/Spout/Writer/ODS/WriterWithStyleTest.php +++ b/tests/Spout/Writer/ODS/WriterWithStyleTest.php @@ -88,6 +88,7 @@ class WriterWithStyleTest extends TestCase $this->assertCount(3, $cellStyleElements, 'There should be 3 separate cell styles, including the default one.'); // Second font should contain data from the first created style + /** @var \DOMElement $customFont1Element */ $customFont1Element = $cellStyleElements[1]; $this->assertFirstChildHasAttributeEquals('bold', $customFont1Element, 'text-properties', 'fo:font-weight'); $this->assertFirstChildHasAttributeEquals('italic', $customFont1Element, 'text-properties', 'fo:font-style'); @@ -95,6 +96,7 @@ class WriterWithStyleTest extends TestCase $this->assertFirstChildHasAttributeEquals('solid', $customFont1Element, 'text-properties', 'style:text-line-through-style'); // Third font should contain data from the second created style + /** @var \DOMElement $customFont2Element */ $customFont2Element = $cellStyleElements[2]; $this->assertFirstChildHasAttributeEquals('15pt', $customFont2Element, 'text-properties', 'fo:font-size'); $this->assertFirstChildHasAttributeEquals('#' . Color::RED, $customFont2Element, 'text-properties', 'fo:color'); @@ -397,7 +399,7 @@ class WriterWithStyleTest extends TestCase /** * @param string $fileName - * @return \DOMNode[] + * @return \DOMElement[] */ private function getCellElementsFromContentXmlFile($fileName) { @@ -410,7 +412,9 @@ class WriterWithStyleTest extends TestCase while ($xmlReader->read()) { if ($xmlReader->isPositionedOnStartingNode('table:table-cell') && $xmlReader->getAttribute('office:value-type') !== null) { - $cellElements[] = $xmlReader->expand(); + /** @var \DOMElement $cellElement */ + $cellElement = $xmlReader->expand(); + $cellElements[] = $cellElement; } } @@ -421,7 +425,7 @@ class WriterWithStyleTest extends TestCase /** * @param string $fileName - * @return \DOMNode[] + * @return \DOMElement[] */ private function getCellStyleElementsFromContentXmlFile($fileName) { @@ -434,7 +438,9 @@ class WriterWithStyleTest extends TestCase while ($xmlReader->read()) { if ($xmlReader->isPositionedOnStartingNode('style:style') && $xmlReader->getAttribute('style:family') === 'table-cell') { - $cellStyleElements[] = $xmlReader->expand(); + /** @var \DOMElement $cellStyleElement */ + $cellStyleElement = $xmlReader->expand(); + $cellStyleElements[] = $cellStyleElement; } } @@ -446,7 +452,7 @@ class WriterWithStyleTest extends TestCase /** * @param string $fileName * @param string $section - * @return \DomNode + * @return \DOMElement */ private function getXmlSectionFromStylesXmlFile($fileName, $section) { @@ -456,12 +462,15 @@ class WriterWithStyleTest extends TestCase $xmlReader->openFileInZip($resourcePath, 'styles.xml'); $xmlReader->readUntilNodeFound($section); - return $xmlReader->expand(); + /** @var \DOMElement $element */ + $element = $xmlReader->expand(); + + return $element; } /** * @param string $expectedValue - * @param \DOMNode $parentElement + * @param \DOMElement $parentElement * @param string $childTagName * @param string $attributeName * @return void diff --git a/tests/Spout/Writer/XLSX/Manager/Style/StyleManagerTest.php b/tests/Spout/Writer/XLSX/Manager/Style/StyleManagerTest.php index 3bb0f42..1c21cc3 100644 --- a/tests/Spout/Writer/XLSX/Manager/Style/StyleManagerTest.php +++ b/tests/Spout/Writer/XLSX/Manager/Style/StyleManagerTest.php @@ -40,7 +40,7 @@ class StyleManagerTest extends TestCase { $styleRegistryMock = $this->getMockBuilder(StyleRegistry::class) ->disableOriginalConstructor() - ->setMethods(['getFillIdForStyleId', 'getBorderIdForStyleId']) + ->onlyMethods(['getFillIdForStyleId', 'getBorderIdForStyleId']) ->getMock(); $styleRegistryMock diff --git a/tests/Spout/Writer/XLSX/WriterPerfTest.php b/tests/Spout/Writer/XLSX/WriterPerfTest.php index 66ff337..a0f6e90 100644 --- a/tests/Spout/Writer/XLSX/WriterPerfTest.php +++ b/tests/Spout/Writer/XLSX/WriterPerfTest.php @@ -102,7 +102,7 @@ class WriterPerfTest extends TestCase /** * @param string $filePath - * @return string + * @return int */ private function getLasRowNumberForFile($filePath) { diff --git a/tests/Spout/Writer/XLSX/WriterWithStyleTest.php b/tests/Spout/Writer/XLSX/WriterWithStyleTest.php index 2571df4..7237039 100644 --- a/tests/Spout/Writer/XLSX/WriterWithStyleTest.php +++ b/tests/Spout/Writer/XLSX/WriterWithStyleTest.php @@ -92,6 +92,7 @@ class WriterWithStyleTest extends TestCase $this->assertEquals(3, $fontElements->length, 'There should be 3 associated "font" elements, including the default one.'); // First font should be the default one + /** @var \DOMElement $defaultFontElement */ $defaultFontElement = $fontElements->item(0); $this->assertChildrenNumEquals(3, $defaultFontElement, 'The default font should only have 3 properties.'); $this->assertFirstChildHasAttributeEquals((string) OptionsManager::DEFAULT_FONT_SIZE, $defaultFontElement, 'sz', 'val'); @@ -99,6 +100,7 @@ class WriterWithStyleTest extends TestCase $this->assertFirstChildHasAttributeEquals(OptionsManager::DEFAULT_FONT_NAME, $defaultFontElement, 'name', 'val'); // Second font should contain data from the first created style + /** @var \DOMElement $secondFontElement */ $secondFontElement = $fontElements->item(1); $this->assertChildrenNumEquals(7, $secondFontElement, 'The font should only have 7 properties (4 custom styles + 3 default styles).'); $this->assertChildExists($secondFontElement, 'b'); @@ -110,6 +112,7 @@ class WriterWithStyleTest extends TestCase $this->assertFirstChildHasAttributeEquals(OptionsManager::DEFAULT_FONT_NAME, $secondFontElement, 'name', 'val'); // Third font should contain data from the second created style + /** @var \DOMElement $thirdFontElement */ $thirdFontElement = $fontElements->item(2); $this->assertChildrenNumEquals(3, $thirdFontElement, 'The font should only have 3 properties.'); $this->assertFirstChildHasAttributeEquals('15', $thirdFontElement, 'sz', 'val'); @@ -394,10 +397,14 @@ class WriterWithStyleTest extends TestCase '3 cell xfs present - a default one and two custom ones' ); - $firstCustomId = $styleXfsElements->childNodes->item(1)->getAttribute('fillId'); + /** @var \DOMElement $styleXfsElementChild1 */ + $styleXfsElementChild1 = $styleXfsElements->childNodes->item(1); + $firstCustomId = $styleXfsElementChild1->getAttribute('fillId'); $this->assertEquals(2, (int) $firstCustomId, 'The first custom fill id should have the index 2'); - $secondCustomId = $styleXfsElements->childNodes->item(2)->getAttribute('fillId'); + /** @var \DOMElement $styleXfsElementChild2 */ + $styleXfsElementChild2 = $styleXfsElements->childNodes->item(2); + $secondCustomId = $styleXfsElementChild2->getAttribute('fillId'); $this->assertEquals(2, (int) $secondCustomId, 'The second custom fill id should have the index 2'); } @@ -607,7 +614,7 @@ class WriterWithStyleTest extends TestCase /** * @param string $fileName * @param string $section - * @return \DomElement + * @return \DOMElement */ private function getXmlSectionFromStylesXmlFile($fileName, $section) { @@ -617,6 +624,7 @@ class WriterWithStyleTest extends TestCase $xmlReader->openFileInZip($resourcePath, 'xl/styles.xml'); $xmlReader->readUntilNodeFound($section); + /** @var \DOMElement $xmlSection */ $xmlSection = $xmlReader->expand(); $xmlReader->close(); @@ -626,7 +634,7 @@ class WriterWithStyleTest extends TestCase /** * @param string $fileName - * @return \DOMNode[] + * @return \DOMElement[] */ private function getCellElementsFromSheetXmlFile($fileName) { @@ -639,7 +647,9 @@ class WriterWithStyleTest extends TestCase while ($xmlReader->read()) { if ($xmlReader->isPositionedOnStartingNode('c')) { - $cellElements[] = $xmlReader->expand(); + /** @var \DOMElement $cellElement */ + $cellElement = $xmlReader->expand(); + $cellElements[] = $cellElement; } } @@ -650,7 +660,7 @@ class WriterWithStyleTest extends TestCase /** * @param string $expectedValue - * @param \DOMNode $parentElement + * @param \DOMElement $parentElement * @param string $childTagName * @param string $attributeName * @return void @@ -662,7 +672,7 @@ class WriterWithStyleTest extends TestCase /** * @param int $expectedNumber - * @param \DOMNode $parentElement + * @param \DOMElement $parentElement * @param string $message * @return void */ @@ -672,7 +682,7 @@ class WriterWithStyleTest extends TestCase } /** - * @param \DOMNode $parentElement + * @param \DOMElement $parentElement * @param string $childTagName * @return void */