Skip to content

Commit 3a0a630

Browse files
Implement configuration options for displaying details on all issues and failing on all issues
1 parent 506d663 commit 3a0a630

17 files changed

+425
-30
lines changed

ChangeLog-10.5.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
All notable changes of the PHPUnit 10.5 release series are documented in this file using the [Keep a CHANGELOG](https://keepachangelog.com/) principles.
44

5+
## [10.5.46] - 2025-MM-DD
6+
7+
### Added
8+
9+
* `displayDetailsOnAllIssues` attribute on the `<phpunit>` element of the XML configuration file and `--display-all-issues` CLI option for controlling whether PHPUnit should display details on all issues that are triggered (default: `false`)
10+
* `failOnAllIssues` attribute on the `<phpunit>` element of the XML configuration file and `--fail-on-all-issues` CLI option for controlling whether PHPUnit should fail on all issues that are triggered (default: `false`)
11+
512
## [10.5.45] - 2025-02-06
613

714
### Changed
@@ -402,6 +409,7 @@ All notable changes of the PHPUnit 10.5 release series are documented in this fi
402409

403410
* [#5563](https://github.com/sebastianbergmann/phpunit/issues/5563): `createMockForIntersectionOfInterfaces()` does not automatically register mock object for expectation verification
404411

412+
[10.5.46]: https://github.com/sebastianbergmann/phpunit/compare/10.5.45...10.5
405413
[10.5.45]: https://github.com/sebastianbergmann/phpunit/compare/10.5.44...10.5.45
406414
[10.5.44]: https://github.com/sebastianbergmann/phpunit/compare/10.5.43...10.5.44
407415
[10.5.43]: https://github.com/sebastianbergmann/phpunit/compare/10.5.42...10.5.43

phpunit.xsd

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@
177177
<xs:attribute name="numberOfTestsBeforeGarbageCollection" type="xs:integer" default="100"/>
178178
<xs:attribute name="requireCoverageMetadata" type="xs:boolean" default="false"/>
179179
<xs:attribute name="processIsolation" type="xs:boolean" default="false"/>
180+
<xs:attribute name="failOnAllIssues" type="xs:boolean" default="false"/>
180181
<xs:attribute name="failOnDeprecation" type="xs:boolean" default="false"/>
181182
<xs:attribute name="failOnPhpunitDeprecation" type="xs:boolean" default="false"/>
182183
<xs:attribute name="failOnEmptyTestSuite" type="xs:boolean" default="false"/>
@@ -211,6 +212,7 @@
211212
<xs:attribute name="extensionsDirectory" type="xs:anyURI"/>
212213
<xs:attribute name="executionOrder" type="executionOrderType" default="default"/>
213214
<xs:attribute name="resolveDependencies" type="xs:boolean" default="true"/>
215+
<xs:attribute name="displayDetailsOnAllIssues" type="xs:boolean" default="false"/>
214216
<xs:attribute name="displayDetailsOnIncompleteTests" type="xs:boolean" default="false"/>
215217
<xs:attribute name="displayDetailsOnSkippedTests" type="xs:boolean" default="false"/>
216218
<xs:attribute name="displayDetailsOnTestsThatTriggerDeprecations" type="xs:boolean" default="false"/>

src/TextUI/Application.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -271,14 +271,14 @@ public function run(array $argv): int
271271
}
272272

273273
$shellExitCode = (new ShellExitCodeCalculator)->calculate(
274-
$configuration->failOnDeprecation(),
275-
$configuration->failOnPhpunitDeprecation(),
276-
$configuration->failOnEmptyTestSuite(),
277-
$configuration->failOnIncomplete(),
278-
$configuration->failOnNotice(),
279-
$configuration->failOnRisky(),
280-
$configuration->failOnSkipped(),
281-
$configuration->failOnWarning(),
274+
$configuration->failOnDeprecation() || $configuration->failOnAllIssues(),
275+
$configuration->failOnPhpunitDeprecation() || $configuration->failOnAllIssues(),
276+
$configuration->failOnEmptyTestSuite() || $configuration->failOnAllIssues(),
277+
$configuration->failOnIncomplete() || $configuration->failOnAllIssues(),
278+
$configuration->failOnNotice() || $configuration->failOnAllIssues(),
279+
$configuration->failOnRisky() || $configuration->failOnAllIssues(),
280+
$configuration->failOnSkipped() || $configuration->failOnAllIssues(),
281+
$configuration->failOnWarning() || $configuration->failOnAllIssues(),
282282
$result,
283283
);
284284

src/TextUI/Configuration/Cli/Builder.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ final class Builder
5555
'coverage-xml=',
5656
'path-coverage',
5757
'disallow-test-output',
58+
'display-all-issues',
5859
'display-incomplete',
5960
'display-skipped',
6061
'display-deprecations',
@@ -101,6 +102,7 @@ final class Builder
101102
'reverse-list',
102103
'static-backup',
103104
'stderr',
105+
'fail-on-all-issues',
104106
'fail-on-deprecation',
105107
'fail-on-phpunit-deprecation',
106108
'fail-on-empty-test-suite',
@@ -187,6 +189,7 @@ public function fromParameters(array $parameters): Configuration
187189
$defaultTimeLimit = null;
188190
$disableCodeCoverageIgnore = null;
189191
$disallowTestOutput = null;
192+
$displayAllIssues = null;
190193
$displayIncomplete = null;
191194
$displaySkipped = null;
192195
$displayDeprecations = null;
@@ -198,6 +201,7 @@ public function fromParameters(array $parameters): Configuration
198201
$excludeGroups = null;
199202
$executionOrder = null;
200203
$executionOrderDefects = null;
204+
$failOnAllIssues = null;
201205
$failOnDeprecation = null;
202206
$failOnPhpunitDeprecation = null;
203207
$failOnEmptyTestSuite = null;
@@ -568,6 +572,11 @@ public function fromParameters(array $parameters): Configuration
568572

569573
break;
570574

575+
case '--fail-on-all-issues':
576+
$failOnAllIssues = true;
577+
578+
break;
579+
571580
case '--fail-on-deprecation':
572581
$failOnDeprecation = true;
573582

@@ -753,6 +762,11 @@ public function fromParameters(array $parameters): Configuration
753762

754763
break;
755764

765+
case '--display-all-issues':
766+
$displayAllIssues = true;
767+
768+
break;
769+
756770
case '--display-incomplete':
757771
$displayIncomplete = true;
758772

@@ -924,6 +938,7 @@ public function fromParameters(array $parameters): Configuration
924938
$excludeGroups,
925939
$executionOrder,
926940
$executionOrderDefects,
941+
$failOnAllIssues,
927942
$failOnDeprecation,
928943
$failOnPhpunitDeprecation,
929944
$failOnEmptyTestSuite,
@@ -978,6 +993,7 @@ public function fromParameters(array $parameters): Configuration
978993
$testSuite,
979994
$excludeTestSuite,
980995
$useDefaultConfiguration,
996+
$displayAllIssues,
981997
$displayIncomplete,
982998
$displaySkipped,
983999
$displayDeprecations,

src/TextUI/Configuration/Cli/Configuration.php

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ final class Configuration
5454
private readonly ?array $excludeGroups;
5555
private readonly ?int $executionOrder;
5656
private readonly ?int $executionOrderDefects;
57+
private readonly ?bool $failOnAllIssues;
5758
private readonly ?bool $failOnDeprecation;
5859
private readonly ?bool $failOnPhpunitDeprecation;
5960
private readonly ?bool $failOnEmptyTestSuite;
@@ -114,6 +115,7 @@ final class Configuration
114115
private readonly ?string $testSuite;
115116
private readonly ?string $excludeTestSuite;
116117
private readonly bool $useDefaultConfiguration;
118+
private readonly ?bool $displayDetailsOnAllIssues;
117119
private readonly ?bool $displayDetailsOnIncompleteTests;
118120
private readonly ?bool $displayDetailsOnSkippedTests;
119121
private readonly ?bool $displayDetailsOnTestsThatTriggerDeprecations;
@@ -130,7 +132,7 @@ final class Configuration
130132
* @psalm-param list<non-empty-string> $arguments
131133
* @psalm-param ?non-empty-list<non-empty-string> $testSuffixes
132134
*/
133-
public function __construct(array $arguments, ?string $atLeastVersion, ?bool $backupGlobals, ?bool $backupStaticProperties, ?bool $beStrictAboutChangesToGlobalState, ?string $bootstrap, ?string $cacheDirectory, ?bool $cacheResult, ?string $cacheResultFile, bool $checkVersion, ?string $colors, null|int|string $columns, ?string $configurationFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4J, ?string $coverageHtml, ?string $coveragePhp, ?string $coverageText, ?bool $coverageTextShowUncoveredFiles, ?bool $coverageTextShowOnlySummary, ?string $coverageXml, ?bool $pathCoverage, ?string $coverageCacheDirectory, bool $warmCoverageCache, ?int $defaultTimeLimit, ?bool $disableCodeCoverageIgnore, ?bool $disallowTestOutput, ?bool $enforceTimeLimit, ?array $excludeGroups, ?int $executionOrder, ?int $executionOrderDefects, ?bool $failOnDeprecation, ?bool $failOnPhpunitDeprecation, ?bool $failOnEmptyTestSuite, ?bool $failOnIncomplete, ?bool $failOnNotice, ?bool $failOnRisky, ?bool $failOnSkipped, ?bool $failOnWarning, ?bool $stopOnDefect, ?bool $stopOnDeprecation, ?bool $stopOnError, ?bool $stopOnFailure, ?bool $stopOnIncomplete, ?bool $stopOnNotice, ?bool $stopOnRisky, ?bool $stopOnSkipped, ?bool $stopOnWarning, ?string $filter, ?string $generateBaseline, ?string $useBaseline, bool $ignoreBaseline, bool $generateConfiguration, bool $migrateConfiguration, ?array $groups, ?array $testsCovering, ?array $testsUsing, bool $help, ?string $includePath, ?array $iniSettings, ?string $junitLogfile, bool $listGroups, bool $listSuites, bool $listTests, ?string $listTestsXml, ?bool $noCoverage, ?bool $noExtensions, ?bool $noOutput, ?bool $noProgress, ?bool $noResults, ?bool $noLogging, ?bool $processIsolation, ?int $randomOrderSeed, ?bool $reportUselessTests, ?bool $resolveDependencies, ?bool $reverseList, ?bool $stderr, ?bool $strictCoverage, ?string $teamcityLogfile, ?string $testdoxHtmlFile, ?string $testdoxTextFile, ?array $testSuffixes, ?string $testSuite, ?string $excludeTestSuite, bool $useDefaultConfiguration, ?bool $displayDetailsOnIncompleteTests, ?bool $displayDetailsOnSkippedTests, ?bool $displayDetailsOnTestsThatTriggerDeprecations, ?bool $displayDetailsOnPhpunitDeprecations, ?bool $displayDetailsOnTestsThatTriggerErrors, ?bool $displayDetailsOnTestsThatTriggerNotices, ?bool $displayDetailsOnTestsThatTriggerWarnings, bool $version, ?array $coverageFilter, ?string $logEventsText, ?string $logEventsVerboseText, ?bool $printerTeamCity, ?bool $printerTestDox, bool $debug)
135+
public function __construct(array $arguments, ?string $atLeastVersion, ?bool $backupGlobals, ?bool $backupStaticProperties, ?bool $beStrictAboutChangesToGlobalState, ?string $bootstrap, ?string $cacheDirectory, ?bool $cacheResult, ?string $cacheResultFile, bool $checkVersion, ?string $colors, null|int|string $columns, ?string $configurationFile, ?string $coverageClover, ?string $coverageCobertura, ?string $coverageCrap4J, ?string $coverageHtml, ?string $coveragePhp, ?string $coverageText, ?bool $coverageTextShowUncoveredFiles, ?bool $coverageTextShowOnlySummary, ?string $coverageXml, ?bool $pathCoverage, ?string $coverageCacheDirectory, bool $warmCoverageCache, ?int $defaultTimeLimit, ?bool $disableCodeCoverageIgnore, ?bool $disallowTestOutput, ?bool $enforceTimeLimit, ?array $excludeGroups, ?int $executionOrder, ?int $executionOrderDefects, ?bool $failOnAllIssues, ?bool $failOnDeprecation, ?bool $failOnPhpunitDeprecation, ?bool $failOnEmptyTestSuite, ?bool $failOnIncomplete, ?bool $failOnNotice, ?bool $failOnRisky, ?bool $failOnSkipped, ?bool $failOnWarning, ?bool $stopOnDefect, ?bool $stopOnDeprecation, ?bool $stopOnError, ?bool $stopOnFailure, ?bool $stopOnIncomplete, ?bool $stopOnNotice, ?bool $stopOnRisky, ?bool $stopOnSkipped, ?bool $stopOnWarning, ?string $filter, ?string $generateBaseline, ?string $useBaseline, bool $ignoreBaseline, bool $generateConfiguration, bool $migrateConfiguration, ?array $groups, ?array $testsCovering, ?array $testsUsing, bool $help, ?string $includePath, ?array $iniSettings, ?string $junitLogfile, bool $listGroups, bool $listSuites, bool $listTests, ?string $listTestsXml, ?bool $noCoverage, ?bool $noExtensions, ?bool $noOutput, ?bool $noProgress, ?bool $noResults, ?bool $noLogging, ?bool $processIsolation, ?int $randomOrderSeed, ?bool $reportUselessTests, ?bool $resolveDependencies, ?bool $reverseList, ?bool $stderr, ?bool $strictCoverage, ?string $teamcityLogfile, ?string $testdoxHtmlFile, ?string $testdoxTextFile, ?array $testSuffixes, ?string $testSuite, ?string $excludeTestSuite, bool $useDefaultConfiguration, ?bool $displayDetailsOnAllIssues, ?bool $displayDetailsOnIncompleteTests, ?bool $displayDetailsOnSkippedTests, ?bool $displayDetailsOnTestsThatTriggerDeprecations, ?bool $displayDetailsOnPhpunitDeprecations, ?bool $displayDetailsOnTestsThatTriggerErrors, ?bool $displayDetailsOnTestsThatTriggerNotices, ?bool $displayDetailsOnTestsThatTriggerWarnings, bool $version, ?array $coverageFilter, ?string $logEventsText, ?string $logEventsVerboseText, ?bool $printerTeamCity, ?bool $printerTestDox, bool $debug)
134136
{
135137
$this->arguments = $arguments;
136138
$this->atLeastVersion = $atLeastVersion;
@@ -165,6 +167,7 @@ public function __construct(array $arguments, ?string $atLeastVersion, ?bool $ba
165167
$this->excludeGroups = $excludeGroups;
166168
$this->executionOrder = $executionOrder;
167169
$this->executionOrderDefects = $executionOrderDefects;
170+
$this->failOnAllIssues = $failOnAllIssues;
168171
$this->failOnDeprecation = $failOnDeprecation;
169172
$this->failOnPhpunitDeprecation = $failOnPhpunitDeprecation;
170173
$this->failOnEmptyTestSuite = $failOnEmptyTestSuite;
@@ -219,6 +222,7 @@ public function __construct(array $arguments, ?string $atLeastVersion, ?bool $ba
219222
$this->testSuite = $testSuite;
220223
$this->excludeTestSuite = $excludeTestSuite;
221224
$this->useDefaultConfiguration = $useDefaultConfiguration;
225+
$this->displayDetailsOnAllIssues = $displayDetailsOnAllIssues;
222226
$this->displayDetailsOnIncompleteTests = $displayDetailsOnIncompleteTests;
223227
$this->displayDetailsOnSkippedTests = $displayDetailsOnSkippedTests;
224228
$this->displayDetailsOnTestsThatTriggerDeprecations = $displayDetailsOnTestsThatTriggerDeprecations;
@@ -880,6 +884,26 @@ public function failOnDeprecation(): bool
880884
return $this->failOnDeprecation;
881885
}
882886

887+
/**
888+
* @psalm-assert-if-true !null $this->failOnAllIssues
889+
*/
890+
public function hasFailOnAllIssues(): bool
891+
{
892+
return $this->failOnAllIssues !== null;
893+
}
894+
895+
/**
896+
* @throws Exception
897+
*/
898+
public function failOnAllIssues(): bool
899+
{
900+
if (!$this->hasFailOnAllIssues()) {
901+
throw new Exception;
902+
}
903+
904+
return $this->failOnAllIssues;
905+
}
906+
883907
/**
884908
* @psalm-assert-if-true !null $this->failOnPhpunitDeprecation
885909
*/
@@ -1862,6 +1886,26 @@ public function useDefaultConfiguration(): bool
18621886
return $this->useDefaultConfiguration;
18631887
}
18641888

1889+
/**
1890+
* @psalm-assert-if-true !null $this->displayDetailsOnAllIssues
1891+
*/
1892+
public function hasDisplayDetailsOnAllIssues(): bool
1893+
{
1894+
return $this->displayDetailsOnAllIssues !== null;
1895+
}
1896+
1897+
/**
1898+
* @throws Exception
1899+
*/
1900+
public function displayDetailsOnAllIssues(): bool
1901+
{
1902+
if (!$this->hasDisplayDetailsOnAllIssues()) {
1903+
throw new Exception;
1904+
}
1905+
1906+
return $this->displayDetailsOnAllIssues;
1907+
}
1908+
18651909
/**
18661910
* @psalm-assert-if-true !null $this->displayDetailsOnIncompleteTests
18671911
*/

0 commit comments

Comments
 (0)