Composer upgrade
This commit is contained in:
+9
-11
@@ -454,11 +454,13 @@ return array(
|
|||||||
'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
|
'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
|
||||||
'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
|
'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
|
||||||
'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
|
'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
|
||||||
|
'PharIo\\Version\\BuildMetaData' => $vendorDir . '/phar-io/version/src/BuildMetaData.php',
|
||||||
'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
|
'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
|
||||||
'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php',
|
'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php',
|
||||||
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
|
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
|
||||||
'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
|
'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
|
||||||
'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php',
|
'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php',
|
||||||
|
'PharIo\\Version\\NoBuildMetaDataException' => $vendorDir . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php',
|
||||||
'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
|
'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
|
||||||
'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
|
'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
|
||||||
'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php',
|
'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php',
|
||||||
@@ -478,10 +480,7 @@ return array(
|
|||||||
'SebastianBergmann\\CliParser\\UnknownOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
|
'SebastianBergmann\\CliParser\\UnknownOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
|
'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
|
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\CrapIndex' => $vendorDir . '/phpunit/php-code-coverage/src/CrapIndex.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php',
|
'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Directory.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\DirectoryCouldNotBeCreatedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
|
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
|
'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
|
'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
|
||||||
@@ -503,11 +502,11 @@ return array(
|
|||||||
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
|
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => $vendorDir . '/phpunit/php-code-coverage/src/Node/CrapIndex.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\ParserException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
|
'SebastianBergmann\\CodeCoverage\\ParserException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Percentage' => $vendorDir . '/phpunit/php-code-coverage/src/Percentage.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php',
|
'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php',
|
'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\ReflectionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
|
'SebastianBergmann\\CodeCoverage\\ReflectionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
|
||||||
@@ -536,19 +535,18 @@ return array(
|
|||||||
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
|
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
|
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Cache' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/Cache.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingCoveredFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingCoveredFileAnalyser.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingUncoveredFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingUncoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CoveredFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingCoveredFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingCoveredFileAnalyser.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingUncoveredFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingUncoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\UncoveredFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/UncoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
|
'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
|
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Filesystem.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Percentage.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
|
'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\XmlException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
|
'SebastianBergmann\\CodeCoverage\\XmlException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
|
||||||
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
|
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
|
||||||
|
|||||||
+9
-11
@@ -519,11 +519,13 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
|
|||||||
'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
|
'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php',
|
||||||
'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
|
'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php',
|
||||||
'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
|
'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php',
|
||||||
|
'PharIo\\Version\\BuildMetaData' => __DIR__ . '/..' . '/phar-io/version/src/BuildMetaData.php',
|
||||||
'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
|
'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php',
|
||||||
'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php',
|
'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php',
|
||||||
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
|
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php',
|
||||||
'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
|
'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php',
|
||||||
'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php',
|
'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php',
|
||||||
|
'PharIo\\Version\\NoBuildMetaDataException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php',
|
||||||
'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
|
'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php',
|
||||||
'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
|
'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php',
|
||||||
'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php',
|
'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php',
|
||||||
@@ -543,10 +545,7 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
|
|||||||
'SebastianBergmann\\CliParser\\UnknownOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
|
'SebastianBergmann\\CliParser\\UnknownOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
|
'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php',
|
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\CrapIndex' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CrapIndex.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php',
|
'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Directory.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\DirectoryCouldNotBeCreatedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php',
|
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
|
'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
|
'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php',
|
||||||
@@ -568,11 +567,11 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
|
|||||||
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
|
'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/CrapIndex.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php',
|
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\ParserException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
|
'SebastianBergmann\\CodeCoverage\\ParserException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ParserException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Percentage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Percentage.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php',
|
'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php',
|
'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\ReflectionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
|
'SebastianBergmann\\CodeCoverage\\ReflectionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php',
|
||||||
@@ -601,19 +600,18 @@ class ComposerStaticInit10fe8fe2ec4017b8644d2b64bcf398b9
|
|||||||
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
|
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
|
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\Cache' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/Cache.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingCoveredFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingCoveredFileAnalyser.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingUncoveredFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingUncoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CoveredFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingCoveredFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingCoveredFileAnalyser.php',
|
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingUncoveredFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingUncoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\UncoveredFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/UncoveredFileAnalyser.php',
|
|
||||||
'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
|
'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
|
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Filesystem.php',
|
||||||
|
'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Percentage.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php',
|
'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php',
|
||||||
'SebastianBergmann\\CodeCoverage\\XmlException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
|
'SebastianBergmann\\CodeCoverage\\XmlException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XmlException.php',
|
||||||
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
|
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
|
||||||
|
|||||||
Vendored
+32
-32
@@ -257,23 +257,23 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/version",
|
"name": "phar-io/version",
|
||||||
"version": "3.1.0",
|
"version": "3.2.1",
|
||||||
"version_normalized": "3.1.0.0",
|
"version_normalized": "3.2.1.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phar-io/version.git",
|
"url": "https://github.com/phar-io/version.git",
|
||||||
"reference": "bae7c545bef187884426f042434e561ab1ddb182"
|
"reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
|
"url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
|
||||||
"reference": "bae7c545bef187884426f042434e561ab1ddb182",
|
"reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^7.2 || ^8.0"
|
"php": "^7.2 || ^8.0"
|
||||||
},
|
},
|
||||||
"time": "2021-02-23T14:00:09+00:00",
|
"time": "2022-02-21T01:04:05+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
@@ -305,7 +305,7 @@
|
|||||||
"description": "Library for handling version information and constraints",
|
"description": "Library for handling version information and constraints",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/phar-io/version/issues",
|
"issues": "https://github.com/phar-io/version/issues",
|
||||||
"source": "https://github.com/phar-io/version/tree/3.1.0"
|
"source": "https://github.com/phar-io/version/tree/3.2.1"
|
||||||
},
|
},
|
||||||
"install-path": "../phar-io/version"
|
"install-path": "../phar-io/version"
|
||||||
},
|
},
|
||||||
@@ -550,17 +550,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
"version": "9.2.10",
|
"version": "9.2.13",
|
||||||
"version_normalized": "9.2.10.0",
|
"version_normalized": "9.2.13.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||||
"reference": "d5850aaf931743067f4bfc1ae4cbd06468400687"
|
"reference": "deac8540cb7bd40b2b8cfa679b76202834fd04e8"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687",
|
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/deac8540cb7bd40b2b8cfa679b76202834fd04e8",
|
||||||
"reference": "d5850aaf931743067f4bfc1ae4cbd06468400687",
|
"reference": "deac8540cb7bd40b2b8cfa679b76202834fd04e8",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -585,7 +585,7 @@
|
|||||||
"ext-pcov": "*",
|
"ext-pcov": "*",
|
||||||
"ext-xdebug": "*"
|
"ext-xdebug": "*"
|
||||||
},
|
},
|
||||||
"time": "2021-12-05T09:12:13+00:00",
|
"time": "2022-02-23T17:02:38+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -618,7 +618,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10"
|
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.13"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -883,17 +883,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/phpunit",
|
"name": "phpunit/phpunit",
|
||||||
"version": "9.5.11",
|
"version": "9.5.16",
|
||||||
"version_normalized": "9.5.11.0",
|
"version_normalized": "9.5.16.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||||
"reference": "2406855036db1102126125537adb1406f7242fdd"
|
"reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2406855036db1102126125537adb1406f7242fdd",
|
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/5ff8c545a50226c569310a35f4fa89d79f1ddfdc",
|
||||||
"reference": "2406855036db1102126125537adb1406f7242fdd",
|
"reference": "5ff8c545a50226c569310a35f4fa89d79f1ddfdc",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -909,7 +909,7 @@
|
|||||||
"phar-io/version": "^3.0.2",
|
"phar-io/version": "^3.0.2",
|
||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
"phpspec/prophecy": "^1.12.1",
|
"phpspec/prophecy": "^1.12.1",
|
||||||
"phpunit/php-code-coverage": "^9.2.7",
|
"phpunit/php-code-coverage": "^9.2.13",
|
||||||
"phpunit/php-file-iterator": "^3.0.5",
|
"phpunit/php-file-iterator": "^3.0.5",
|
||||||
"phpunit/php-invoker": "^3.1.1",
|
"phpunit/php-invoker": "^3.1.1",
|
||||||
"phpunit/php-text-template": "^2.0.3",
|
"phpunit/php-text-template": "^2.0.3",
|
||||||
@@ -934,7 +934,7 @@
|
|||||||
"ext-soap": "*",
|
"ext-soap": "*",
|
||||||
"ext-xdebug": "*"
|
"ext-xdebug": "*"
|
||||||
},
|
},
|
||||||
"time": "2021-12-25T07:07:57+00:00",
|
"time": "2022-02-23T17:10:58+00:00",
|
||||||
"bin": [
|
"bin": [
|
||||||
"phpunit"
|
"phpunit"
|
||||||
],
|
],
|
||||||
@@ -946,11 +946,11 @@
|
|||||||
},
|
},
|
||||||
"installation-source": "dist",
|
"installation-source": "dist",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
|
||||||
"src/"
|
|
||||||
],
|
|
||||||
"files": [
|
"files": [
|
||||||
"src/Framework/Assert/Functions.php"
|
"src/Framework/Assert/Functions.php"
|
||||||
|
],
|
||||||
|
"classmap": [
|
||||||
|
"src/"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
@@ -973,7 +973,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.11"
|
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.16"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
@@ -1517,17 +1517,17 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/global-state",
|
"name": "sebastian/global-state",
|
||||||
"version": "5.0.3",
|
"version": "5.0.5",
|
||||||
"version_normalized": "5.0.3.0",
|
"version_normalized": "5.0.5.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/global-state.git",
|
"url": "https://github.com/sebastianbergmann/global-state.git",
|
||||||
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49"
|
"reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49",
|
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2",
|
||||||
"reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49",
|
"reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@@ -1542,7 +1542,7 @@
|
|||||||
"suggest": {
|
"suggest": {
|
||||||
"ext-uopz": "*"
|
"ext-uopz": "*"
|
||||||
},
|
},
|
||||||
"time": "2021-06-11T13:31:12+00:00",
|
"time": "2022-02-14T08:28:10+00:00",
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
@@ -1572,7 +1572,7 @@
|
|||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/sebastianbergmann/global-state/issues",
|
"issues": "https://github.com/sebastianbergmann/global-state/issues",
|
||||||
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3"
|
"source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5"
|
||||||
},
|
},
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
|
|||||||
Vendored
+14
-14
@@ -5,7 +5,7 @@
|
|||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '4bac10bb428149dbadcaafbdd97431b1bf11d987',
|
'reference' => 'f2c0ba737ac5dcfb2bfd5467f5395f8fb1dcfe07',
|
||||||
'name' => 'gullevek/corelibs',
|
'name' => 'gullevek/corelibs',
|
||||||
'dev' => true,
|
'dev' => true,
|
||||||
),
|
),
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../../',
|
'install_path' => __DIR__ . '/../../',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '4bac10bb428149dbadcaafbdd97431b1bf11d987',
|
'reference' => 'f2c0ba737ac5dcfb2bfd5467f5395f8fb1dcfe07',
|
||||||
'dev_requirement' => false,
|
'dev_requirement' => false,
|
||||||
),
|
),
|
||||||
'myclabs/deep-copy' => array(
|
'myclabs/deep-copy' => array(
|
||||||
@@ -59,12 +59,12 @@
|
|||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'phar-io/version' => array(
|
'phar-io/version' => array(
|
||||||
'pretty_version' => '3.1.0',
|
'pretty_version' => '3.2.1',
|
||||||
'version' => '3.1.0.0',
|
'version' => '3.2.1.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../phar-io/version',
|
'install_path' => __DIR__ . '/../phar-io/version',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'bae7c545bef187884426f042434e561ab1ddb182',
|
'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74',
|
||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'phpdocumentor/reflection-common' => array(
|
'phpdocumentor/reflection-common' => array(
|
||||||
@@ -104,12 +104,12 @@
|
|||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'phpunit/php-code-coverage' => array(
|
'phpunit/php-code-coverage' => array(
|
||||||
'pretty_version' => '9.2.10',
|
'pretty_version' => '9.2.13',
|
||||||
'version' => '9.2.10.0',
|
'version' => '9.2.13.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../phpunit/php-code-coverage',
|
'install_path' => __DIR__ . '/../phpunit/php-code-coverage',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => 'd5850aaf931743067f4bfc1ae4cbd06468400687',
|
'reference' => 'deac8540cb7bd40b2b8cfa679b76202834fd04e8',
|
||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'phpunit/php-file-iterator' => array(
|
'phpunit/php-file-iterator' => array(
|
||||||
@@ -149,12 +149,12 @@
|
|||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'phpunit/phpunit' => array(
|
'phpunit/phpunit' => array(
|
||||||
'pretty_version' => '9.5.11',
|
'pretty_version' => '9.5.16',
|
||||||
'version' => '9.5.11.0',
|
'version' => '9.5.16.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../phpunit/phpunit',
|
'install_path' => __DIR__ . '/../phpunit/phpunit',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '2406855036db1102126125537adb1406f7242fdd',
|
'reference' => '5ff8c545a50226c569310a35f4fa89d79f1ddfdc',
|
||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'sebastian/cli-parser' => array(
|
'sebastian/cli-parser' => array(
|
||||||
@@ -230,12 +230,12 @@
|
|||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'sebastian/global-state' => array(
|
'sebastian/global-state' => array(
|
||||||
'pretty_version' => '5.0.3',
|
'pretty_version' => '5.0.5',
|
||||||
'version' => '5.0.3.0',
|
'version' => '5.0.5.0',
|
||||||
'type' => 'library',
|
'type' => 'library',
|
||||||
'install_path' => __DIR__ . '/../sebastian/global-state',
|
'install_path' => __DIR__ . '/../sebastian/global-state',
|
||||||
'aliases' => array(),
|
'aliases' => array(),
|
||||||
'reference' => '23bd5951f7ff26f12d4e3242864df3e08dec4e49',
|
'reference' => '0ca8db5a5fc9c8646244e629625ac486fa286bf2',
|
||||||
'dev_requirement' => true,
|
'dev_requirement' => true,
|
||||||
),
|
),
|
||||||
'sebastian/lines-of-code' => array(
|
'sebastian/lines-of-code' => array(
|
||||||
|
|||||||
+22
-1
@@ -2,9 +2,30 @@
|
|||||||
|
|
||||||
All notable changes to phar-io/version are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
|
All notable changes to phar-io/version are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
|
||||||
|
|
||||||
|
## [3.2.1] - 2022-02-21
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Have ExactVersionConstraint honor build metadata (added in 3.2.0)
|
||||||
|
|
||||||
|
|
||||||
|
## [3.2.0] - 2022-02-21
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Build metadata is now supported and considered for equality checks only
|
||||||
|
|
||||||
|
|
||||||
|
## [3.1.1] - 2022-02-07
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [#28](https://github.com/phar-io/version/issues/28): `VersionConstraintParser` does not support logical OR represented by single pipe (|) (Thanks @llaville)
|
||||||
|
|
||||||
|
|
||||||
## [3.1.0] - 2021-02-23
|
## [3.1.0] - 2021-02-23
|
||||||
|
|
||||||
>### Changed
|
### Changed
|
||||||
|
|
||||||
- Internal Refactoring
|
- Internal Refactoring
|
||||||
- More scalar types
|
- More scalar types
|
||||||
|
|||||||
Vendored
+1
-3
@@ -1,5 +1,3 @@
|
|||||||
phar-io/version
|
|
||||||
|
|
||||||
Copyright (c) 2016-2017 Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de> and contributors
|
Copyright (c) 2016-2017 Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de> and contributors
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
@@ -13,7 +11,7 @@ are permitted provided that the following conditions are met:
|
|||||||
this list of conditions and the following disclaimer in the documentation
|
this list of conditions and the following disclaimer in the documentation
|
||||||
and/or other materials provided with the distribution.
|
and/or other materials provided with the distribution.
|
||||||
|
|
||||||
* Neither the name of Arne Blankerts nor the names of contributors
|
* Neither the name of the copyright holder nor the names of contributors
|
||||||
may be used to endorse or promote products derived from this software
|
may be used to endorse or promote products derived from this software
|
||||||
without specific prior written permission.
|
without specific prior written permission.
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
<?php declare(strict_types = 1);
|
||||||
|
/*
|
||||||
|
* This file is part of PharIo\Version.
|
||||||
|
*
|
||||||
|
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
namespace PharIo\Version;
|
||||||
|
|
||||||
|
class BuildMetaData {
|
||||||
|
|
||||||
|
/** @var string */
|
||||||
|
private $value;
|
||||||
|
|
||||||
|
public function __construct(string $value) {
|
||||||
|
$this->value = $value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function asString(): string {
|
||||||
|
return $this->value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function equals(BuildMetaData $other): bool {
|
||||||
|
return $this->asString() === $other->asString();
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-6
@@ -10,6 +10,7 @@ class PreReleaseSuffix {
|
|||||||
'beta' => 2,
|
'beta' => 2,
|
||||||
'rc' => 3,
|
'rc' => 3,
|
||||||
'p' => 4,
|
'p' => 4,
|
||||||
|
'pl' => 4,
|
||||||
'patch' => 4,
|
'patch' => 4,
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -59,15 +60,11 @@ class PreReleaseSuffix {
|
|||||||
private function mapValueToScore(string $value): int {
|
private function mapValueToScore(string $value): int {
|
||||||
$value = \strtolower($value);
|
$value = \strtolower($value);
|
||||||
|
|
||||||
if (\array_key_exists($value, self::valueScoreMap)) {
|
return self::valueScoreMap[$value];
|
||||||
return self::valueScoreMap[$value];
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function parseValue(string $value): void {
|
private function parseValue(string $value): void {
|
||||||
$regex = '/-?((dev|beta|b|rc|alpha|a|patch|p)\.?(\d*)).*$/i';
|
$regex = '/-?((dev|beta|b|rc|alpha|a|patch|p|pl)\.?(\d*)).*$/i';
|
||||||
|
|
||||||
if (\preg_match($regex, $value, $matches) !== 1) {
|
if (\preg_match($regex, $value, $matches) !== 1) {
|
||||||
throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value));
|
throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value));
|
||||||
|
|||||||
+52
-6
@@ -25,11 +25,17 @@ class Version {
|
|||||||
/** @var null|PreReleaseSuffix */
|
/** @var null|PreReleaseSuffix */
|
||||||
private $preReleaseSuffix;
|
private $preReleaseSuffix;
|
||||||
|
|
||||||
|
/** @var null|BuildMetaData */
|
||||||
|
private $buildMetadata;
|
||||||
|
|
||||||
public function __construct(string $versionString) {
|
public function __construct(string $versionString) {
|
||||||
$this->ensureVersionStringIsValid($versionString);
|
$this->ensureVersionStringIsValid($versionString);
|
||||||
$this->originalVersionString = $versionString;
|
$this->originalVersionString = $versionString;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws NoPreReleaseSuffixException
|
||||||
|
*/
|
||||||
public function getPreReleaseSuffix(): PreReleaseSuffix {
|
public function getPreReleaseSuffix(): PreReleaseSuffix {
|
||||||
if ($this->preReleaseSuffix === null) {
|
if ($this->preReleaseSuffix === null) {
|
||||||
throw new NoPreReleaseSuffixException('No pre-release suffix set');
|
throw new NoPreReleaseSuffixException('No pre-release suffix set');
|
||||||
@@ -62,7 +68,20 @@ class Version {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function equals(Version $other): bool {
|
public function equals(Version $other): bool {
|
||||||
return $this->getVersionString() === $other->getVersionString();
|
if ($this->getVersionString() !== $other->getVersionString()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->hasBuildMetaData() !== $other->hasBuildMetaData()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->hasBuildMetaData() && $other->hasBuildMetaData() &&
|
||||||
|
!$this->getBuildMetaData()->equals($other->getBuildMetaData())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isGreaterThan(Version $version): bool {
|
public function isGreaterThan(Version $version): bool {
|
||||||
@@ -117,6 +136,25 @@ class Version {
|
|||||||
return $this->patch;
|
return $this->patch;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @psalm-assert-if-true BuildMetaData $this->buildMetadata
|
||||||
|
* @psalm-assert-if-true BuildMetaData $this->getBuildMetaData()
|
||||||
|
*/
|
||||||
|
public function hasBuildMetaData(): bool {
|
||||||
|
return $this->buildMetadata !== null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @throws NoBuildMetaDataException
|
||||||
|
*/
|
||||||
|
public function getBuildMetaData(): BuildMetaData {
|
||||||
|
if (!$this->hasBuildMetaData()) {
|
||||||
|
throw new NoBuildMetaDataException('No build metadata set');
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->buildMetadata;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param string[] $matches
|
* @param string[] $matches
|
||||||
*
|
*
|
||||||
@@ -127,9 +165,13 @@ class Version {
|
|||||||
$this->minor = new VersionNumber((int)$matches['Minor']);
|
$this->minor = new VersionNumber((int)$matches['Minor']);
|
||||||
$this->patch = isset($matches['Patch']) ? new VersionNumber((int)$matches['Patch']) : new VersionNumber(0);
|
$this->patch = isset($matches['Patch']) ? new VersionNumber((int)$matches['Patch']) : new VersionNumber(0);
|
||||||
|
|
||||||
if (isset($matches['PreReleaseSuffix'])) {
|
if (isset($matches['PreReleaseSuffix']) && $matches['PreReleaseSuffix'] !== '') {
|
||||||
$this->preReleaseSuffix = new PreReleaseSuffix($matches['PreReleaseSuffix']);
|
$this->preReleaseSuffix = new PreReleaseSuffix($matches['PreReleaseSuffix']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($matches['BuildMetadata'])) {
|
||||||
|
$this->buildMetadata = new BuildMetaData($matches['BuildMetadata']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -139,15 +181,19 @@ class Version {
|
|||||||
*/
|
*/
|
||||||
private function ensureVersionStringIsValid($version): void {
|
private function ensureVersionStringIsValid($version): void {
|
||||||
$regex = '/^v?
|
$regex = '/^v?
|
||||||
(?<Major>(0|(?:[1-9]\d*)))
|
(?P<Major>0|[1-9]\d*)
|
||||||
\\.
|
\\.
|
||||||
(?<Minor>(0|(?:[1-9]\d*)))
|
(?P<Minor>0|[1-9]\d*)
|
||||||
(\\.
|
(\\.
|
||||||
(?<Patch>(0|(?:[1-9]\d*)))
|
(?P<Patch>0|[1-9]\d*)
|
||||||
)?
|
)?
|
||||||
(?:
|
(?:
|
||||||
-
|
-
|
||||||
(?<PreReleaseSuffix>(?:(dev|beta|b|rc|alpha|a|patch|p)\.?\d*))
|
(?<PreReleaseSuffix>(?:(dev|beta|b|rc|alpha|a|patch|p|pl)\.?\d*))
|
||||||
|
)?
|
||||||
|
(?:
|
||||||
|
\\+
|
||||||
|
(?P<BuildMetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-@]+)*)
|
||||||
)?
|
)?
|
||||||
$/xi';
|
$/xi';
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ class VersionConstraintParser {
|
|||||||
* @throws UnsupportedVersionConstraintException
|
* @throws UnsupportedVersionConstraintException
|
||||||
*/
|
*/
|
||||||
public function parse(string $value): VersionConstraint {
|
public function parse(string $value): VersionConstraint {
|
||||||
if (\strpos($value, '||') !== false) {
|
if (\strpos($value, '|') !== false) {
|
||||||
return $this->handleOrGroup($value);
|
return $this->handleOrGroup($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -58,7 +58,7 @@ class VersionConstraintParser {
|
|||||||
private function handleOrGroup(string $value): OrVersionConstraintGroup {
|
private function handleOrGroup(string $value): OrVersionConstraintGroup {
|
||||||
$constraints = [];
|
$constraints = [];
|
||||||
|
|
||||||
foreach (\explode('||', $value) as $groupSegment) {
|
foreach (\preg_split('{\s*\|\|?\s*}', \trim($value)) as $groupSegment) {
|
||||||
$constraints[] = $this->parse(\trim($groupSegment));
|
$constraints[] = $this->parse(\trim($groupSegment));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,12 @@ namespace PharIo\Version;
|
|||||||
|
|
||||||
class ExactVersionConstraint extends AbstractVersionConstraint {
|
class ExactVersionConstraint extends AbstractVersionConstraint {
|
||||||
public function complies(Version $version): bool {
|
public function complies(Version $version): bool {
|
||||||
return $this->asString() === $version->getVersionString();
|
$other = $version->getVersionString();
|
||||||
|
|
||||||
|
if ($version->hasBuildMetaData()) {
|
||||||
|
$other .= '+' . $version->getBuildMetaData()->asString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->asString() === $other;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?php declare(strict_types = 1);
|
||||||
|
namespace PharIo\Version;
|
||||||
|
|
||||||
|
class NoBuildMetaDataException extends \Exception implements Exception {
|
||||||
|
}
|
||||||
+40
-2
@@ -2,6 +2,41 @@
|
|||||||
|
|
||||||
All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
|
All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
|
||||||
|
|
||||||
|
## [9.2.13] - 2022-02-23
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* The contents of the static analysis sourcecode files is now used to generate the static analysis cache version identifier
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* Reverted rename of `SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData` to `SebastianBergmann\CodeCoverage\Data\ProcessedCodeCoverageData` (this class is marked as `@internal` and not covered by the backward compatibility promise, but it is (still) used directly by PHPUnit)
|
||||||
|
* Reverted rename of `SebastianBergmann\CodeCoverage\RawCodeCoverageData` to `SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData` (this class is marked as `@internal` and not covered by the backward compatibility promise, but it is (still) used directly by PHPUnit)
|
||||||
|
* The `ArrayDim`, `Cast`, and `MethodCall` nodes are now considered when determining whether a line of code is executable or not
|
||||||
|
|
||||||
|
## [9.2.12] - 2022-02-23 [YANKED]
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* [#898](https://github.com/sebastianbergmann/php-code-coverage/pull/898): Use content hash instead of `filemtime()` to determine cache hit/miss
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* [#736](https://github.com/sebastianbergmann/php-code-coverage/issues/736): HTML report generator allows invalid values for low upper bound and high lower bound
|
||||||
|
* [#854](https://github.com/sebastianbergmann/php-code-coverage/issues/854): "Class Coverage Distribution" and "Class Complexity" graphs are not displayed at full width
|
||||||
|
* [#897](https://github.com/sebastianbergmann/php-code-coverage/issues/897): `declare(strict_types=1)` marked as uncovered
|
||||||
|
|
||||||
|
## [9.2.11] - 2022-02-18
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* `CoveredFileAnalyser` and `UncoveredFileAnalyser` have been combined to `FileAnalyser`
|
||||||
|
* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.6.1, jQuery 3.6.0, and popper.js 1.16.1
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* [#889](https://github.com/sebastianbergmann/php-code-coverage/issues/889): Code Coverage depends on autoload order
|
||||||
|
|
||||||
## [9.2.10] - 2021-12-05
|
## [9.2.10] - 2021-12-05
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
@@ -286,7 +321,7 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
* Update HTML report Bootstrap 4.3.1, jQuery 3.4.1, and popper.js 1.15.0
|
* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.3.1, jQuery 3.4.1, and popper.js 1.15.0
|
||||||
|
|
||||||
## [7.0.7] - 2019-07-25
|
## [7.0.7] - 2019-07-25
|
||||||
|
|
||||||
@@ -322,7 +357,7 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt
|
|||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
* Updated HTML report to Bootstrap 4.3.0
|
* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.3.0
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
@@ -349,6 +384,9 @@ All notable changes are documented in this file using the [Keep a CHANGELOG](htt
|
|||||||
|
|
||||||
* This component is no longer supported on PHP 7.1
|
* This component is no longer supported on PHP 7.1
|
||||||
|
|
||||||
|
[9.2.13]: https://github.com/sebastianbergmann/php-code-coverage/compare/c011a0b6aaa4acd2f39b7f51fb4ad4442b6ec631...9.2.13
|
||||||
|
[9.2.12]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.11...c011a0b6aaa4acd2f39b7f51fb4ad4442b6ec631
|
||||||
|
[9.2.11]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.10...9.2.11
|
||||||
[9.2.10]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.9...9.2.10
|
[9.2.10]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.9...9.2.10
|
||||||
[9.2.9]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.8...9.2.9
|
[9.2.9]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.8...9.2.9
|
||||||
[9.2.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.7...9.2.8
|
[9.2.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.7...9.2.8
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
php-code-coverage
|
php-code-coverage
|
||||||
|
|
||||||
Copyright (c) 2009-2021, Sebastian Bergmann <sebastian@phpunit.de>.
|
Copyright (c) 2009-2022, Sebastian Bergmann <sebastian@phpunit.de>.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|||||||
+33
-44
@@ -29,12 +29,9 @@ use ReflectionClass;
|
|||||||
use SebastianBergmann\CodeCoverage\Driver\Driver;
|
use SebastianBergmann\CodeCoverage\Driver\Driver;
|
||||||
use SebastianBergmann\CodeCoverage\Node\Builder;
|
use SebastianBergmann\CodeCoverage\Node\Builder;
|
||||||
use SebastianBergmann\CodeCoverage\Node\Directory;
|
use SebastianBergmann\CodeCoverage\Node\Directory;
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\CachingCoveredFileAnalyser;
|
use SebastianBergmann\CodeCoverage\StaticAnalysis\CachingFileAnalyser;
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\CachingUncoveredFileAnalyser;
|
use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser;
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\CoveredFileAnalyser;
|
use SebastianBergmann\CodeCoverage\StaticAnalysis\ParsingFileAnalyser;
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\ParsingCoveredFileAnalyser;
|
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\ParsingUncoveredFileAnalyser;
|
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\UncoveredFileAnalyser;
|
|
||||||
use SebastianBergmann\CodeUnitReverseLookup\Wizard;
|
use SebastianBergmann\CodeUnitReverseLookup\Wizard;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -109,14 +106,9 @@ final class CodeCoverage
|
|||||||
private $parentClassesExcludedFromUnintentionallyCoveredCodeCheck = [];
|
private $parentClassesExcludedFromUnintentionallyCoveredCodeCheck = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ?CoveredFileAnalyser
|
* @var ?FileAnalyser
|
||||||
*/
|
*/
|
||||||
private $coveredFileAnalyser;
|
private $analyser;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var ?UncoveredFileAnalyser
|
|
||||||
*/
|
|
||||||
private $uncoveredFileAnalyser;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ?string
|
* @var ?string
|
||||||
@@ -136,7 +128,7 @@ final class CodeCoverage
|
|||||||
*/
|
*/
|
||||||
public function getReport(): Directory
|
public function getReport(): Directory
|
||||||
{
|
{
|
||||||
return (new Builder($this->coveredFileAnalyser()))->build($this);
|
return (new Builder($this->analyser()))->build($this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -167,8 +159,6 @@ final class CodeCoverage
|
|||||||
$this->processUncoveredFilesFromFilter();
|
$this->processUncoveredFilesFromFilter();
|
||||||
} elseif ($this->includeUncoveredFiles) {
|
} elseif ($this->includeUncoveredFiles) {
|
||||||
$this->addUncoveredFilesFromFilter();
|
$this->addUncoveredFilesFromFilter();
|
||||||
} else {
|
|
||||||
$this->data->removeFilesWithNoCoverage();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,6 +248,8 @@ final class CodeCoverage
|
|||||||
|
|
||||||
$this->applyFilter($rawData);
|
$this->applyFilter($rawData);
|
||||||
|
|
||||||
|
$this->applyExecutableLinesFilter($rawData);
|
||||||
|
|
||||||
if ($this->useAnnotationsForIgnoringCode) {
|
if ($this->useAnnotationsForIgnoringCode) {
|
||||||
$this->applyIgnoredLinesFilter($rawData);
|
$this->applyIgnoredLinesFilter($rawData);
|
||||||
}
|
}
|
||||||
@@ -468,7 +460,8 @@ final class CodeCoverage
|
|||||||
|
|
||||||
if (is_array($linesToBeCovered)) {
|
if (is_array($linesToBeCovered)) {
|
||||||
foreach ($linesToBeCovered as $fileToBeCovered => $includedLines) {
|
foreach ($linesToBeCovered as $fileToBeCovered => $includedLines) {
|
||||||
$rawData->keepCoverageDataOnlyForLines($fileToBeCovered, $includedLines);
|
$rawData->keepLineCoverageDataOnlyForLines($fileToBeCovered, $includedLines);
|
||||||
|
$rawData->keepFunctionCoverageDataOnlyForLines($fileToBeCovered, $includedLines);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -486,6 +479,20 @@ final class CodeCoverage
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function applyExecutableLinesFilter(RawCodeCoverageData $data): void
|
||||||
|
{
|
||||||
|
foreach (array_keys($data->lineCoverage()) as $filename) {
|
||||||
|
if (!$this->filter->isFile($filename)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$data->keepLineCoverageDataOnlyForLines(
|
||||||
|
$filename,
|
||||||
|
$this->analyser()->executableLinesIn($filename)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private function applyIgnoredLinesFilter(RawCodeCoverageData $data): void
|
private function applyIgnoredLinesFilter(RawCodeCoverageData $data): void
|
||||||
{
|
{
|
||||||
foreach (array_keys($data->lineCoverage()) as $filename) {
|
foreach (array_keys($data->lineCoverage()) as $filename) {
|
||||||
@@ -495,7 +502,7 @@ final class CodeCoverage
|
|||||||
|
|
||||||
$data->removeCoverageDataForLines(
|
$data->removeCoverageDataForLines(
|
||||||
$filename,
|
$filename,
|
||||||
$this->coveredFileAnalyser()->ignoredLinesFor($filename)
|
$this->analyser()->ignoredLinesFor($filename)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -515,7 +522,7 @@ final class CodeCoverage
|
|||||||
$this->append(
|
$this->append(
|
||||||
RawCodeCoverageData::fromUncoveredFile(
|
RawCodeCoverageData::fromUncoveredFile(
|
||||||
$uncoveredFile,
|
$uncoveredFile,
|
||||||
$this->uncoveredFileAnalyser()
|
$this->analyser()
|
||||||
),
|
),
|
||||||
self::UNCOVERED_FILES
|
self::UNCOVERED_FILES
|
||||||
);
|
);
|
||||||
@@ -646,42 +653,24 @@ final class CodeCoverage
|
|||||||
return array_values($unintentionallyCoveredUnits);
|
return array_values($unintentionallyCoveredUnits);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function coveredFileAnalyser(): CoveredFileAnalyser
|
private function analyser(): FileAnalyser
|
||||||
{
|
{
|
||||||
if ($this->coveredFileAnalyser !== null) {
|
if ($this->analyser !== null) {
|
||||||
return $this->coveredFileAnalyser;
|
return $this->analyser;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->coveredFileAnalyser = new ParsingCoveredFileAnalyser(
|
$this->analyser = new ParsingFileAnalyser(
|
||||||
$this->useAnnotationsForIgnoringCode,
|
$this->useAnnotationsForIgnoringCode,
|
||||||
$this->ignoreDeprecatedCode
|
$this->ignoreDeprecatedCode
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($this->cachesStaticAnalysis()) {
|
if ($this->cachesStaticAnalysis()) {
|
||||||
$this->coveredFileAnalyser = new CachingCoveredFileAnalyser(
|
$this->analyser = new CachingFileAnalyser(
|
||||||
$this->cacheDirectory,
|
$this->cacheDirectory,
|
||||||
$this->coveredFileAnalyser
|
$this->analyser
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->coveredFileAnalyser;
|
return $this->analyser;
|
||||||
}
|
|
||||||
|
|
||||||
private function uncoveredFileAnalyser(): UncoveredFileAnalyser
|
|
||||||
{
|
|
||||||
if ($this->uncoveredFileAnalyser !== null) {
|
|
||||||
return $this->uncoveredFileAnalyser;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->uncoveredFileAnalyser = new ParsingUncoveredFileAnalyser;
|
|
||||||
|
|
||||||
if ($this->cachesStaticAnalysis()) {
|
|
||||||
$this->uncoveredFileAnalyser = new CachingUncoveredFileAnalyser(
|
|
||||||
$this->cacheDirectory,
|
|
||||||
$this->uncoveredFileAnalyser
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->uncoveredFileAnalyser;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -7,9 +7,10 @@
|
|||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\CodeCoverage;
|
namespace SebastianBergmann\CodeCoverage\Util;
|
||||||
|
|
||||||
use RuntimeException;
|
use RuntimeException;
|
||||||
|
use SebastianBergmann\CodeCoverage\Exception;
|
||||||
|
|
||||||
final class DirectoryCouldNotBeCreatedException extends RuntimeException implements Exception
|
final class DirectoryCouldNotBeCreatedException extends RuntimeException implements Exception
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,8 +14,7 @@ use function array_merge;
|
|||||||
use function str_replace;
|
use function str_replace;
|
||||||
use function substr;
|
use function substr;
|
||||||
use Countable;
|
use Countable;
|
||||||
use SebastianBergmann\CodeCoverage\Percentage;
|
use SebastianBergmann\CodeCoverage\Util\Percentage;
|
||||||
use SebastianBergmann\LinesOfCode\LinesOfCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
@@ -219,7 +218,10 @@ abstract class AbstractNode implements Countable
|
|||||||
|
|
||||||
abstract public function functions(): array;
|
abstract public function functions(): array;
|
||||||
|
|
||||||
abstract public function linesOfCode(): LinesOfCode;
|
/**
|
||||||
|
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
|
*/
|
||||||
|
abstract public function linesOfCode(): array;
|
||||||
|
|
||||||
abstract public function numberOfExecutableLines(): int;
|
abstract public function numberOfExecutableLines(): int;
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ use function strpos;
|
|||||||
use function substr;
|
use function substr;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData;
|
use SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData;
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\CoveredFileAnalyser;
|
use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
@@ -30,13 +30,13 @@ use SebastianBergmann\CodeCoverage\StaticAnalysis\CoveredFileAnalyser;
|
|||||||
final class Builder
|
final class Builder
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var CoveredFileAnalyser
|
* @var FileAnalyser
|
||||||
*/
|
*/
|
||||||
private $coveredFileAnalyser;
|
private $analyser;
|
||||||
|
|
||||||
public function __construct(CoveredFileAnalyser $coveredFileAnalyser)
|
public function __construct(FileAnalyser $analyser)
|
||||||
{
|
{
|
||||||
$this->coveredFileAnalyser = $coveredFileAnalyser;
|
$this->analyser = $analyser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function build(CodeCoverage $coverage): Directory
|
public function build(CodeCoverage $coverage): Directory
|
||||||
@@ -74,10 +74,10 @@ final class Builder
|
|||||||
$value['lineCoverage'],
|
$value['lineCoverage'],
|
||||||
$value['functionCoverage'],
|
$value['functionCoverage'],
|
||||||
$tests,
|
$tests,
|
||||||
$this->coveredFileAnalyser->classesIn($filename),
|
$this->analyser->classesIn($filename),
|
||||||
$this->coveredFileAnalyser->traitsIn($filename),
|
$this->analyser->traitsIn($filename),
|
||||||
$this->coveredFileAnalyser->functionsIn($filename),
|
$this->analyser->functionsIn($filename),
|
||||||
$this->coveredFileAnalyser->linesOfCodeFor($filename)
|
$this->analyser->linesOfCodeFor($filename)
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-6
@@ -7,7 +7,7 @@
|
|||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\CodeCoverage;
|
namespace SebastianBergmann\CodeCoverage\Node;
|
||||||
|
|
||||||
use function sprintf;
|
use function sprintf;
|
||||||
|
|
||||||
@@ -26,11 +26,6 @@ final class CrapIndex
|
|||||||
*/
|
*/
|
||||||
private $codeCoverage;
|
private $codeCoverage;
|
||||||
|
|
||||||
public static function fromCyclomaticComplexityAndCoveragePercentage(int $cyclomaticComplexity, float $codeCoverage): self
|
|
||||||
{
|
|
||||||
return new self($cyclomaticComplexity, $codeCoverage);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __construct(int $cyclomaticComplexity, float $codeCoverage)
|
public function __construct(int $cyclomaticComplexity, float $codeCoverage)
|
||||||
{
|
{
|
||||||
$this->cyclomaticComplexity = $cyclomaticComplexity;
|
$this->cyclomaticComplexity = $cyclomaticComplexity;
|
||||||
+15
-5
@@ -13,7 +13,6 @@ use function array_merge;
|
|||||||
use function count;
|
use function count;
|
||||||
use IteratorAggregate;
|
use IteratorAggregate;
|
||||||
use RecursiveIteratorIterator;
|
use RecursiveIteratorIterator;
|
||||||
use SebastianBergmann\LinesOfCode\LinesOfCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
@@ -51,7 +50,7 @@ final class Directory extends AbstractNode implements IteratorAggregate
|
|||||||
private $functions;
|
private $functions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var LinesOfCode
|
* @psalm-var null|array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
*/
|
*/
|
||||||
private $linesOfCode;
|
private $linesOfCode;
|
||||||
|
|
||||||
@@ -233,13 +232,24 @@ final class Directory extends AbstractNode implements IteratorAggregate
|
|||||||
return $this->functions;
|
return $this->functions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function linesOfCode(): LinesOfCode
|
/**
|
||||||
|
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
|
*/
|
||||||
|
public function linesOfCode(): array
|
||||||
{
|
{
|
||||||
if ($this->linesOfCode === null) {
|
if ($this->linesOfCode === null) {
|
||||||
$this->linesOfCode = new LinesOfCode(0, 0, 0, 0);
|
$this->linesOfCode = [
|
||||||
|
'linesOfCode' => 0,
|
||||||
|
'commentLinesOfCode' => 0,
|
||||||
|
'nonCommentLinesOfCode' => 0,
|
||||||
|
];
|
||||||
|
|
||||||
foreach ($this->children as $child) {
|
foreach ($this->children as $child) {
|
||||||
$this->linesOfCode = $this->linesOfCode->plus($child->linesOfCode());
|
$childLinesOfCode = $child->linesOfCode();
|
||||||
|
|
||||||
|
$this->linesOfCode['linesOfCode'] += $childLinesOfCode['linesOfCode'];
|
||||||
|
$this->linesOfCode['commentLinesOfCode'] += $childLinesOfCode['commentLinesOfCode'];
|
||||||
|
$this->linesOfCode['nonCommentLinesOfCode'] += $childLinesOfCode['nonCommentLinesOfCode'];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+19
-11
@@ -12,8 +12,6 @@ namespace SebastianBergmann\CodeCoverage\Node;
|
|||||||
use function array_filter;
|
use function array_filter;
|
||||||
use function count;
|
use function count;
|
||||||
use function range;
|
use function range;
|
||||||
use SebastianBergmann\CodeCoverage\CrapIndex;
|
|
||||||
use SebastianBergmann\LinesOfCode\LinesOfCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
@@ -81,7 +79,7 @@ final class File extends AbstractNode
|
|||||||
private $functions = [];
|
private $functions = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var LinesOfCode
|
* @psalm-var array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
*/
|
*/
|
||||||
private $linesOfCode;
|
private $linesOfCode;
|
||||||
|
|
||||||
@@ -125,7 +123,10 @@ final class File extends AbstractNode
|
|||||||
*/
|
*/
|
||||||
private $codeUnitsByLine = [];
|
private $codeUnitsByLine = [];
|
||||||
|
|
||||||
public function __construct(string $name, AbstractNode $parent, array $lineCoverageData, array $functionCoverageData, array $testData, array $classes, array $traits, array $functions, LinesOfCode $linesOfCode)
|
/**
|
||||||
|
* @psalm-param array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} $linesOfCode
|
||||||
|
*/
|
||||||
|
public function __construct(string $name, AbstractNode $parent, array $lineCoverageData, array $functionCoverageData, array $testData, array $classes, array $traits, array $functions, array $linesOfCode)
|
||||||
{
|
{
|
||||||
parent::__construct($name, $parent);
|
parent::__construct($name, $parent);
|
||||||
|
|
||||||
@@ -172,7 +173,10 @@ final class File extends AbstractNode
|
|||||||
return $this->functions;
|
return $this->functions;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function linesOfCode(): LinesOfCode
|
/**
|
||||||
|
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
|
*/
|
||||||
|
public function linesOfCode(): array
|
||||||
{
|
{
|
||||||
return $this->linesOfCode;
|
return $this->linesOfCode;
|
||||||
}
|
}
|
||||||
@@ -330,7 +334,7 @@ final class File extends AbstractNode
|
|||||||
|
|
||||||
private function calculateStatistics(array $classes, array $traits, array $functions): void
|
private function calculateStatistics(array $classes, array $traits, array $functions): void
|
||||||
{
|
{
|
||||||
foreach (range(1, $this->linesOfCode->linesOfCode()) as $lineNumber) {
|
foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) {
|
||||||
$this->codeUnitsByLine[$lineNumber] = [];
|
$this->codeUnitsByLine[$lineNumber] = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,7 +342,7 @@ final class File extends AbstractNode
|
|||||||
$this->processTraits($traits);
|
$this->processTraits($traits);
|
||||||
$this->processFunctions($functions);
|
$this->processFunctions($functions);
|
||||||
|
|
||||||
foreach (range(1, $this->linesOfCode->linesOfCode()) as $lineNumber) {
|
foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) {
|
||||||
if (isset($this->lineCoverageData[$lineNumber])) {
|
if (isset($this->lineCoverageData[$lineNumber])) {
|
||||||
foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) {
|
foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) {
|
||||||
$codeUnit['executableLines']++;
|
$codeUnit['executableLines']++;
|
||||||
@@ -557,7 +561,8 @@ final class File extends AbstractNode
|
|||||||
$this->functions[$functionName]['executedBranches'] = count(
|
$this->functions[$functionName]['executedBranches'] = count(
|
||||||
array_filter(
|
array_filter(
|
||||||
$this->functionCoverageData[$functionName]['branches'],
|
$this->functionCoverageData[$functionName]['branches'],
|
||||||
static function (array $branch) {
|
static function (array $branch)
|
||||||
|
{
|
||||||
return (bool) $branch['hit'];
|
return (bool) $branch['hit'];
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -572,7 +577,8 @@ final class File extends AbstractNode
|
|||||||
$this->functions[$functionName]['executedPaths'] = count(
|
$this->functions[$functionName]['executedPaths'] = count(
|
||||||
array_filter(
|
array_filter(
|
||||||
$this->functionCoverageData[$functionName]['paths'],
|
$this->functionCoverageData[$functionName]['paths'],
|
||||||
static function (array $path) {
|
static function (array $path)
|
||||||
|
{
|
||||||
return (bool) $path['hit'];
|
return (bool) $path['hit'];
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -616,7 +622,8 @@ final class File extends AbstractNode
|
|||||||
$methodData['executedBranches'] = count(
|
$methodData['executedBranches'] = count(
|
||||||
array_filter(
|
array_filter(
|
||||||
$this->functionCoverageData[$key]['branches'],
|
$this->functionCoverageData[$key]['branches'],
|
||||||
static function (array $branch) {
|
static function (array $branch)
|
||||||
|
{
|
||||||
return (bool) $branch['hit'];
|
return (bool) $branch['hit'];
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@@ -631,7 +638,8 @@ final class File extends AbstractNode
|
|||||||
$methodData['executedPaths'] = count(
|
$methodData['executedPaths'] = count(
|
||||||
array_filter(
|
array_filter(
|
||||||
$this->functionCoverageData[$key]['paths'],
|
$this->functionCoverageData[$key]['paths'],
|
||||||
static function (array $path) {
|
static function (array $path)
|
||||||
|
{
|
||||||
return (bool) $path['hit'];
|
return (bool) $path['hit'];
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -132,18 +132,6 @@ final class ProcessedCodeCoverageData
|
|||||||
unset($this->lineCoverage[$oldFile], $this->functionCoverage[$oldFile]);
|
unset($this->lineCoverage[$oldFile], $this->functionCoverage[$oldFile]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function removeFilesWithNoCoverage(): void
|
|
||||||
{
|
|
||||||
foreach ($this->lineCoverage as $file => $lines) {
|
|
||||||
foreach ($lines as $line) {
|
|
||||||
if (is_array($line) && !empty($line)) {
|
|
||||||
continue 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
unset($file);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function merge(self $newData): void
|
public function merge(self $newData): void
|
||||||
{
|
{
|
||||||
foreach ($newData->lineCoverage as $file => $lines) {
|
foreach ($newData->lineCoverage as $file => $lines) {
|
||||||
|
|||||||
@@ -15,11 +15,10 @@ use function array_flip;
|
|||||||
use function array_intersect;
|
use function array_intersect;
|
||||||
use function array_intersect_key;
|
use function array_intersect_key;
|
||||||
use function count;
|
use function count;
|
||||||
use function file;
|
|
||||||
use function in_array;
|
use function in_array;
|
||||||
use function range;
|
use function range;
|
||||||
use SebastianBergmann\CodeCoverage\Driver\Driver;
|
use SebastianBergmann\CodeCoverage\Driver\Driver;
|
||||||
use SebastianBergmann\CodeCoverage\StaticAnalysis\UncoveredFileAnalyser;
|
use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
@@ -84,11 +83,11 @@ final class RawCodeCoverageData
|
|||||||
return new self($lineCoverage, $functionCoverage);
|
return new self($lineCoverage, $functionCoverage);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function fromUncoveredFile(string $filename, UncoveredFileAnalyser $uncoveredFileAnalyser): self
|
public static function fromUncoveredFile(string $filename, FileAnalyser $analyser): self
|
||||||
{
|
{
|
||||||
$lineCoverage = [];
|
$lineCoverage = [];
|
||||||
|
|
||||||
foreach ($uncoveredFileAnalyser->executableLinesIn($filename) as $line) {
|
foreach ($analyser->executableLinesIn($filename) as $line) {
|
||||||
$lineCoverage[$line] = Driver::LINE_NOT_EXECUTED;
|
$lineCoverage[$line] = Driver::LINE_NOT_EXECUTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,7 +125,7 @@ final class RawCodeCoverageData
|
|||||||
/**
|
/**
|
||||||
* @param int[] $lines
|
* @param int[] $lines
|
||||||
*/
|
*/
|
||||||
public function keepCoverageDataOnlyForLines(string $filename, array $lines): void
|
public function keepLineCoverageDataOnlyForLines(string $filename, array $lines): void
|
||||||
{
|
{
|
||||||
if (!isset($this->lineCoverage[$filename])) {
|
if (!isset($this->lineCoverage[$filename])) {
|
||||||
return;
|
return;
|
||||||
@@ -136,17 +135,25 @@ final class RawCodeCoverageData
|
|||||||
$this->lineCoverage[$filename],
|
$this->lineCoverage[$filename],
|
||||||
array_flip($lines)
|
array_flip($lines)
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($this->functionCoverage[$filename])) {
|
/**
|
||||||
foreach ($this->functionCoverage[$filename] as $functionName => $functionData) {
|
* @param int[] $lines
|
||||||
foreach ($functionData['branches'] as $branchId => $branch) {
|
*/
|
||||||
if (count(array_diff(range($branch['line_start'], $branch['line_end']), $lines)) > 0) {
|
public function keepFunctionCoverageDataOnlyForLines(string $filename, array $lines): void
|
||||||
unset($this->functionCoverage[$filename][$functionName]['branches'][$branchId]);
|
{
|
||||||
|
if (!isset($this->functionCoverage[$filename])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
foreach ($functionData['paths'] as $pathId => $path) {
|
foreach ($this->functionCoverage[$filename] as $functionName => $functionData) {
|
||||||
if (in_array($branchId, $path['path'], true)) {
|
foreach ($functionData['branches'] as $branchId => $branch) {
|
||||||
unset($this->functionCoverage[$filename][$functionName]['paths'][$pathId]);
|
if (count(array_diff(range($branch['line_start'], $branch['line_end']), $lines)) > 0) {
|
||||||
}
|
unset($this->functionCoverage[$filename][$functionName]['branches'][$branchId]);
|
||||||
|
|
||||||
|
foreach ($functionData['paths'] as $pathId => $path) {
|
||||||
|
if (in_array($branchId, $path['path'], true)) {
|
||||||
|
unset($this->functionCoverage[$filename][$functionName]['paths'][$pathId]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ use function range;
|
|||||||
use function time;
|
use function time;
|
||||||
use DOMDocument;
|
use DOMDocument;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Directory;
|
|
||||||
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
||||||
use SebastianBergmann\CodeCoverage\Node\File;
|
use SebastianBergmann\CodeCoverage\Node\File;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem;
|
||||||
|
|
||||||
final class Clover
|
final class Clover
|
||||||
{
|
{
|
||||||
@@ -194,8 +194,8 @@ final class Clover
|
|||||||
$linesOfCode = $item->linesOfCode();
|
$linesOfCode = $item->linesOfCode();
|
||||||
|
|
||||||
$xmlMetrics = $xmlDocument->createElement('metrics');
|
$xmlMetrics = $xmlDocument->createElement('metrics');
|
||||||
$xmlMetrics->setAttribute('loc', (string) $linesOfCode->linesOfCode());
|
$xmlMetrics->setAttribute('loc', (string) $linesOfCode['linesOfCode']);
|
||||||
$xmlMetrics->setAttribute('ncloc', (string) $linesOfCode->nonCommentLinesOfCode());
|
$xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['nonCommentLinesOfCode']);
|
||||||
$xmlMetrics->setAttribute('classes', (string) $item->numberOfClassesAndTraits());
|
$xmlMetrics->setAttribute('classes', (string) $item->numberOfClassesAndTraits());
|
||||||
$xmlMetrics->setAttribute('methods', (string) $item->numberOfMethods());
|
$xmlMetrics->setAttribute('methods', (string) $item->numberOfMethods());
|
||||||
$xmlMetrics->setAttribute('coveredmethods', (string) $item->numberOfTestedMethods());
|
$xmlMetrics->setAttribute('coveredmethods', (string) $item->numberOfTestedMethods());
|
||||||
@@ -227,8 +227,8 @@ final class Clover
|
|||||||
|
|
||||||
$xmlMetrics = $xmlDocument->createElement('metrics');
|
$xmlMetrics = $xmlDocument->createElement('metrics');
|
||||||
$xmlMetrics->setAttribute('files', (string) count($report));
|
$xmlMetrics->setAttribute('files', (string) count($report));
|
||||||
$xmlMetrics->setAttribute('loc', (string) $linesOfCode->linesOfCode());
|
$xmlMetrics->setAttribute('loc', (string) $linesOfCode['linesOfCode']);
|
||||||
$xmlMetrics->setAttribute('ncloc', (string) $linesOfCode->nonCommentLinesOfCode());
|
$xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['nonCommentLinesOfCode']);
|
||||||
$xmlMetrics->setAttribute('classes', (string) $report->numberOfClassesAndTraits());
|
$xmlMetrics->setAttribute('classes', (string) $report->numberOfClassesAndTraits());
|
||||||
$xmlMetrics->setAttribute('methods', (string) $report->numberOfMethods());
|
$xmlMetrics->setAttribute('methods', (string) $report->numberOfMethods());
|
||||||
$xmlMetrics->setAttribute('coveredmethods', (string) $report->numberOfTestedMethods());
|
$xmlMetrics->setAttribute('coveredmethods', (string) $report->numberOfTestedMethods());
|
||||||
@@ -243,7 +243,7 @@ final class Clover
|
|||||||
$buffer = $xmlDocument->saveXML();
|
$buffer = $xmlDocument->saveXML();
|
||||||
|
|
||||||
if ($target !== null) {
|
if ($target !== null) {
|
||||||
Directory::create(dirname($target));
|
Filesystem::createDirectory(dirname($target));
|
||||||
|
|
||||||
if (@file_put_contents($target, $buffer) === false) {
|
if (@file_put_contents($target, $buffer) === false) {
|
||||||
throw new WriteOperationFailedException($target);
|
throw new WriteOperationFailedException($target);
|
||||||
|
|||||||
@@ -16,9 +16,9 @@ use function range;
|
|||||||
use function time;
|
use function time;
|
||||||
use DOMImplementation;
|
use DOMImplementation;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Directory;
|
|
||||||
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
||||||
use SebastianBergmann\CodeCoverage\Node\File;
|
use SebastianBergmann\CodeCoverage\Node\File;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem;
|
||||||
|
|
||||||
final class Cobertura
|
final class Cobertura
|
||||||
{
|
{
|
||||||
@@ -292,7 +292,7 @@ final class Cobertura
|
|||||||
$buffer = $document->saveXML();
|
$buffer = $document->saveXML();
|
||||||
|
|
||||||
if ($target !== null) {
|
if ($target !== null) {
|
||||||
Directory::create(dirname($target));
|
Filesystem::createDirectory(dirname($target));
|
||||||
|
|
||||||
if (@file_put_contents($target, $buffer) === false) {
|
if (@file_put_contents($target, $buffer) === false) {
|
||||||
throw new WriteOperationFailedException($target);
|
throw new WriteOperationFailedException($target);
|
||||||
|
|||||||
@@ -17,9 +17,9 @@ use function is_string;
|
|||||||
use function round;
|
use function round;
|
||||||
use DOMDocument;
|
use DOMDocument;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Directory;
|
|
||||||
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
||||||
use SebastianBergmann\CodeCoverage\Node\File;
|
use SebastianBergmann\CodeCoverage\Node\File;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem;
|
||||||
|
|
||||||
final class Crap4j
|
final class Crap4j
|
||||||
{
|
{
|
||||||
@@ -124,7 +124,7 @@ final class Crap4j
|
|||||||
$buffer = $document->saveXML();
|
$buffer = $document->saveXML();
|
||||||
|
|
||||||
if ($target !== null) {
|
if ($target !== null) {
|
||||||
Directory::create(dirname($target));
|
Filesystem::createDirectory(dirname($target));
|
||||||
|
|
||||||
if (@file_put_contents($target, $buffer) === false) {
|
if (@file_put_contents($target, $buffer) === false) {
|
||||||
throw new WriteOperationFailedException($target);
|
throw new WriteOperationFailedException($target);
|
||||||
|
|||||||
@@ -15,8 +15,9 @@ use function date;
|
|||||||
use function dirname;
|
use function dirname;
|
||||||
use function substr;
|
use function substr;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Directory as DirectoryUtil;
|
use SebastianBergmann\CodeCoverage\InvalidArgumentException;
|
||||||
use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
|
use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem;
|
||||||
|
|
||||||
final class Facade
|
final class Facade
|
||||||
{
|
{
|
||||||
@@ -42,6 +43,12 @@ final class Facade
|
|||||||
|
|
||||||
public function __construct(int $lowUpperBound = 50, int $highLowerBound = 90, string $generator = '')
|
public function __construct(int $lowUpperBound = 50, int $highLowerBound = 90, string $generator = '')
|
||||||
{
|
{
|
||||||
|
if ($lowUpperBound > $highLowerBound) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
'$lowUpperBound must not be larger than $highLowerBound'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
$this->generator = $generator;
|
$this->generator = $generator;
|
||||||
$this->highLowerBound = $highLowerBound;
|
$this->highLowerBound = $highLowerBound;
|
||||||
$this->lowUpperBound = $lowUpperBound;
|
$this->lowUpperBound = $lowUpperBound;
|
||||||
@@ -88,14 +95,14 @@ final class Facade
|
|||||||
$id = $node->id();
|
$id = $node->id();
|
||||||
|
|
||||||
if ($node instanceof DirectoryNode) {
|
if ($node instanceof DirectoryNode) {
|
||||||
DirectoryUtil::create($target . $id);
|
Filesystem::createDirectory($target . $id);
|
||||||
|
|
||||||
$directory->render($node, $target . $id . '/index.html');
|
$directory->render($node, $target . $id . '/index.html');
|
||||||
$dashboard->render($node, $target . $id . '/dashboard.html');
|
$dashboard->render($node, $target . $id . '/dashboard.html');
|
||||||
} else {
|
} else {
|
||||||
$dir = dirname($target . $id);
|
$dir = dirname($target . $id);
|
||||||
|
|
||||||
DirectoryUtil::create($dir);
|
Filesystem::createDirectory($dir);
|
||||||
|
|
||||||
$file->render($node, $target . $id);
|
$file->render($node, $target . $id);
|
||||||
}
|
}
|
||||||
@@ -133,7 +140,7 @@ final class Facade
|
|||||||
$directory .= DIRECTORY_SEPARATOR;
|
$directory .= DIRECTORY_SEPARATOR;
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectoryUtil::create($directory);
|
Filesystem::createDirectory($directory);
|
||||||
|
|
||||||
return $directory;
|
return $directory;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ use function token_get_all;
|
|||||||
use function trim;
|
use function trim;
|
||||||
use PHPUnit\Runner\BaseTestRunner;
|
use PHPUnit\Runner\BaseTestRunner;
|
||||||
use SebastianBergmann\CodeCoverage\Node\File as FileNode;
|
use SebastianBergmann\CodeCoverage\Node\File as FileNode;
|
||||||
use SebastianBergmann\CodeCoverage\Percentage;
|
use SebastianBergmann\CodeCoverage\Util\Percentage;
|
||||||
use SebastianBergmann\Template\Template;
|
use SebastianBergmann\Template\Template;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Vendored
+5
-5
File diff suppressed because one or more lines are too long
-5
@@ -96,11 +96,6 @@ span.success, span.warning, span.danger {
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
#classCoverageDistribution, #classComplexity {
|
|
||||||
height: 200px;
|
|
||||||
width: 475px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#toplink {
|
#toplink {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 5px;
|
left: 5px;
|
||||||
|
|||||||
+2
-2
@@ -33,9 +33,9 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
|
|
||||||
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
|
|
||||||
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
|
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
|
||||||
|
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
|
||||||
|
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
Vendored
+4
-4
@@ -33,11 +33,11 @@
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td> </td>
|
<td> </td>
|
||||||
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
|
|
||||||
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
|
|
||||||
<td colspan="3"><div align="center"><strong>Paths</strong></div></td>
|
|
||||||
<td colspan="3"><div align="center"><strong>Branches</strong></div></td>
|
|
||||||
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
|
<td colspan="3"><div align="center"><strong>Lines</strong></div></td>
|
||||||
|
<td colspan="3"><div align="center"><strong>Branches</strong></div></td>
|
||||||
|
<td colspan="3"><div align="center"><strong>Paths</strong></div></td>
|
||||||
|
<td colspan="4"><div align="center"><strong>Functions and Methods</strong></div></td>
|
||||||
|
<td colspan="3"><div align="center"><strong>Classes and Traits</strong></div></td>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|||||||
+6
-6
@@ -1,14 +1,14 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="{{classes_level}}">{{name}}</td>
|
<td class="{{classes_level}}">{{name}}</td>
|
||||||
<td class="{{classes_level}} big">{{classes_bar}}</td>
|
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
||||||
<td class="{{classes_level}} small"><div align="right">{{classes_tested_percent}}</div></td>
|
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
||||||
<td class="{{classes_level}} small"><div align="right">{{classes_number}}</div></td>
|
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
||||||
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
||||||
<td class="{{methods_level}} small">{{crap}}</td>
|
<td class="{{methods_level}} small">{{crap}}</td>
|
||||||
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
<td class="{{classes_level}} big">{{classes_bar}}</td>
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
<td class="{{classes_level}} small"><div align="right">{{classes_tested_percent}}</div></td>
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
<td class="{{classes_level}} small"><div align="right">{{classes_number}}</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
Vendored
+12
-12
@@ -1,20 +1,20 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="{{classes_level}}">{{name}}</td>
|
<td class="{{classes_level}}">{{name}}</td>
|
||||||
<td class="{{classes_level}} big">{{classes_bar}}</td>
|
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
||||||
<td class="{{classes_level}} small"><div align="right">{{classes_tested_percent}}</div></td>
|
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
||||||
<td class="{{classes_level}} small"><div align="right">{{classes_number}}</div></td>
|
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
||||||
|
<td class="{{branches_level}} big">{{branches_bar}}</td>
|
||||||
|
<td class="{{branches_level}} small"><div align="right">{{branches_executed_percent}}</div></td>
|
||||||
|
<td class="{{branches_level}} small"><div align="right">{{branches_number}}</div></td>
|
||||||
|
<td class="{{paths_level}} big">{{paths_bar}}</td>
|
||||||
|
<td class="{{paths_level}} small"><div align="right">{{paths_executed_percent}}</div></td>
|
||||||
|
<td class="{{paths_level}} small"><div align="right">{{paths_number}}</div></td>
|
||||||
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
||||||
<td class="{{methods_level}} small">{{crap}}</td>
|
<td class="{{methods_level}} small">{{crap}}</td>
|
||||||
<td class="{{paths_level}} big">{{paths_bar}}</td>
|
<td class="{{classes_level}} big">{{classes_bar}}</td>
|
||||||
<td class="{{paths_level}} small"><div align="right">{{paths_executed_percent}}</div></td>
|
<td class="{{classes_level}} small"><div align="right">{{classes_tested_percent}}</div></td>
|
||||||
<td class="{{paths_level}} small"><div align="right">{{paths_number}}</div></td>
|
<td class="{{classes_level}} small"><div align="right">{{classes_number}}</div></td>
|
||||||
<td class="{{branches_level}} big">{{branches_bar}}</td>
|
|
||||||
<td class="{{branches_level}} small"><div align="right">{{branches_executed_percent}}</div></td>
|
|
||||||
<td class="{{branches_level}} small"><div align="right">{{branches_number}}</div></td>
|
|
||||||
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
+4
-4
File diff suppressed because one or more lines are too long
+2
-2
File diff suppressed because one or more lines are too long
+2
-2
File diff suppressed because one or more lines are too long
Vendored
+5
-4
@@ -1,11 +1,12 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="{{methods_level}}" colspan="4">{{name}}</td>
|
<td class="{{methods_level}}">{{name}}</td>
|
||||||
|
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
||||||
|
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
||||||
|
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
||||||
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
||||||
<td class="{{methods_level}} small">{{crap}}</td>
|
<td class="{{methods_level}} small">{{crap}}</td>
|
||||||
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
<td class="{{methods_level}}" colspan="3"></td>
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
Vendored
+11
-10
@@ -1,17 +1,18 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="{{methods_level}}" colspan="4">{{name}}</td>
|
<td class="{{methods_level}}">{{name}}</td>
|
||||||
|
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
||||||
|
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
||||||
|
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
||||||
|
<td class="{{branches_level}} big">{{branches_bar}}</td>
|
||||||
|
<td class="{{branches_level}} small"><div align="right">{{branches_executed_percent}}</div></td>
|
||||||
|
<td class="{{branches_level}} small"><div align="right">{{branches_number}}</div></td>
|
||||||
|
<td class="{{paths_level}} big">{{paths_bar}}</td>
|
||||||
|
<td class="{{paths_level}} small"><div align="right">{{paths_executed_percent}}</div></td>
|
||||||
|
<td class="{{paths_level}} small"><div align="right">{{paths_number}}</div></td>
|
||||||
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
<td class="{{methods_level}} big">{{methods_bar}}</td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_tested_percent}}</div></td>
|
||||||
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
<td class="{{methods_level}} small"><div align="right">{{methods_number}}</div></td>
|
||||||
<td class="{{methods_level}} small">{{crap}}</td>
|
<td class="{{methods_level}} small">{{crap}}</td>
|
||||||
<td class="{{paths_level}} big">{{paths_bar}}</td>
|
<td class="{{methods_level}}" colspan="3"></td>
|
||||||
<td class="{{paths_level}} small"><div align="right">{{paths_executed_percent}}</div></td>
|
|
||||||
<td class="{{paths_level}} small"><div align="right">{{paths_number}}</div></td>
|
|
||||||
<td class="{{branches_level}} big">{{branches_bar}}</td>
|
|
||||||
<td class="{{branches_level}} small"><div align="right">{{branches_executed_percent}}</div></td>
|
|
||||||
<td class="{{branches_level}} small"><div align="right">{{branches_number}}</div></td>
|
|
||||||
<td class="{{lines_level}} big">{{lines_bar}}</td>
|
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_executed_percent}}</div></td>
|
|
||||||
<td class="{{lines_level}} small"><div align="right">{{lines_number}}</div></td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -14,8 +14,8 @@ use function file_put_contents;
|
|||||||
use function serialize;
|
use function serialize;
|
||||||
use function sprintf;
|
use function sprintf;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Directory;
|
|
||||||
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem;
|
||||||
|
|
||||||
final class PHP
|
final class PHP
|
||||||
{
|
{
|
||||||
@@ -31,7 +31,7 @@ return \unserialize(<<<'END_OF_COVERAGE_SERIALIZATION'%s%s%sEND_OF_COVERAGE_SERI
|
|||||||
);
|
);
|
||||||
|
|
||||||
if ($target !== null) {
|
if ($target !== null) {
|
||||||
Directory::create(dirname($target));
|
Filesystem::createDirectory(dirname($target));
|
||||||
|
|
||||||
if (@file_put_contents($target, $buffer) === false) {
|
if (@file_put_contents($target, $buffer) === false) {
|
||||||
throw new WriteOperationFailedException($target);
|
throw new WriteOperationFailedException($target);
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ use function str_pad;
|
|||||||
use function strlen;
|
use function strlen;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Node\File;
|
use SebastianBergmann\CodeCoverage\Node\File;
|
||||||
use SebastianBergmann\CodeCoverage\Percentage;
|
use SebastianBergmann\CodeCoverage\Util\Percentage;
|
||||||
|
|
||||||
final class Text
|
final class Text
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -28,12 +28,12 @@ use function substr;
|
|||||||
use DateTimeImmutable;
|
use DateTimeImmutable;
|
||||||
use DOMDocument;
|
use DOMDocument;
|
||||||
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
use SebastianBergmann\CodeCoverage\CodeCoverage;
|
||||||
use SebastianBergmann\CodeCoverage\Directory as DirectoryUtil;
|
|
||||||
use SebastianBergmann\CodeCoverage\Driver\PathExistsButIsNotDirectoryException;
|
use SebastianBergmann\CodeCoverage\Driver\PathExistsButIsNotDirectoryException;
|
||||||
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException;
|
||||||
use SebastianBergmann\CodeCoverage\Node\AbstractNode;
|
use SebastianBergmann\CodeCoverage\Node\AbstractNode;
|
||||||
use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
|
use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode;
|
||||||
use SebastianBergmann\CodeCoverage\Node\File as FileNode;
|
use SebastianBergmann\CodeCoverage\Node\File as FileNode;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem as DirectoryUtil;
|
||||||
use SebastianBergmann\CodeCoverage\Version;
|
use SebastianBergmann\CodeCoverage\Version;
|
||||||
use SebastianBergmann\CodeCoverage\XmlException;
|
use SebastianBergmann\CodeCoverage\XmlException;
|
||||||
use SebastianBergmann\Environment\Runtime;
|
use SebastianBergmann\Environment\Runtime;
|
||||||
@@ -109,7 +109,7 @@ final class Facade
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DirectoryUtil::create($directory);
|
DirectoryUtil::createDirectory($directory);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -240,9 +240,9 @@ final class Facade
|
|||||||
$loc = $node->linesOfCode();
|
$loc = $node->linesOfCode();
|
||||||
|
|
||||||
$totals->setNumLines(
|
$totals->setNumLines(
|
||||||
$loc->linesOfCode(),
|
$loc['linesOfCode'],
|
||||||
$loc->commentLinesOfCode(),
|
$loc['commentLinesOfCode'],
|
||||||
$loc->nonCommentLinesOfCode(),
|
$loc['nonCommentLinesOfCode'],
|
||||||
$node->numberOfExecutableLines(),
|
$node->numberOfExecutableLines(),
|
||||||
$node->numberOfExecutedLines()
|
$node->numberOfExecutedLines()
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ namespace SebastianBergmann\CodeCoverage\Report\Xml;
|
|||||||
use function sprintf;
|
use function sprintf;
|
||||||
use DOMElement;
|
use DOMElement;
|
||||||
use DOMNode;
|
use DOMNode;
|
||||||
use SebastianBergmann\CodeCoverage\Percentage;
|
use SebastianBergmann\CodeCoverage\Util\Percentage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
|
|||||||
@@ -1,90 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/*
|
|
||||||
* This file is part of phpunit/php-code-coverage.
|
|
||||||
*
|
|
||||||
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
|
||||||
|
|
||||||
use const DIRECTORY_SEPARATOR;
|
|
||||||
use function file_get_contents;
|
|
||||||
use function file_put_contents;
|
|
||||||
use function filemtime;
|
|
||||||
use function hash;
|
|
||||||
use function is_file;
|
|
||||||
use function serialize;
|
|
||||||
use function unserialize;
|
|
||||||
use SebastianBergmann\CodeCoverage\Directory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
|
||||||
*/
|
|
||||||
abstract class Cache
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
private $directory;
|
|
||||||
|
|
||||||
public function __construct(string $directory)
|
|
||||||
{
|
|
||||||
Directory::create($directory);
|
|
||||||
|
|
||||||
$this->directory = $directory;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function has(string $filename, string $key): bool
|
|
||||||
{
|
|
||||||
$cacheFile = $this->cacheFile($filename, $key);
|
|
||||||
|
|
||||||
if (!is_file($cacheFile)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filemtime($cacheFile) < filemtime($filename)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @psalm-param list<class-string> $allowedClasses
|
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
protected function read(string $filename, string $key, array $allowedClasses = [])
|
|
||||||
{
|
|
||||||
$options = ['allowed_classes' => false];
|
|
||||||
|
|
||||||
if (!empty($allowedClasses)) {
|
|
||||||
$options = ['allowed_classes' => $allowedClasses];
|
|
||||||
}
|
|
||||||
|
|
||||||
return unserialize(
|
|
||||||
file_get_contents(
|
|
||||||
$this->cacheFile($filename, $key)
|
|
||||||
),
|
|
||||||
$options
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param mixed $data
|
|
||||||
*/
|
|
||||||
protected function write(string $filename, string $key, $data): void
|
|
||||||
{
|
|
||||||
file_put_contents(
|
|
||||||
$this->cacheFile($filename, $key),
|
|
||||||
serialize($data)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function cacheFile(string $filename, string $key): string
|
|
||||||
{
|
|
||||||
return $this->directory . DIRECTORY_SEPARATOR . hash('sha256', $filename . $key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -15,24 +15,16 @@ final class CacheWarmer
|
|||||||
{
|
{
|
||||||
public function warmCache(string $cacheDirectory, bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode, Filter $filter): void
|
public function warmCache(string $cacheDirectory, bool $useAnnotationsForIgnoringCode, bool $ignoreDeprecatedCode, Filter $filter): void
|
||||||
{
|
{
|
||||||
$coveredFileAnalyser = new CachingCoveredFileAnalyser(
|
$analyser = new CachingFileAnalyser(
|
||||||
$cacheDirectory,
|
$cacheDirectory,
|
||||||
new ParsingCoveredFileAnalyser(
|
new ParsingFileAnalyser(
|
||||||
$useAnnotationsForIgnoringCode,
|
$useAnnotationsForIgnoringCode,
|
||||||
$ignoreDeprecatedCode
|
$ignoreDeprecatedCode
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$uncoveredFileAnalyser = new CachingUncoveredFileAnalyser(
|
|
||||||
$cacheDirectory,
|
|
||||||
new ParsingUncoveredFileAnalyser
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($filter->files() as $file) {
|
foreach ($filter->files() as $file) {
|
||||||
$coveredFileAnalyser->process($file);
|
$analyser->process($file);
|
||||||
|
|
||||||
/* @noinspection UnusedFunctionResultInspection */
|
|
||||||
$uncoveredFileAnalyser->executableLinesIn($file);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-99
@@ -1,99 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/*
|
|
||||||
* This file is part of phpunit/php-code-coverage.
|
|
||||||
*
|
|
||||||
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
|
||||||
|
|
||||||
use SebastianBergmann\LinesOfCode\LinesOfCode;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
|
||||||
*/
|
|
||||||
final class CachingCoveredFileAnalyser extends Cache implements CoveredFileAnalyser
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var CoveredFileAnalyser
|
|
||||||
*/
|
|
||||||
private $coveredFileAnalyser;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
private $cache = [];
|
|
||||||
|
|
||||||
public function __construct(string $directory, CoveredFileAnalyser $coveredFileAnalyser)
|
|
||||||
{
|
|
||||||
parent::__construct($directory);
|
|
||||||
|
|
||||||
$this->coveredFileAnalyser = $coveredFileAnalyser;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function classesIn(string $filename): array
|
|
||||||
{
|
|
||||||
if (!isset($this->cache[$filename])) {
|
|
||||||
$this->process($filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->cache[$filename]['classesIn'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function traitsIn(string $filename): array
|
|
||||||
{
|
|
||||||
if (!isset($this->cache[$filename])) {
|
|
||||||
$this->process($filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->cache[$filename]['traitsIn'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function functionsIn(string $filename): array
|
|
||||||
{
|
|
||||||
if (!isset($this->cache[$filename])) {
|
|
||||||
$this->process($filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->cache[$filename]['functionsIn'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function linesOfCodeFor(string $filename): LinesOfCode
|
|
||||||
{
|
|
||||||
if (!isset($this->cache[$filename])) {
|
|
||||||
$this->process($filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->cache[$filename]['linesOfCodeFor'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function ignoredLinesFor(string $filename): array
|
|
||||||
{
|
|
||||||
if (!isset($this->cache[$filename])) {
|
|
||||||
$this->process($filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->cache[$filename]['ignoredLinesFor'];
|
|
||||||
}
|
|
||||||
|
|
||||||
public function process(string $filename): void
|
|
||||||
{
|
|
||||||
if ($this->has($filename, __CLASS__)) {
|
|
||||||
$this->cache[$filename] = $this->read($filename, __CLASS__, [LinesOfCode::class]);
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->cache[$filename] = [
|
|
||||||
'classesIn' => $this->coveredFileAnalyser->classesIn($filename),
|
|
||||||
'traitsIn' => $this->coveredFileAnalyser->traitsIn($filename),
|
|
||||||
'functionsIn' => $this->coveredFileAnalyser->functionsIn($filename),
|
|
||||||
'linesOfCodeFor' => $this->coveredFileAnalyser->linesOfCodeFor($filename),
|
|
||||||
'ignoredLinesFor' => $this->coveredFileAnalyser->ignoredLinesFor($filename),
|
|
||||||
];
|
|
||||||
|
|
||||||
$this->write($filename, __CLASS__, $this->cache[$filename]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+183
@@ -0,0 +1,183 @@
|
|||||||
|
<?php declare(strict_types=1);
|
||||||
|
/*
|
||||||
|
* This file is part of phpunit/php-code-coverage.
|
||||||
|
*
|
||||||
|
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
||||||
|
|
||||||
|
use function assert;
|
||||||
|
use function crc32;
|
||||||
|
use function file_get_contents;
|
||||||
|
use function file_put_contents;
|
||||||
|
use function is_file;
|
||||||
|
use function serialize;
|
||||||
|
use GlobIterator;
|
||||||
|
use SebastianBergmann\CodeCoverage\Util\Filesystem;
|
||||||
|
use SplFileInfo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
|
*/
|
||||||
|
final class CachingFileAnalyser implements FileAnalyser
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var ?string
|
||||||
|
*/
|
||||||
|
private static $cacheVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var FileAnalyser
|
||||||
|
*/
|
||||||
|
private $analyser;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $cache = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
private $directory;
|
||||||
|
|
||||||
|
public function __construct(string $directory, FileAnalyser $analyser)
|
||||||
|
{
|
||||||
|
Filesystem::createDirectory($directory);
|
||||||
|
|
||||||
|
$this->analyser = $analyser;
|
||||||
|
$this->directory = $directory;
|
||||||
|
|
||||||
|
if (self::$cacheVersion === null) {
|
||||||
|
$this->calculateCacheVersion();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function classesIn(string $filename): array
|
||||||
|
{
|
||||||
|
if (!isset($this->cache[$filename])) {
|
||||||
|
$this->process($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cache[$filename]['classesIn'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function traitsIn(string $filename): array
|
||||||
|
{
|
||||||
|
if (!isset($this->cache[$filename])) {
|
||||||
|
$this->process($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cache[$filename]['traitsIn'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function functionsIn(string $filename): array
|
||||||
|
{
|
||||||
|
if (!isset($this->cache[$filename])) {
|
||||||
|
$this->process($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cache[$filename]['functionsIn'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
|
*/
|
||||||
|
public function linesOfCodeFor(string $filename): array
|
||||||
|
{
|
||||||
|
if (!isset($this->cache[$filename])) {
|
||||||
|
$this->process($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cache[$filename]['linesOfCodeFor'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function executableLinesIn(string $filename): array
|
||||||
|
{
|
||||||
|
if (!isset($this->cache[$filename])) {
|
||||||
|
$this->process($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cache[$filename]['executableLinesIn'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function ignoredLinesFor(string $filename): array
|
||||||
|
{
|
||||||
|
if (!isset($this->cache[$filename])) {
|
||||||
|
$this->process($filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->cache[$filename]['ignoredLinesFor'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function process(string $filename): void
|
||||||
|
{
|
||||||
|
$cache = $this->read($filename);
|
||||||
|
|
||||||
|
if ($cache !== false) {
|
||||||
|
$this->cache[$filename] = $cache;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->cache[$filename] = [
|
||||||
|
'classesIn' => $this->analyser->classesIn($filename),
|
||||||
|
'traitsIn' => $this->analyser->traitsIn($filename),
|
||||||
|
'functionsIn' => $this->analyser->functionsIn($filename),
|
||||||
|
'linesOfCodeFor' => $this->analyser->linesOfCodeFor($filename),
|
||||||
|
'ignoredLinesFor' => $this->analyser->ignoredLinesFor($filename),
|
||||||
|
'executableLinesIn' => $this->analyser->executableLinesIn($filename),
|
||||||
|
];
|
||||||
|
|
||||||
|
$this->write($filename, $this->cache[$filename]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return mixed
|
||||||
|
*/
|
||||||
|
private function read(string $filename)
|
||||||
|
{
|
||||||
|
$cacheFile = $this->cacheFile($filename);
|
||||||
|
|
||||||
|
if (!is_file($cacheFile)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return unserialize(
|
||||||
|
file_get_contents($cacheFile),
|
||||||
|
['allowed_classes' => false]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param mixed $data
|
||||||
|
*/
|
||||||
|
private function write(string $filename, $data): void
|
||||||
|
{
|
||||||
|
file_put_contents(
|
||||||
|
$this->cacheFile($filename),
|
||||||
|
serialize($data)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function cacheFile(string $filename): string
|
||||||
|
{
|
||||||
|
return $this->directory . DIRECTORY_SEPARATOR . hash('sha256', $filename . crc32(file_get_contents($filename)) . self::$cacheVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
private function calculateCacheVersion(): void
|
||||||
|
{
|
||||||
|
$buffer = '';
|
||||||
|
|
||||||
|
foreach (new GlobIterator(__DIR__ . '/*.php') as $file) {
|
||||||
|
assert($file instanceof SplFileInfo);
|
||||||
|
|
||||||
|
$buffer .= file_get_contents($file->getPathname());
|
||||||
|
}
|
||||||
|
|
||||||
|
self::$cacheVersion = (string) crc32($buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
-41
@@ -1,41 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/*
|
|
||||||
* This file is part of phpunit/php-code-coverage.
|
|
||||||
*
|
|
||||||
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
|
||||||
*/
|
|
||||||
final class CachingUncoveredFileAnalyser extends Cache implements UncoveredFileAnalyser
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var UncoveredFileAnalyser
|
|
||||||
*/
|
|
||||||
private $uncoveredFileAnalyser;
|
|
||||||
|
|
||||||
public function __construct(string $directory, UncoveredFileAnalyser $uncoveredFileAnalyser)
|
|
||||||
{
|
|
||||||
parent::__construct($directory);
|
|
||||||
|
|
||||||
$this->uncoveredFileAnalyser = $uncoveredFileAnalyser;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function executableLinesIn(string $filename): array
|
|
||||||
{
|
|
||||||
if ($this->has($filename, __METHOD__)) {
|
|
||||||
return $this->read($filename, __METHOD__);
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = $this->uncoveredFileAnalyser->executableLinesIn($filename);
|
|
||||||
|
|
||||||
$this->write($filename, __METHOD__, $data);
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -206,7 +206,7 @@ final class CodeUnitFindingVisitor extends NodeVisitorAbstract
|
|||||||
|
|
||||||
$this->classes[$namespacedName] = [
|
$this->classes[$namespacedName] = [
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'namespacedName' => (string) $namespacedName,
|
'namespacedName' => $namespacedName,
|
||||||
'namespace' => $this->namespace($namespacedName, $name),
|
'namespace' => $this->namespace($namespacedName, $name),
|
||||||
'startLine' => $node->getStartLine(),
|
'startLine' => $node->getStartLine(),
|
||||||
'endLine' => $node->getEndLine(),
|
'endLine' => $node->getEndLine(),
|
||||||
@@ -221,7 +221,7 @@ final class CodeUnitFindingVisitor extends NodeVisitorAbstract
|
|||||||
|
|
||||||
$this->traits[$namespacedName] = [
|
$this->traits[$namespacedName] = [
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
'namespacedName' => (string) $namespacedName,
|
'namespacedName' => $namespacedName,
|
||||||
'namespace' => $this->namespace($namespacedName, $name),
|
'namespace' => $this->namespace($namespacedName, $name),
|
||||||
'startLine' => $node->getStartLine(),
|
'startLine' => $node->getStartLine(),
|
||||||
'endLine' => $node->getEndLine(),
|
'endLine' => $node->getEndLine(),
|
||||||
|
|||||||
+94
-10
@@ -9,9 +9,19 @@
|
|||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
||||||
|
|
||||||
use function array_unique;
|
|
||||||
use function sort;
|
|
||||||
use PhpParser\Node;
|
use PhpParser\Node;
|
||||||
|
use PhpParser\Node\Expr\ArrayDimFetch;
|
||||||
|
use PhpParser\Node\Expr\Assign;
|
||||||
|
use PhpParser\Node\Expr\BinaryOp;
|
||||||
|
use PhpParser\Node\Expr\CallLike;
|
||||||
|
use PhpParser\Node\Expr\Cast;
|
||||||
|
use PhpParser\Node\Expr\Closure;
|
||||||
|
use PhpParser\Node\Expr\MethodCall;
|
||||||
|
use PhpParser\Node\Expr\NullsafePropertyFetch;
|
||||||
|
use PhpParser\Node\Expr\PropertyFetch;
|
||||||
|
use PhpParser\Node\Expr\StaticPropertyFetch;
|
||||||
|
use PhpParser\Node\Expr\Ternary;
|
||||||
|
use PhpParser\Node\Scalar\Encapsed;
|
||||||
use PhpParser\Node\Stmt\Break_;
|
use PhpParser\Node\Stmt\Break_;
|
||||||
use PhpParser\Node\Stmt\Case_;
|
use PhpParser\Node\Stmt\Case_;
|
||||||
use PhpParser\Node\Stmt\Catch_;
|
use PhpParser\Node\Stmt\Catch_;
|
||||||
@@ -26,6 +36,7 @@ use PhpParser\Node\Stmt\For_;
|
|||||||
use PhpParser\Node\Stmt\Foreach_;
|
use PhpParser\Node\Stmt\Foreach_;
|
||||||
use PhpParser\Node\Stmt\Goto_;
|
use PhpParser\Node\Stmt\Goto_;
|
||||||
use PhpParser\Node\Stmt\If_;
|
use PhpParser\Node\Stmt\If_;
|
||||||
|
use PhpParser\Node\Stmt\Property;
|
||||||
use PhpParser\Node\Stmt\Return_;
|
use PhpParser\Node\Stmt\Return_;
|
||||||
use PhpParser\Node\Stmt\Switch_;
|
use PhpParser\Node\Stmt\Switch_;
|
||||||
use PhpParser\Node\Stmt\Throw_;
|
use PhpParser\Node\Stmt\Throw_;
|
||||||
@@ -40,49 +51,122 @@ use PhpParser\NodeVisitorAbstract;
|
|||||||
final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract
|
final class ExecutableLinesFindingVisitor extends NodeVisitorAbstract
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @psalm-var list<int>
|
* @psalm-var array<int, int>
|
||||||
*/
|
*/
|
||||||
private $executableLines = [];
|
private $executableLines = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @psalm-var array<int, int>
|
||||||
|
*/
|
||||||
|
private $propertyLines = [];
|
||||||
|
|
||||||
public function enterNode(Node $node): void
|
public function enterNode(Node $node): void
|
||||||
{
|
{
|
||||||
|
$this->savePropertyLines($node);
|
||||||
|
|
||||||
if (!$this->isExecutable($node)) {
|
if (!$this->isExecutable($node)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->executableLines[] = $node->getStartLine();
|
foreach ($this->getLines($node) as $line) {
|
||||||
|
if (isset($this->propertyLines[$line])) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->executableLines[$line] = $line;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @psalm-return list<int>
|
* @psalm-return array<int, int>
|
||||||
*/
|
*/
|
||||||
public function executableLines(): array
|
public function executableLines(): array
|
||||||
{
|
{
|
||||||
$executableLines = array_unique($this->executableLines);
|
sort($this->executableLines);
|
||||||
|
|
||||||
sort($executableLines);
|
return $this->executableLines;
|
||||||
|
}
|
||||||
|
|
||||||
return $executableLines;
|
private function savePropertyLines(Node $node): void
|
||||||
|
{
|
||||||
|
if (!$node instanceof Property && !$node instanceof Node\Stmt\ClassConst) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (range($node->getStartLine(), $node->getEndLine()) as $index) {
|
||||||
|
$this->propertyLines[$index] = $index;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int[]
|
||||||
|
*/
|
||||||
|
private function getLines(Node $node): array
|
||||||
|
{
|
||||||
|
if ($node instanceof Cast ||
|
||||||
|
$node instanceof PropertyFetch ||
|
||||||
|
$node instanceof NullsafePropertyFetch ||
|
||||||
|
$node instanceof StaticPropertyFetch) {
|
||||||
|
return [$node->getEndLine()];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($node instanceof ArrayDimFetch) {
|
||||||
|
if (null === $node->dim) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$node->dim->getStartLine()];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($node instanceof MethodCall) {
|
||||||
|
return [$node->name->getStartLine()];
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($node instanceof Ternary) {
|
||||||
|
$lines = [$node->cond->getStartLine()];
|
||||||
|
|
||||||
|
if (null !== $node->if) {
|
||||||
|
$lines[] = $node->if->getStartLine();
|
||||||
|
}
|
||||||
|
|
||||||
|
$lines[] = $node->else->getStartLine();
|
||||||
|
|
||||||
|
return $lines;
|
||||||
|
}
|
||||||
|
|
||||||
|
return [$node->getStartLine()];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function isExecutable(Node $node): bool
|
private function isExecutable(Node $node): bool
|
||||||
{
|
{
|
||||||
return $node instanceof Break_ ||
|
return $node instanceof Assign ||
|
||||||
|
$node instanceof ArrayDimFetch ||
|
||||||
|
$node instanceof BinaryOp ||
|
||||||
|
$node instanceof Break_ ||
|
||||||
|
$node instanceof CallLike ||
|
||||||
$node instanceof Case_ ||
|
$node instanceof Case_ ||
|
||||||
|
$node instanceof Cast ||
|
||||||
$node instanceof Catch_ ||
|
$node instanceof Catch_ ||
|
||||||
|
$node instanceof Closure ||
|
||||||
$node instanceof Continue_ ||
|
$node instanceof Continue_ ||
|
||||||
$node instanceof Do_ ||
|
$node instanceof Do_ ||
|
||||||
$node instanceof Echo_ ||
|
$node instanceof Echo_ ||
|
||||||
$node instanceof ElseIf_ ||
|
$node instanceof ElseIf_ ||
|
||||||
$node instanceof Else_ ||
|
$node instanceof Else_ ||
|
||||||
|
$node instanceof Encapsed ||
|
||||||
$node instanceof Expression ||
|
$node instanceof Expression ||
|
||||||
$node instanceof Finally_ ||
|
$node instanceof Finally_ ||
|
||||||
$node instanceof Foreach_ ||
|
|
||||||
$node instanceof For_ ||
|
$node instanceof For_ ||
|
||||||
|
$node instanceof Foreach_ ||
|
||||||
$node instanceof Goto_ ||
|
$node instanceof Goto_ ||
|
||||||
$node instanceof If_ ||
|
$node instanceof If_ ||
|
||||||
|
$node instanceof MethodCall ||
|
||||||
|
$node instanceof NullsafePropertyFetch ||
|
||||||
|
$node instanceof PropertyFetch ||
|
||||||
$node instanceof Return_ ||
|
$node instanceof Return_ ||
|
||||||
|
$node instanceof StaticPropertyFetch ||
|
||||||
$node instanceof Switch_ ||
|
$node instanceof Switch_ ||
|
||||||
|
$node instanceof Ternary ||
|
||||||
$node instanceof Throw_ ||
|
$node instanceof Throw_ ||
|
||||||
$node instanceof TryCatch ||
|
$node instanceof TryCatch ||
|
||||||
$node instanceof Unset_ ||
|
$node instanceof Unset_ ||
|
||||||
|
|||||||
+7
-4
@@ -9,12 +9,10 @@
|
|||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
||||||
|
|
||||||
use SebastianBergmann\LinesOfCode\LinesOfCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
*/
|
*/
|
||||||
interface CoveredFileAnalyser
|
interface FileAnalyser
|
||||||
{
|
{
|
||||||
public function classesIn(string $filename): array;
|
public function classesIn(string $filename): array;
|
||||||
|
|
||||||
@@ -22,7 +20,12 @@ interface CoveredFileAnalyser
|
|||||||
|
|
||||||
public function functionsIn(string $filename): array;
|
public function functionsIn(string $filename): array;
|
||||||
|
|
||||||
public function linesOfCodeFor(string $filename): LinesOfCode;
|
/**
|
||||||
|
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
|
*/
|
||||||
|
public function linesOfCodeFor(string $filename): array;
|
||||||
|
|
||||||
|
public function executableLinesIn(string $filename): array;
|
||||||
|
|
||||||
public function ignoredLinesFor(string $filename): array;
|
public function ignoredLinesFor(string $filename): array;
|
||||||
}
|
}
|
||||||
+6
-13
@@ -18,7 +18,6 @@ use PhpParser\Node\Stmt\ClassMethod;
|
|||||||
use PhpParser\Node\Stmt\Function_;
|
use PhpParser\Node\Stmt\Function_;
|
||||||
use PhpParser\Node\Stmt\Interface_;
|
use PhpParser\Node\Stmt\Interface_;
|
||||||
use PhpParser\Node\Stmt\Trait_;
|
use PhpParser\Node\Stmt\Trait_;
|
||||||
use PhpParser\NodeTraverser;
|
|
||||||
use PhpParser\NodeVisitorAbstract;
|
use PhpParser\NodeVisitorAbstract;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,18 +46,18 @@ final class IgnoredLinesFindingVisitor extends NodeVisitorAbstract
|
|||||||
$this->ignoreDeprecated = $ignoreDeprecated;
|
$this->ignoreDeprecated = $ignoreDeprecated;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function enterNode(Node $node): ?int
|
public function enterNode(Node $node): void
|
||||||
{
|
{
|
||||||
if (!$node instanceof Class_ &&
|
if (!$node instanceof Class_ &&
|
||||||
!$node instanceof Trait_ &&
|
!$node instanceof Trait_ &&
|
||||||
!$node instanceof Interface_ &&
|
!$node instanceof Interface_ &&
|
||||||
!$node instanceof ClassMethod &&
|
!$node instanceof ClassMethod &&
|
||||||
!$node instanceof Function_) {
|
!$node instanceof Function_) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($node instanceof Class_ && $node->isAnonymous()) {
|
if ($node instanceof Class_ && $node->isAnonymous()) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Workaround for https://bugs.xdebug.org/view.php?id=1798
|
// Workaround for https://bugs.xdebug.org/view.php?id=1798
|
||||||
@@ -69,17 +68,17 @@ final class IgnoredLinesFindingVisitor extends NodeVisitorAbstract
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->useAnnotationsForIgnoringCode) {
|
if (!$this->useAnnotationsForIgnoringCode) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($node instanceof Interface_) {
|
if ($node instanceof Interface_) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$docComment = $node->getDocComment();
|
$docComment = $node->getDocComment();
|
||||||
|
|
||||||
if ($docComment === null) {
|
if ($docComment === null) {
|
||||||
return null;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strpos($docComment->getText(), '@codeCoverageIgnore') !== false) {
|
if (strpos($docComment->getText(), '@codeCoverageIgnore') !== false) {
|
||||||
@@ -95,12 +94,6 @@ final class IgnoredLinesFindingVisitor extends NodeVisitorAbstract
|
|||||||
range($node->getStartLine(), $node->getEndLine())
|
range($node->getStartLine(), $node->getEndLine())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($node instanceof ClassMethod || $node instanceof Function_) {
|
|
||||||
return NodeTraverser::DONT_TRAVERSE_CHILDREN;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+37
-13
@@ -25,12 +25,11 @@ use PhpParser\NodeVisitor\ParentConnectingVisitor;
|
|||||||
use PhpParser\ParserFactory;
|
use PhpParser\ParserFactory;
|
||||||
use SebastianBergmann\CodeCoverage\ParserException;
|
use SebastianBergmann\CodeCoverage\ParserException;
|
||||||
use SebastianBergmann\LinesOfCode\LineCountingVisitor;
|
use SebastianBergmann\LinesOfCode\LineCountingVisitor;
|
||||||
use SebastianBergmann\LinesOfCode\LinesOfCode;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
*/
|
*/
|
||||||
final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
final class ParsingFileAnalyser implements FileAnalyser
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @var array
|
* @var array
|
||||||
@@ -48,7 +47,7 @@ final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
|||||||
private $functions = [];
|
private $functions = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var LinesOfCode[]
|
* @var array<string,array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}>
|
||||||
*/
|
*/
|
||||||
private $linesOfCode = [];
|
private $linesOfCode = [];
|
||||||
|
|
||||||
@@ -57,6 +56,11 @@ final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
|||||||
*/
|
*/
|
||||||
private $ignoredLines = [];
|
private $ignoredLines = [];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
private $executableLines = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var bool
|
* @var bool
|
||||||
*/
|
*/
|
||||||
@@ -94,13 +98,23 @@ final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
|||||||
return $this->functions[$filename];
|
return $this->functions[$filename];
|
||||||
}
|
}
|
||||||
|
|
||||||
public function linesOfCodeFor(string $filename): LinesOfCode
|
/**
|
||||||
|
* @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int}
|
||||||
|
*/
|
||||||
|
public function linesOfCodeFor(string $filename): array
|
||||||
{
|
{
|
||||||
$this->analyse($filename);
|
$this->analyse($filename);
|
||||||
|
|
||||||
return $this->linesOfCode[$filename];
|
return $this->linesOfCode[$filename];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function executableLinesIn(string $filename): array
|
||||||
|
{
|
||||||
|
$this->analyse($filename);
|
||||||
|
|
||||||
|
return $this->executableLines[$filename];
|
||||||
|
}
|
||||||
|
|
||||||
public function ignoredLinesFor(string $filename): array
|
public function ignoredLinesFor(string $filename): array
|
||||||
{
|
{
|
||||||
$this->analyse($filename);
|
$this->analyse($filename);
|
||||||
@@ -134,16 +148,18 @@ final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
|||||||
|
|
||||||
assert($nodes !== null);
|
assert($nodes !== null);
|
||||||
|
|
||||||
$traverser = new NodeTraverser;
|
$traverser = new NodeTraverser;
|
||||||
$codeUnitFindingVisitor = new CodeUnitFindingVisitor;
|
$codeUnitFindingVisitor = new CodeUnitFindingVisitor;
|
||||||
$lineCountingVisitor = new LineCountingVisitor($linesOfCode);
|
$lineCountingVisitor = new LineCountingVisitor($linesOfCode);
|
||||||
$ignoredLinesFindingVisitor = new IgnoredLinesFindingVisitor($this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode);
|
$ignoredLinesFindingVisitor = new IgnoredLinesFindingVisitor($this->useAnnotationsForIgnoringCode, $this->ignoreDeprecatedCode);
|
||||||
|
$executableLinesFindingVisitor = new ExecutableLinesFindingVisitor;
|
||||||
|
|
||||||
$traverser->addVisitor(new NameResolver);
|
$traverser->addVisitor(new NameResolver);
|
||||||
$traverser->addVisitor(new ParentConnectingVisitor);
|
$traverser->addVisitor(new ParentConnectingVisitor);
|
||||||
$traverser->addVisitor($codeUnitFindingVisitor);
|
$traverser->addVisitor($codeUnitFindingVisitor);
|
||||||
$traverser->addVisitor($lineCountingVisitor);
|
$traverser->addVisitor($lineCountingVisitor);
|
||||||
$traverser->addVisitor($ignoredLinesFindingVisitor);
|
$traverser->addVisitor($ignoredLinesFindingVisitor);
|
||||||
|
$traverser->addVisitor($executableLinesFindingVisitor);
|
||||||
|
|
||||||
/* @noinspection UnusedFunctionResultInspection */
|
/* @noinspection UnusedFunctionResultInspection */
|
||||||
$traverser->traverse($nodes);
|
$traverser->traverse($nodes);
|
||||||
@@ -161,11 +177,11 @@ final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
|||||||
}
|
}
|
||||||
// @codeCoverageIgnoreEnd
|
// @codeCoverageIgnoreEnd
|
||||||
|
|
||||||
$this->classes[$filename] = $codeUnitFindingVisitor->classes();
|
$this->classes[$filename] = $codeUnitFindingVisitor->classes();
|
||||||
$this->traits[$filename] = $codeUnitFindingVisitor->traits();
|
$this->traits[$filename] = $codeUnitFindingVisitor->traits();
|
||||||
$this->functions[$filename] = $codeUnitFindingVisitor->functions();
|
$this->functions[$filename] = $codeUnitFindingVisitor->functions();
|
||||||
$this->linesOfCode[$filename] = $lineCountingVisitor->result();
|
$this->executableLines[$filename] = $executableLinesFindingVisitor->executableLines();
|
||||||
$this->ignoredLines[$filename] = [];
|
$this->ignoredLines[$filename] = [];
|
||||||
|
|
||||||
$this->findLinesIgnoredByLineBasedAnnotations($filename, $source, $this->useAnnotationsForIgnoringCode);
|
$this->findLinesIgnoredByLineBasedAnnotations($filename, $source, $this->useAnnotationsForIgnoringCode);
|
||||||
|
|
||||||
@@ -177,6 +193,14 @@ final class ParsingCoveredFileAnalyser implements CoveredFileAnalyser
|
|||||||
);
|
);
|
||||||
|
|
||||||
sort($this->ignoredLines[$filename]);
|
sort($this->ignoredLines[$filename]);
|
||||||
|
|
||||||
|
$result = $lineCountingVisitor->result();
|
||||||
|
|
||||||
|
$this->linesOfCode[$filename] = [
|
||||||
|
'linesOfCode' => $result->linesOfCode(),
|
||||||
|
'commentLinesOfCode' => $result->commentLinesOfCode(),
|
||||||
|
'nonCommentLinesOfCode' => $result->nonCommentLinesOfCode(),
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
private function findLinesIgnoredByLineBasedAnnotations(string $filename, string $source, bool $useAnnotationsForIgnoringCode): void
|
private function findLinesIgnoredByLineBasedAnnotations(string $filename, string $source, bool $useAnnotationsForIgnoringCode): void
|
||||||
-51
@@ -1,51 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/*
|
|
||||||
* This file is part of phpunit/php-code-coverage.
|
|
||||||
*
|
|
||||||
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
|
||||||
|
|
||||||
use PhpParser\Error;
|
|
||||||
use PhpParser\Lexer;
|
|
||||||
use PhpParser\NodeTraverser;
|
|
||||||
use PhpParser\ParserFactory;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
|
||||||
*/
|
|
||||||
final class ParsingUncoveredFileAnalyser implements UncoveredFileAnalyser
|
|
||||||
{
|
|
||||||
public function executableLinesIn(string $filename): array
|
|
||||||
{
|
|
||||||
$parser = (new ParserFactory)->create(
|
|
||||||
ParserFactory::PREFER_PHP7,
|
|
||||||
new Lexer
|
|
||||||
);
|
|
||||||
|
|
||||||
try {
|
|
||||||
$nodes = $parser->parse(file_get_contents($filename));
|
|
||||||
|
|
||||||
assert($nodes !== null);
|
|
||||||
|
|
||||||
$traverser = new NodeTraverser;
|
|
||||||
$visitor = new ExecutableLinesFindingVisitor;
|
|
||||||
|
|
||||||
$traverser->addVisitor($visitor);
|
|
||||||
|
|
||||||
/* @noinspection UnusedFunctionResultInspection */
|
|
||||||
$traverser->traverse($nodes);
|
|
||||||
|
|
||||||
return $visitor->executableLines();
|
|
||||||
|
|
||||||
// @codeCoverageIgnoreStart
|
|
||||||
} catch (Error $error) {
|
|
||||||
}
|
|
||||||
// @codeCoverageIgnoreEnd
|
|
||||||
|
|
||||||
return [];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-18
@@ -1,18 +0,0 @@
|
|||||||
<?php declare(strict_types=1);
|
|
||||||
/*
|
|
||||||
* This file is part of phpunit/php-code-coverage.
|
|
||||||
*
|
|
||||||
* (c) Sebastian Bergmann <sebastian@phpunit.de>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
namespace SebastianBergmann\CodeCoverage\StaticAnalysis;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
|
||||||
*/
|
|
||||||
interface UncoveredFileAnalyser
|
|
||||||
{
|
|
||||||
public function executableLinesIn(string $filename): array;
|
|
||||||
}
|
|
||||||
+3
-3
@@ -7,7 +7,7 @@
|
|||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\CodeCoverage;
|
namespace SebastianBergmann\CodeCoverage\Util;
|
||||||
|
|
||||||
use function is_dir;
|
use function is_dir;
|
||||||
use function mkdir;
|
use function mkdir;
|
||||||
@@ -16,12 +16,12 @@ use function sprintf;
|
|||||||
/**
|
/**
|
||||||
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
* @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage
|
||||||
*/
|
*/
|
||||||
final class Directory
|
final class Filesystem
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @throws DirectoryCouldNotBeCreatedException
|
* @throws DirectoryCouldNotBeCreatedException
|
||||||
*/
|
*/
|
||||||
public static function create(string $directory): void
|
public static function createDirectory(string $directory): void
|
||||||
{
|
{
|
||||||
$success = !(!is_dir($directory) && !@mkdir($directory, 0777, true) && !is_dir($directory));
|
$success = !(!is_dir($directory) && !@mkdir($directory, 0777, true) && !is_dir($directory));
|
||||||
|
|
||||||
+1
-1
@@ -7,7 +7,7 @@
|
|||||||
* For the full copyright and license information, please view the LICENSE
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\CodeCoverage;
|
namespace SebastianBergmann\CodeCoverage\Util;
|
||||||
|
|
||||||
use function sprintf;
|
use function sprintf;
|
||||||
|
|
||||||
+1
-1
@@ -22,7 +22,7 @@ final class Version
|
|||||||
public static function id(): string
|
public static function id(): string
|
||||||
{
|
{
|
||||||
if (self::$version === null) {
|
if (self::$version === null) {
|
||||||
self::$version = (new VersionId('9.2.10', dirname(__DIR__)))->getVersion();
|
self::$version = (new VersionId('9.2.13', dirname(__DIR__)))->getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$version;
|
return self::$version;
|
||||||
|
|||||||
+19
@@ -2,6 +2,23 @@
|
|||||||
|
|
||||||
All notable changes of the PHPUnit 8.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
All notable changes of the PHPUnit 8.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
||||||
|
|
||||||
|
## [8.5.24] - 2022-MM-DD
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* [#4874](https://github.com/sebastianbergmann/phpunit/pull/4874): `PHP_FLOAT_EPSILON` is now used instead of hardcoded `0.0000000001` in `PHPUnit\Framework\Constraint\IsIdentical`
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead
|
||||||
|
|
||||||
|
## [8.5.23] - 2022-01-21
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* [#4799](https://github.com/sebastianbergmann/phpunit/pull/4799): Memory leaks in `PHPUnit\Framework\TestSuite` class
|
||||||
|
* [#4857](https://github.com/sebastianbergmann/phpunit/pull/4857): Result of `debug_backtrace()` is not used correctly
|
||||||
|
|
||||||
## [8.5.22] - 2021-12-25
|
## [8.5.22] - 2021-12-25
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@@ -190,6 +207,8 @@ All notable changes of the PHPUnit 8.5 release series are documented in this fil
|
|||||||
* [#3967](https://github.com/sebastianbergmann/phpunit/issues/3967): Cannot double interface that extends interface that extends `\Throwable`
|
* [#3967](https://github.com/sebastianbergmann/phpunit/issues/3967): Cannot double interface that extends interface that extends `\Throwable`
|
||||||
* [#3968](https://github.com/sebastianbergmann/phpunit/pull/3968): Test class run in a separate PHP process are passing when `exit` called inside
|
* [#3968](https://github.com/sebastianbergmann/phpunit/pull/3968): Test class run in a separate PHP process are passing when `exit` called inside
|
||||||
|
|
||||||
|
[8.5.24]: https://github.com/sebastianbergmann/phpunit/compare/8.5.23...8.5
|
||||||
|
[8.5.23]: https://github.com/sebastianbergmann/phpunit/compare/8.5.22...8.5.23
|
||||||
[8.5.22]: https://github.com/sebastianbergmann/phpunit/compare/8.5.21...8.5.22
|
[8.5.22]: https://github.com/sebastianbergmann/phpunit/compare/8.5.21...8.5.22
|
||||||
[8.5.21]: https://github.com/sebastianbergmann/phpunit/compare/8.5.20...8.5.21
|
[8.5.21]: https://github.com/sebastianbergmann/phpunit/compare/8.5.20...8.5.21
|
||||||
[8.5.20]: https://github.com/sebastianbergmann/phpunit/compare/8.5.19...8.5.20
|
[8.5.20]: https://github.com/sebastianbergmann/phpunit/compare/8.5.19...8.5.20
|
||||||
|
|||||||
+36
@@ -2,6 +2,37 @@
|
|||||||
|
|
||||||
All notable changes of the PHPUnit 9.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
All notable changes of the PHPUnit 9.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
||||||
|
|
||||||
|
## [9.5.16] - 2022-02-23
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* Reverted sync with API change in (now yanked) phpunit/php-code-coverage 9.2.12
|
||||||
|
|
||||||
|
## [9.5.15] - 2022-02-23 [YANKED]
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* When the HTML code coverage report's configured low upper bound is larger than the high lower bound then the default values are used instead
|
||||||
|
|
||||||
|
## [9.5.14] - 2022-02-18
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* [#4874](https://github.com/sebastianbergmann/phpunit/pull/4874): `PHP_FLOAT_EPSILON` is now used instead of hardcoded `0.0000000001` in `PHPUnit\Framework\Constraint\IsIdentical`
|
||||||
|
|
||||||
|
## [9.5.13] - 2022-01-24
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* [#4871](https://github.com/sebastianbergmann/phpunit/issues/4871): Class `SebastianBergmann\CodeCoverage\Filter` is not found during PHPT tests when PHPUnit is used from PHAR
|
||||||
|
|
||||||
|
## [9.5.12] - 2022-01-21
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* [#4799](https://github.com/sebastianbergmann/phpunit/pull/4799): Memory leaks in `PHPUnit\Framework\TestSuite` class
|
||||||
|
* [#4857](https://github.com/sebastianbergmann/phpunit/pull/4857): Result of `debug_backtrace()` is not used correctly
|
||||||
|
|
||||||
## [9.5.11] - 2021-12-25
|
## [9.5.11] - 2021-12-25
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@@ -103,6 +134,11 @@ All notable changes of the PHPUnit 9.5 release series are documented in this fil
|
|||||||
|
|
||||||
* [#4535](https://github.com/sebastianbergmann/phpunit/issues/4535): `getMockFromWsdl()` does not handle methods that do not have parameters correctly
|
* [#4535](https://github.com/sebastianbergmann/phpunit/issues/4535): `getMockFromWsdl()` does not handle methods that do not have parameters correctly
|
||||||
|
|
||||||
|
[9.5.16]: https://github.com/sebastianbergmann/phpunit/compare/dc738383c519243b0a967f63943a848d3fd861aa...9.5.16
|
||||||
|
[9.5.15]: https://github.com/sebastianbergmann/phpunit/compare/9.5.14...dc738383c519243b0a967f63943a848d3fd861aa
|
||||||
|
[9.5.14]: https://github.com/sebastianbergmann/phpunit/compare/9.5.13...9.5.14
|
||||||
|
[9.5.13]: https://github.com/sebastianbergmann/phpunit/compare/9.5.12...9.5.13
|
||||||
|
[9.5.12]: https://github.com/sebastianbergmann/phpunit/compare/9.5.11...9.5.12
|
||||||
[9.5.11]: https://github.com/sebastianbergmann/phpunit/compare/9.5.10...9.5.11
|
[9.5.11]: https://github.com/sebastianbergmann/phpunit/compare/9.5.10...9.5.11
|
||||||
[9.5.10]: https://github.com/sebastianbergmann/phpunit/compare/9.5.9...9.5.10
|
[9.5.10]: https://github.com/sebastianbergmann/phpunit/compare/9.5.9...9.5.10
|
||||||
[9.5.9]: https://github.com/sebastianbergmann/phpunit/compare/9.5.8...9.5.9
|
[9.5.9]: https://github.com/sebastianbergmann/phpunit/compare/9.5.8...9.5.9
|
||||||
|
|||||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
PHPUnit
|
PHPUnit
|
||||||
|
|
||||||
Copyright (c) 2001-2021, Sebastian Bergmann <sebastian@phpunit.de>.
|
Copyright (c) 2001-2022, Sebastian Bergmann <sebastian@phpunit.de>.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@
|
|||||||
"phar-io/manifest": "^2.0.3",
|
"phar-io/manifest": "^2.0.3",
|
||||||
"phar-io/version": "^3.0.2",
|
"phar-io/version": "^3.0.2",
|
||||||
"phpspec/prophecy": "^1.12.1",
|
"phpspec/prophecy": "^1.12.1",
|
||||||
"phpunit/php-code-coverage": "^9.2.7",
|
"phpunit/php-code-coverage": "^9.2.13",
|
||||||
"phpunit/php-file-iterator": "^3.0.5",
|
"phpunit/php-file-iterator": "^3.0.5",
|
||||||
"phpunit/php-invoker": "^3.1.1",
|
"phpunit/php-invoker": "^3.1.1",
|
||||||
"phpunit/php-text-template": "^2.0.3",
|
"phpunit/php-text-template": "^2.0.3",
|
||||||
|
|||||||
@@ -179,7 +179,7 @@ abstract class Constraint implements Countable, SelfDescribing
|
|||||||
* Returns the description of the failure when this constraint appears in
|
* Returns the description of the failure when this constraint appears in
|
||||||
* context of an $operator expression.
|
* context of an $operator expression.
|
||||||
*
|
*
|
||||||
* The purpose of this method is to provide meaningful failue description
|
* The purpose of this method is to provide meaningful failure description
|
||||||
* in context of operators such as LogicalNot. Native PHPUnit constraints
|
* in context of operators such as LogicalNot. Native PHPUnit constraints
|
||||||
* are supported out of the box by LogicalNot, but externally developed
|
* are supported out of the box by LogicalNot, but externally developed
|
||||||
* ones had no way to provide correct messages in this context.
|
* ones had no way to provide correct messages in this context.
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
namespace PHPUnit\Framework\Constraint;
|
namespace PHPUnit\Framework\Constraint;
|
||||||
|
|
||||||
|
use const PHP_FLOAT_EPSILON;
|
||||||
use function abs;
|
use function abs;
|
||||||
use function get_class;
|
use function get_class;
|
||||||
use function is_array;
|
use function is_array;
|
||||||
@@ -26,11 +27,6 @@ use SebastianBergmann\Comparator\ComparisonFailure;
|
|||||||
*/
|
*/
|
||||||
final class IsIdentical extends Constraint
|
final class IsIdentical extends Constraint
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* @var float
|
|
||||||
*/
|
|
||||||
private const EPSILON = 0.0000000001;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var mixed
|
* @var mixed
|
||||||
*/
|
*/
|
||||||
@@ -59,7 +55,7 @@ final class IsIdentical extends Constraint
|
|||||||
if (is_float($this->value) && is_float($other) &&
|
if (is_float($this->value) && is_float($other) &&
|
||||||
!is_infinite($this->value) && !is_infinite($other) &&
|
!is_infinite($this->value) && !is_infinite($other) &&
|
||||||
!is_nan($this->value) && !is_nan($other)) {
|
!is_nan($this->value) && !is_nan($other)) {
|
||||||
$success = abs($this->value - $other) < self::EPSILON;
|
$success = abs($this->value - $other) < PHP_FLOAT_EPSILON;
|
||||||
} else {
|
} else {
|
||||||
$success = $this->value === $other;
|
$success = $this->value === $other;
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-4
@@ -21,14 +21,18 @@ final class InvalidArgumentException extends Exception
|
|||||||
{
|
{
|
||||||
public static function create(int $argument, string $type): self
|
public static function create(int $argument, string $type): self
|
||||||
{
|
{
|
||||||
$stack = debug_backtrace();
|
$stack = debug_backtrace();
|
||||||
|
$function = $stack[1]['function'];
|
||||||
|
|
||||||
|
if (isset($stack[1]['class'])) {
|
||||||
|
$function = sprintf('%s::%s', $stack[1]['class'], $stack[1]['function']);
|
||||||
|
}
|
||||||
|
|
||||||
return new self(
|
return new self(
|
||||||
sprintf(
|
sprintf(
|
||||||
'Argument #%d of %s::%s() must be %s %s',
|
'Argument #%d of %s() must be %s %s',
|
||||||
$argument,
|
$argument,
|
||||||
$stack[1]['class'],
|
$function,
|
||||||
$stack[1]['function'],
|
|
||||||
in_array(lcfirst($type)[0], ['a', 'e', 'i', 'o', 'u'], true) ? 'an' : 'a',
|
in_array(lcfirst($type)[0], ['a', 'e', 'i', 'o', 'u'], true) ? 'an' : 'a',
|
||||||
$type
|
$type
|
||||||
)
|
)
|
||||||
|
|||||||
+7
-47
@@ -12,74 +12,34 @@ namespace PHPUnit\Framework;
|
|||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use the `TestHook` interfaces instead
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @deprecated
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface TestListener
|
interface TestListener
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* An error occurred.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterTestErrorHook::executeAfterTestError` instead
|
|
||||||
*/
|
|
||||||
public function addError(Test $test, Throwable $t, float $time): void;
|
public function addError(Test $test, Throwable $t, float $time): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* A warning occurred.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterTestWarningHook::executeAfterTestWarning` instead
|
|
||||||
*/
|
|
||||||
public function addWarning(Test $test, Warning $e, float $time): void;
|
public function addWarning(Test $test, Warning $e, float $time): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* A failure occurred.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterTestFailureHook::executeAfterTestFailure` instead
|
|
||||||
*/
|
|
||||||
public function addFailure(Test $test, AssertionFailedError $e, float $time): void;
|
public function addFailure(Test $test, AssertionFailedError $e, float $time): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* Incomplete test.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterIncompleteTestHook::executeAfterIncompleteTest` instead
|
|
||||||
*/
|
|
||||||
public function addIncompleteTest(Test $test, Throwable $t, float $time): void;
|
public function addIncompleteTest(Test $test, Throwable $t, float $time): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* Risky test.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterRiskyTestHook::executeAfterRiskyTest` instead
|
|
||||||
*/
|
|
||||||
public function addRiskyTest(Test $test, Throwable $t, float $time): void;
|
public function addRiskyTest(Test $test, Throwable $t, float $time): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* Skipped test.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterSkippedTestHook::executeAfterSkippedTest` instead
|
|
||||||
*/
|
|
||||||
public function addSkippedTest(Test $test, Throwable $t, float $time): void;
|
public function addSkippedTest(Test $test, Throwable $t, float $time): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* A test suite started.
|
|
||||||
*/
|
|
||||||
public function startTestSuite(TestSuite $suite): void;
|
public function startTestSuite(TestSuite $suite): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* A test suite ended.
|
|
||||||
*/
|
|
||||||
public function endTestSuite(TestSuite $suite): void;
|
public function endTestSuite(TestSuite $suite): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* A test started.
|
|
||||||
*
|
|
||||||
* @deprecated Use `BeforeTestHook::executeBeforeTest` instead
|
|
||||||
*/
|
|
||||||
public function startTest(Test $test): void;
|
public function startTest(Test $test): void;
|
||||||
|
|
||||||
/**
|
|
||||||
* A test ended.
|
|
||||||
*
|
|
||||||
* @deprecated Use `AfterTestHook::executeAfterTest` instead
|
|
||||||
*/
|
|
||||||
public function endTest(Test $test, float $time): void;
|
public function endTest(Test $test, float $time): void;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -755,8 +755,8 @@ final class TestResult implements Countable
|
|||||||
sprintf(
|
sprintf(
|
||||||
'%s in %s:%s',
|
'%s in %s:%s',
|
||||||
$e->getMessage(),
|
$e->getMessage(),
|
||||||
$frame['file'],
|
$frame['file'] ?? $e->getFile(),
|
||||||
$frame['line']
|
$frame['line'] ?? $e->getLine()
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
} catch (Warning $e) {
|
} catch (Warning $e) {
|
||||||
|
|||||||
+7
-8
@@ -10,7 +10,6 @@
|
|||||||
namespace PHPUnit\Framework;
|
namespace PHPUnit\Framework;
|
||||||
|
|
||||||
use const PHP_EOL;
|
use const PHP_EOL;
|
||||||
use function array_diff;
|
|
||||||
use function array_keys;
|
use function array_keys;
|
||||||
use function array_map;
|
use function array_map;
|
||||||
use function array_merge;
|
use function array_merge;
|
||||||
@@ -128,9 +127,9 @@ class TestSuite implements IteratorAggregate, Reorderable, SelfDescribing, Test
|
|||||||
private $iteratorFilter;
|
private $iteratorFilter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var string[]
|
* @var int
|
||||||
*/
|
*/
|
||||||
private $declaredClasses;
|
private $declaredClassesPointer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @psalm-var array<int,string>
|
* @psalm-var array<int,string>
|
||||||
@@ -167,7 +166,7 @@ class TestSuite implements IteratorAggregate, Reorderable, SelfDescribing, Test
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->declaredClasses = get_declared_classes();
|
$this->declaredClassesPointer = count(get_declared_classes());
|
||||||
|
|
||||||
if (!$theClass instanceof ReflectionClass) {
|
if (!$theClass instanceof ReflectionClass) {
|
||||||
if (class_exists($theClass, true)) {
|
if (class_exists($theClass, true)) {
|
||||||
@@ -390,7 +389,7 @@ class TestSuite implements IteratorAggregate, Reorderable, SelfDescribing, Test
|
|||||||
if (is_file($filename) && substr($filename, -5) === '.phpt') {
|
if (is_file($filename) && substr($filename, -5) === '.phpt') {
|
||||||
$this->addTest(new PhptTestCase($filename));
|
$this->addTest(new PhptTestCase($filename));
|
||||||
|
|
||||||
$this->declaredClasses = get_declared_classes();
|
$this->declaredClassesPointer = count(get_declared_classes());
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -400,7 +399,7 @@ class TestSuite implements IteratorAggregate, Reorderable, SelfDescribing, Test
|
|||||||
// The given file may contain further stub classes in addition to the
|
// The given file may contain further stub classes in addition to the
|
||||||
// test class itself. Figure out the actual test class.
|
// test class itself. Figure out the actual test class.
|
||||||
$filename = FileLoader::checkAndLoad($filename);
|
$filename = FileLoader::checkAndLoad($filename);
|
||||||
$newClasses = array_diff(get_declared_classes(), $this->declaredClasses);
|
$newClasses = array_slice(get_declared_classes(), $this->declaredClassesPointer);
|
||||||
|
|
||||||
// The diff is empty in case a parent class (with test methods) is added
|
// The diff is empty in case a parent class (with test methods) is added
|
||||||
// AFTER a child class that inherited from it. To account for that case,
|
// AFTER a child class that inherited from it. To account for that case,
|
||||||
@@ -410,8 +409,8 @@ class TestSuite implements IteratorAggregate, Reorderable, SelfDescribing, Test
|
|||||||
// On the assumption that test classes are defined first in files,
|
// On the assumption that test classes are defined first in files,
|
||||||
// process discovered classes in approximate LIFO order, so as to
|
// process discovered classes in approximate LIFO order, so as to
|
||||||
// avoid unnecessary reflection.
|
// avoid unnecessary reflection.
|
||||||
$this->foundClasses = array_merge($newClasses, $this->foundClasses);
|
$this->foundClasses = array_merge($newClasses, $this->foundClasses);
|
||||||
$this->declaredClasses = get_declared_classes();
|
$this->declaredClassesPointer = count(get_declared_classes());
|
||||||
}
|
}
|
||||||
|
|
||||||
// The test class's name must match the filename, either in full, or as
|
// The test class's name must match the filename, either in full, or as
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterIncompleteTestHook extends TestHook
|
interface AfterIncompleteTestHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterLastTestHook extends Hook
|
interface AfterLastTestHook extends Hook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterRiskyTestHook extends TestHook
|
interface AfterRiskyTestHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterSkippedTestHook extends TestHook
|
interface AfterSkippedTestHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterSuccessfulTestHook extends TestHook
|
interface AfterSuccessfulTestHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterTestErrorHook extends TestHook
|
interface AfterTestErrorHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterTestFailureHook extends TestHook
|
interface AfterTestFailureHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterTestHook extends TestHook
|
interface AfterTestHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface AfterTestWarningHook extends TestHook
|
interface AfterTestWarningHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface BeforeFirstTestHook extends Hook
|
interface BeforeFirstTestHook extends Hook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface BeforeTestHook extends TestHook
|
interface BeforeTestHook extends TestHook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface Hook
|
interface Hook
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -10,7 +10,13 @@
|
|||||||
namespace PHPUnit\Runner;
|
namespace PHPUnit\Runner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* This interface, as well as the associated mechanism for extending PHPUnit,
|
||||||
|
* will be removed in PHPUnit 10. There is no alternative available in this
|
||||||
|
* version of PHPUnit.
|
||||||
|
*
|
||||||
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
* @no-named-arguments Parameter names are not covered by the backward compatibility promise for PHPUnit
|
||||||
|
*
|
||||||
|
* @see https://github.com/sebastianbergmann/phpunit/issues/4676
|
||||||
*/
|
*/
|
||||||
interface TestHook extends Hook
|
interface TestHook extends Hook
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -41,7 +41,7 @@ final class Version
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (self::$version === '') {
|
if (self::$version === '') {
|
||||||
self::$version = (new VersionId('9.5.11', dirname(__DIR__, 2)))->getVersion();
|
self::$version = (new VersionId('9.5.16', dirname(__DIR__, 2)))->getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
return self::$version;
|
return self::$version;
|
||||||
|
|||||||
+5
-7
@@ -93,11 +93,6 @@ final class TestRunner extends BaseTestRunner
|
|||||||
|
|
||||||
public const EXCEPTION_EXIT = 2;
|
public const EXCEPTION_EXIT = 2;
|
||||||
|
|
||||||
/**
|
|
||||||
* @var bool
|
|
||||||
*/
|
|
||||||
private static $versionStringPrinted = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var CodeCoverageFilter
|
* @var CodeCoverageFilter
|
||||||
*/
|
*/
|
||||||
@@ -334,8 +329,6 @@ final class TestRunner extends BaseTestRunner
|
|||||||
Version::getVersionString() . "\n"
|
Version::getVersionString() . "\n"
|
||||||
);
|
);
|
||||||
|
|
||||||
self::$versionStringPrinted = true;
|
|
||||||
|
|
||||||
foreach ($arguments['listeners'] as $listener) {
|
foreach ($arguments['listeners'] as $listener) {
|
||||||
$result->addListener($listener);
|
$result->addListener($listener);
|
||||||
}
|
}
|
||||||
@@ -1142,6 +1135,11 @@ final class TestRunner extends BaseTestRunner
|
|||||||
$arguments['timeoutForMediumTests'] = $arguments['timeoutForMediumTests'] ?? 10;
|
$arguments['timeoutForMediumTests'] = $arguments['timeoutForMediumTests'] ?? 10;
|
||||||
$arguments['timeoutForSmallTests'] = $arguments['timeoutForSmallTests'] ?? 1;
|
$arguments['timeoutForSmallTests'] = $arguments['timeoutForSmallTests'] ?? 1;
|
||||||
$arguments['verbose'] = $arguments['verbose'] ?? false;
|
$arguments['verbose'] = $arguments['verbose'] ?? false;
|
||||||
|
|
||||||
|
if ($arguments['reportLowUpperBound'] > $arguments['reportHighLowerBound']) {
|
||||||
|
$arguments['reportLowUpperBound'] = 50;
|
||||||
|
$arguments['reportHighLowerBound'] = 90;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function processSuiteFilters(TestSuite $suite, array $arguments): void
|
private function processSuiteFilters(TestSuite $suite, array $arguments): void
|
||||||
|
|||||||
+30
-2
@@ -2,6 +2,18 @@
|
|||||||
|
|
||||||
All notable changes in `sebastian/global-state` are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
All notable changes in `sebastian/global-state` are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
|
||||||
|
|
||||||
|
## [5.0.5] - 2022-02-14
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* [#34](https://github.com/sebastianbergmann/global-state/pull/34): Uninitialised typed static properties are not handled correctly
|
||||||
|
|
||||||
|
## [5.0.4] - 2022-02-10
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* The `$includeTraits` parameter of `SebastianBergmann\GlobalState\Snapshot::__construct()` is not respected
|
||||||
|
|
||||||
## [5.0.3] - 2021-06-11
|
## [5.0.3] - 2021-06-11
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@@ -32,6 +44,18 @@ All notable changes in `sebastian/global-state` are documented in this file usin
|
|||||||
|
|
||||||
* This component is no longer supported on PHP 7.2
|
* This component is no longer supported on PHP 7.2
|
||||||
|
|
||||||
|
## [3.0.2] - 2022-02-10
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
* The `$includeTraits` parameter of `SebastianBergmann\GlobalState\Snapshot::__construct()` is not respected
|
||||||
|
|
||||||
|
## [3.0.1] - 2020-11-30
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
* Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2`
|
||||||
|
|
||||||
## [3.0.0] - 2019-02-01
|
## [3.0.0] - 2019-02-01
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@@ -42,10 +66,14 @@ All notable changes in `sebastian/global-state` are documented in this file usin
|
|||||||
|
|
||||||
* This component is no longer supported on PHP 7.0 and PHP 7.1
|
* This component is no longer supported on PHP 7.0 and PHP 7.1
|
||||||
|
|
||||||
|
[5.0.5]: https://github.com/sebastianbergmann/global-state/compare/5.0.4...5.0.5
|
||||||
|
[5.0.4]: https://github.com/sebastianbergmann/global-state/compare/5.0.3...5.0.4
|
||||||
[5.0.3]: https://github.com/sebastianbergmann/global-state/compare/5.0.2...5.0.3
|
[5.0.3]: https://github.com/sebastianbergmann/global-state/compare/5.0.2...5.0.3
|
||||||
[5.0.2]: https://github.com/sebastianbergmann/global-state/compare/5.0.1...5.0.2
|
[5.0.2]: https://github.com/sebastianbergmann/global-state/compare/5.0.1...5.0.2
|
||||||
[5.0.1]: https://github.com/sebastianbergmann/global-state/compare/5.0.0...5.0.1
|
[5.0.1]: https://github.com/sebastianbergmann/global-state/compare/5.0.0...5.0.1
|
||||||
[5.0.0]: https://github.com/sebastianbergmann/global-state/compare/4.0.0...5.0.0
|
[5.0.0]: https://github.com/sebastianbergmann/global-state/compare/4.0.0...5.0.0
|
||||||
[4.0.0]: https://github.com/sebastianbergmann/global-state/compare/3.0.0...4.0.0
|
[4.0.0]: https://github.com/sebastianbergmann/global-state/compare/3.0.2...4.0.0
|
||||||
[3.0.0]: https://github.com/sebastianbergmann/global-state/compare/2.0.0...3.0.0
|
[3.0.2]: https://github.com/sebastianbergmann/phpunit/compare/3.0.1...3.0.2
|
||||||
|
[3.0.1]: https://github.com/sebastianbergmann/phpunit/compare/3.0.0...3.0.1
|
||||||
|
[3.0.0]: https://github.com/sebastianbergmann/phpunit/compare/2.0.0...3.0.0
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
sebastian/global-state
|
sebastian/global-state
|
||||||
|
|
||||||
Copyright (c) 2001-2021, Sebastian Bergmann <sebastian@phpunit.de>.
|
Copyright (c) 2001-2022, Sebastian Bergmann <sebastian@phpunit.de>.
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
|||||||
+9
-1
@@ -9,6 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
namespace SebastianBergmann\GlobalState;
|
namespace SebastianBergmann\GlobalState;
|
||||||
|
|
||||||
|
use const PHP_VERSION_ID;
|
||||||
use function array_keys;
|
use function array_keys;
|
||||||
use function array_merge;
|
use function array_merge;
|
||||||
use function array_reverse;
|
use function array_reverse;
|
||||||
@@ -137,7 +138,9 @@ class Snapshot
|
|||||||
$this->includedFiles = get_included_files();
|
$this->includedFiles = get_included_files();
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->traits = get_declared_traits();
|
if ($includeTraits) {
|
||||||
|
$this->traits = get_declared_traits();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public function excludeList(): ExcludeList
|
public function excludeList(): ExcludeList
|
||||||
@@ -313,6 +316,11 @@ class Snapshot
|
|||||||
}
|
}
|
||||||
|
|
||||||
$attribute->setAccessible(true);
|
$attribute->setAccessible(true);
|
||||||
|
|
||||||
|
if (PHP_VERSION_ID >= 70400 && !$attribute->isInitialized()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$value = $attribute->getValue();
|
$value = $attribute->getValue();
|
||||||
|
|
||||||
if ($this->canBeSerialized($value)) {
|
if ($this->canBeSerialized($value)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user