feature #25997 Always show all deprecations except legacy ones when not weak (greg0ire)

This PR was merged into the 4.1-dev branch.

Discussion
----------

Always show all deprecations except legacy ones when not weak

When using any mode but the weak mode, you want your build to fail on some or
all deprecations, but it is still nice to be able to see what you could
fix without having to change modes.

| Q             | A
| ------------- | ---
| Branch?       | master
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| License       | MIT

<!--
- Bug fixes must be submitted against the lowest branch where they apply
  (lowest branches are regularly merged to upper ones so they get the fixes too).
- Features and deprecations must be submitted against the master branch.
- Replace this comment by a description of what your PR is solving.
-->

Commits
-------

9e37873860 Always show all deprecations except legacy ones
This commit is contained in:
Fabien Potencier 2018-02-07 07:12:55 +01:00
commit 101a7953d2
6 changed files with 26 additions and 7 deletions

View File

@ -1,6 +1,12 @@
CHANGELOG
=========
4.1.0
-----
* all deprecations but those from tests marked with `@group legacy` are always
displayed when not in `weak` mode.
4.0.0
-----

View File

@ -110,8 +110,7 @@ class DeprecationErrorHandler
$trace = debug_backtrace(true);
$group = 'other';
$isVendor = false;
$isWeak = DeprecationErrorHandler::MODE_WEAK === $mode || (DeprecationErrorHandler::MODE_WEAK_VENDORS === $mode && $isVendor = $inVendors($file));
$isVendor = DeprecationErrorHandler::MODE_WEAK_VENDORS === $mode && $inVendors($file);
$i = count($trace);
while (1 < $i && (!isset($trace[--$i]['class']) || ('ReflectionMethod' === $trace[$i]['class'] || 0 === strpos($trace[$i]['class'], 'PHPUnit_') || 0 === strpos($trace[$i]['class'], 'PHPUnit\\')))) {
@ -128,7 +127,7 @@ class DeprecationErrorHandler
// \Symfony\Bridge\PhpUnit\Legacy\SymfonyTestsListenerTrait::endTest()
// then we need to use the serialized information to determine
// if the error has been triggered from vendor code.
$isWeak = DeprecationErrorHandler::MODE_WEAK === $mode || (DeprecationErrorHandler::MODE_WEAK_VENDORS === $mode && $isVendor = isset($parsedMsg['triggering_file']) && $inVendors($parsedMsg['triggering_file']));
$isVendor = DeprecationErrorHandler::MODE_WEAK_VENDORS === $mode && isset($parsedMsg['triggering_file']) && $inVendors($parsedMsg['triggering_file']);
} else {
$class = isset($trace[$i]['object']) ? get_class($trace[$i]['object']) : $trace[$i]['class'];
$method = $trace[$i]['function'];
@ -145,7 +144,7 @@ class DeprecationErrorHandler
|| in_array('legacy', $Test::getGroups($class, $method), true)
) {
$group = 'legacy';
} elseif (DeprecationErrorHandler::MODE_WEAK_VENDORS === $mode && $isVendor) {
} elseif ($isVendor) {
$group = 'remaining vendor';
} else {
$group = 'remaining';
@ -165,13 +164,13 @@ class DeprecationErrorHandler
exit(1);
}
if ('legacy' !== $group && !$isWeak) {
if ('legacy' !== $group && DeprecationErrorHandler::MODE_WEAK !== $mode) {
$ref = &$deprecations[$group][$msg]['count'];
++$ref;
$ref = &$deprecations[$group][$msg][$class.'::'.$method];
++$ref;
}
} elseif (!$isWeak) {
} elseif (DeprecationErrorHandler::MODE_WEAK !== $mode) {
$ref = &$deprecations[$group][$msg]['count'];
++$ref;
}

View File

@ -37,4 +37,3 @@ Unsilenced deprecation notices (1)
Legacy deprecation notices (1)
Other deprecation notices (1)

View File

@ -21,3 +21,5 @@ eval("@trigger_error('who knows where I come from?', E_USER_DEPRECATED);")
--EXPECTF--
Other deprecation notices (1)
1x: who knows where I come from?

View File

@ -23,3 +23,5 @@ include 'phar://deprecation.phar/deprecation.php';
--EXPECTF--
Other deprecation notices (1)
1x: I come from… afar! :D

View File

@ -22,8 +22,19 @@ require __DIR__.'/fake_vendor/acme/lib/deprecation_riddled.php';
--EXPECTF--
Unsilenced deprecation notices (2)
1x: unsilenced foo deprecation
1x in FooTestCase::testLegacyFoo
1x: unsilenced bar deprecation
1x in FooTestCase::testNonLegacyBar
Remaining vendor deprecation notices (1)
1x: silenced bar deprecation
1x in FooTestCase::testNonLegacyBar
Legacy deprecation notices (1)
Other deprecation notices (1)
1x: root deprecation