Skip to content

Commit 7e06a82

Browse files
Closes #1905
1 parent c8ac190 commit 7e06a82

File tree

9 files changed

+81
-11
lines changed

9 files changed

+81
-11
lines changed

ChangeLog-5.2.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ All notable changes of the PHPUnit 5.2 release series are documented in this fil
77
### Added
88

99
* Implemented [#1902](https://github.com/sebastianbergmann/phpunit/issues/1902): Mark a tests as risky when it performs an assertion on a test double
10+
* Implemented [#1905](https://github.com/sebastianbergmann/phpunit/issues/1905): Implement `--fail-on-risky` and `--fail-on-warning` commandline options as well as `failOnRisky` and `failOnWarning` configuration options
1011

1112
[5.2.0]: https://github.com/sebastianbergmann/phpunit/compare/5.1...5.2.0
1213

src/TextUI/Command.php

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ class PHPUnit_TextUI_Command
7777
'stop-on-incomplete' => null,
7878
'stop-on-risky' => null,
7979
'stop-on-skipped' => null,
80+
'fail-on-warning' => null,
81+
'fail-on-risky' => null,
8082
'strict-coverage' => null,
8183
'strict-global-state' => null,
8284
'tap' => null,
@@ -151,24 +153,20 @@ public function run(array $argv, $exit = true)
151153
unset($this->arguments['testFile']);
152154

153155
try {
154-
$result = $runner->doRun($suite, $this->arguments);
156+
$result = $runner->doRun($suite, $this->arguments, $exit);
155157
} catch (PHPUnit_Framework_Exception $e) {
156158
print $e->getMessage() . "\n";
157159
}
158160

159-
$ret = PHPUnit_TextUI_TestRunner::FAILURE_EXIT;
161+
$return = PHPUnit_TextUI_TestRunner::FAILURE_EXIT;
160162

161163
if (isset($result) && $result->wasSuccessful()) {
162-
$ret = PHPUnit_TextUI_TestRunner::SUCCESS_EXIT;
164+
$return = PHPUnit_TextUI_TestRunner::SUCCESS_EXIT;
163165
} elseif (!isset($result) || $result->errorCount() > 0) {
164-
$ret = PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT;
166+
$return = PHPUnit_TextUI_TestRunner::EXCEPTION_EXIT;
165167
}
166168

167-
if ($exit) {
168-
exit($ret);
169-
} else {
170-
return $ret;
171-
}
169+
return $return;
172170
}
173171

174172
/**
@@ -414,6 +412,14 @@ protected function handleArguments(array $argv)
414412
$this->arguments['stopOnSkipped'] = true;
415413
break;
416414

415+
case '--fail-on-warning':
416+
$this->arguments['failOnWarning'] = true;
417+
break;
418+
419+
case '--fail-on-risky':
420+
$this->arguments['failOnRisky'] = true;
421+
break;
422+
417423
case '--tap':
418424
$this->arguments['printer'] = 'PHPUnit_Util_Log_TAP';
419425
break;
@@ -944,6 +950,8 @@ protected function showHelp()
944950
--stop-on-risky Stop execution upon first risky test.
945951
--stop-on-skipped Stop execution upon first skipped test.
946952
--stop-on-incomplete Stop execution upon first incomplete test.
953+
--fail-on-warning Treat tests with warnings as failures.
954+
--fail-on-risky Treat risky tests as failures.
947955
-v|--verbose Output more verbose information.
948956
--debug Display debugging information during test execution.
949957

src/TextUI/TestRunner.php

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,10 @@ private function processSuiteFilters(PHPUnit_Framework_TestSuite $suite, array $
138138
/**
139139
* @param PHPUnit_Framework_Test $suite
140140
* @param array $arguments
141+
* @param bool $exit
141142
* @return PHPUnit_Framework_TestResult
142143
*/
143-
public function doRun(PHPUnit_Framework_Test $suite, array $arguments = [])
144+
public function doRun(PHPUnit_Framework_Test $suite, array $arguments = [], $exit)
144145
{
145146
if (isset($arguments['configuration'])) {
146147
$GLOBALS['__PHPUNIT_CONFIGURATION_FILE'] = $arguments['configuration'];
@@ -524,6 +525,28 @@ class_exists($arguments['printer'], false)) {
524525
}
525526
}
526527

528+
if ($exit) {
529+
if ($result->wasSuccessful()) {
530+
if ($arguments['failOnRisky'] && !$result->allHarmless()) {
531+
exit(self::FAILURE_EXIT);
532+
}
533+
534+
if ($arguments['failOnWarning'] && $result->warningCount() > 0) {
535+
exit(self::FAILURE_EXIT);
536+
}
537+
538+
exit(self::SUCCESS_EXIT);
539+
}
540+
541+
if ($result->errorCount() > 0) {
542+
exit(self::EXCEPTION_EXIT);
543+
}
544+
545+
if ($result->failureCount() > 0) {
546+
exit(self::FAILURE_EXIT);
547+
}
548+
}
549+
527550
return $result;
528551
}
529552

@@ -681,6 +704,16 @@ protected function handleConfiguration(array &$arguments)
681704
$arguments['stopOnSkipped'] = $phpunitConfiguration['stopOnSkipped'];
682705
}
683706

707+
if (isset($phpunitConfiguration['failOnWarning']) &&
708+
!isset($arguments['failOnWarning'])) {
709+
$arguments['failOnWarning'] = $phpunitConfiguration['failOnWarning'];
710+
}
711+
712+
if (isset($phpunitConfiguration['failOnRisky']) &&
713+
!isset($arguments['failOnRisky'])) {
714+
$arguments['failOnRisky'] = $phpunitConfiguration['failOnRisky'];
715+
}
716+
684717
if (isset($phpunitConfiguration['timeoutForSmallTests']) &&
685718
!isset($arguments['timeoutForSmallTests'])) {
686719
$arguments['timeoutForSmallTests'] = $phpunitConfiguration['timeoutForSmallTests'];
@@ -949,6 +982,8 @@ protected function handleConfiguration(array &$arguments)
949982
$arguments['stopOnIncomplete'] = isset($arguments['stopOnIncomplete']) ? $arguments['stopOnIncomplete'] : false;
950983
$arguments['stopOnRisky'] = isset($arguments['stopOnRisky']) ? $arguments['stopOnRisky'] : false;
951984
$arguments['stopOnSkipped'] = isset($arguments['stopOnSkipped']) ? $arguments['stopOnSkipped'] : false;
985+
$arguments['failOnWarning'] = isset($arguments['failOnWarning']) ? $arguments['failOnWarning'] : false;
986+
$arguments['failOnRisky'] = isset($arguments['failOnRisky']) ? $arguments['failOnRisky'] : false;
952987
$arguments['timeoutForSmallTests'] = isset($arguments['timeoutForSmallTests']) ? $arguments['timeoutForSmallTests'] : 1;
953988
$arguments['timeoutForMediumTests'] = isset($arguments['timeoutForMediumTests']) ? $arguments['timeoutForMediumTests'] : 10;
954989
$arguments['timeoutForLargeTests'] = isset($arguments['timeoutForLargeTests']) ? $arguments['timeoutForLargeTests'] : 60;

src/Util/Configuration.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
* stopOnIncomplete="false"
3636
* stopOnRisky="false"
3737
* stopOnSkipped="false"
38+
* failOnWarning="false"
39+
* failOnRisky="false"
3840
* testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
3941
* beStrictAboutChangesToGlobalState="false"
4042
* beStrictAboutOutputDuringTests="false"
@@ -658,6 +660,20 @@ public function getPHPUnitConfiguration()
658660
);
659661
}
660662

663+
if ($root->hasAttribute('failOnWarning')) {
664+
$result['failOnWarning'] = $this->getBoolean(
665+
(string) $root->getAttribute('failOnWarning'),
666+
false
667+
);
668+
}
669+
670+
if ($root->hasAttribute('failOnRisky')) {
671+
$result['failOnRisky'] = $this->getBoolean(
672+
(string) $root->getAttribute('failOnRisky'),
673+
false
674+
);
675+
}
676+
661677
if ($root->hasAttribute('testSuiteLoaderClass')) {
662678
$result['testSuiteLoaderClass'] = (string) $root->getAttribute(
663679
'testSuiteLoaderClass'

tests/TextUI/help.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ Test Execution Options:
6868
--stop-on-risky Stop execution upon first risky test.
6969
--stop-on-skipped Stop execution upon first skipped test.
7070
--stop-on-incomplete Stop execution upon first incomplete test.
71+
--fail-on-warning Treat tests with warnings as failures.
72+
--fail-on-risky Treat risky tests as failures.
7173
-v|--verbose Output more verbose information.
7274
--debug Display debugging information during test execution.
7375

tests/TextUI/help2.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ Test Execution Options:
6969
--stop-on-risky Stop execution upon first risky test.
7070
--stop-on-skipped Stop execution upon first skipped test.
7171
--stop-on-incomplete Stop execution upon first incomplete test.
72+
--fail-on-warning Treat tests with warnings as failures.
73+
--fail-on-risky Treat risky tests as failures.
7274
-v|--verbose Output more verbose information.
7375
--debug Display debugging information during test execution.
7476

tests/Util/ConfigurationTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,9 @@ public function testPHPUnitConfigurationIsReadCorrectly()
333333
'timeoutForMediumTests' => 10,
334334
'timeoutForLargeTests' => 60,
335335
'beStrictAboutResourceUsageDuringSmallTests' => false,
336-
'disallowTodoAnnotatedTests' => false
336+
'disallowTodoAnnotatedTests' => false,
337+
'failOnWarning' => false,
338+
'failOnRisky' => false
337339
],
338340
$this->configuration->getPHPUnitConfiguration()
339341
);

tests/_files/configuration.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
printerClass="PHPUnit_TextUI_ResultPrinter"
1616
stopOnFailure="false"
1717
stopOnWarning="false"
18+
failOnWarning="false"
19+
failOnRisky="false"
1820
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
1921
beStrictAboutChangesToGlobalState="false"
2022
beStrictAboutOutputDuringTests="false"

tests/_files/configuration_xinclude.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
printerClass="PHPUnit_TextUI_ResultPrinter"
1616
stopOnFailure="false"
1717
stopOnWarning="false"
18+
failOnWarning="false"
19+
failOnRisky="false"
1820
testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
1921
beStrictAboutChangesToGlobalState="false"
2022
beStrictAboutOutputDuringTests="false"

0 commit comments

Comments
 (0)