From 58cd3ee4bcb8fa29fcc044114167f187e55ffead Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Thu, 10 Dec 2015 09:43:06 +0100 Subject: [PATCH] [PhpUnitBridge] Replace "weak-verbose" by "deprecations upper bound" mode --- .../PhpUnit/DeprecationErrorHandler.php | 20 ++++++++++++++++--- src/Symfony/Bridge/PhpUnit/README.md | 10 +++++----- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php index 485093146dd7..502add2c1c3a 100644 --- a/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php +++ b/src/Symfony/Bridge/PhpUnit/DeprecationErrorHandler.php @@ -19,15 +19,29 @@ class DeprecationErrorHandler { const MODE_WEAK = 'weak'; - const MODE_WEAK_VERBOSE = 'weak-verbose'; private static $isRegistered = false; - public static function register($mode = false) + /** + * Registers and configures the deprecation handler. + * + * The following reporting modes are supported: + * - use "weak" to hide the deprecation report but keep a global count; + * - use "/some-regexp/" to stop the test suite whenever a deprecation + * message matches the given regular expression; + * - use a number to define the upper bound of allowed deprecations, + * making the test suite fail whenever more notices are trigerred. + * + * @param int|string|false $mode The reporting mode. Defaults to not allowing any deprecations. + */ + public static function register($mode = 0) { if (self::$isRegistered) { return; } + if (self::MODE_WEAK !== $mode && (!isset($mode[0]) || '/' !== $mode[0])) { + $mode = preg_match('/^[1-9][0-9]*$/', $mode) ? (int) $mode : 0; + } $deprecations = array( 'unsilencedCount' => 0, 'remainingCount' => 0, @@ -147,7 +161,7 @@ public static function register($mode = false) if (!empty($notices)) { echo "\n"; } - if (DeprecationErrorHandler::MODE_WEAK !== $mode && DeprecationErrorHandler::MODE_WEAK_VERBOSE !== $mode && ($deprecations['unsilenced'] || $deprecations['remaining'] || $deprecations['other'])) { + if (DeprecationErrorHandler::MODE_WEAK !== $mode && $mode < $deprecations['unsilencedCount'] + $deprecations['remainingCount'] + $deprecations['otherCount']) { exit(1); } }); diff --git a/src/Symfony/Bridge/PhpUnit/README.md b/src/Symfony/Bridge/PhpUnit/README.md index ed5eda2ae5fc..ef5f76f1a7f9 100644 --- a/src/Symfony/Bridge/PhpUnit/README.md +++ b/src/Symfony/Bridge/PhpUnit/README.md @@ -12,11 +12,11 @@ It comes with the following features: * display the stack trace of a deprecation on-demand. By default any non-legacy-tagged or any non-@-silenced deprecation notices will -make tests fail. -This can be changed by setting the `SYMFONY_DEPRECATIONS_HELPER` environment -variable to `weak` or `weak-verbose`. This will make the bridge ignore -deprecation notices and is useful to projects that must use deprecated interfaces -for backward compatibility reasons. +make tests fail. This can be changed by setting the `SYMFONY_DEPRECATIONS_HELPER` +environment variable to the maximum number of deprecations that are allowed to be +triggered before making the test suite fail. Alternatively, setting it to `weak` +will make the bridge ignore any deprecation notices and is useful to projects +that must use deprecated interfaces for backward compatibility reasons. A summary of deprecation notices is displayed at the end of the test suite: