@@ -29,7 +29,7 @@ Installation
29
29
30
30
.. code-block :: terminal
31
31
32
- $ composer require --dev " symfony/phpunit-bridge:*"
32
+ $ composer require --dev symfony/phpunit-bridge
33
33
34
34
.. include :: /components/require_autoload.rst.inc
35
35
@@ -179,7 +179,7 @@ message, enclosed with ``/``. For example, with:
179
179
180
180
<php >
181
181
<server name =" KERNEL_CLASS" value =" App\Kernel" />
182
- <env name =" SYMFONY_DEPRECATIONS_HELPER" value =" /foobar/" />
182
+ <env name =" SYMFONY_DEPRECATIONS_HELPER" value =" regex= /foobar/" />
183
183
</php >
184
184
</phpunit >
185
185
@@ -189,39 +189,90 @@ message contains the ``"foobar"`` string.
189
189
Making Tests Fail
190
190
~~~~~~~~~~~~~~~~~
191
191
192
- By default, any non-legacy-tagged or any non-`@-silenced `_ deprecation notices
193
- will make tests fail. Alternatively, setting ``SYMFONY_DEPRECATIONS_HELPER `` to
194
- an arbitrary value (ex: ``320 ``) will make the tests fails only if a higher
195
- number of deprecation notices is reached (``0 `` is the default value). You can
196
- also set the value ``"weak" `` which will make the bridge ignore any deprecation
197
- notices. This is useful to projects that must use deprecated interfaces for
198
- backward compatibility reasons.
199
-
200
- When you maintain a library, having the test suite fail as soon as a dependency
201
- introduces a new deprecation is not desirable, because it shifts the burden of
202
- fixing that deprecation to any contributor that happens to submit a pull
203
- request shortly after a new vendor release is made with that deprecation. To
204
- mitigate this, you can either use tighter requirements, in the hope that
205
- dependencies will not introduce deprecations in a patch version, or even commit
206
- the Composer lock file, which would create another class of issues. Libraries
207
- will often use ``SYMFONY_DEPRECATIONS_HELPER=weak `` because of this. This has
208
- the drawback of allowing contributions that introduce deprecations but:
192
+ By default, any non-legacy-tagged or any non-`@-silenced `_ deprecation
193
+ notices will make tests fail. Alternatively, you can configure an
194
+ arbitrary threshold by setting ``SYMFONY_DEPRECATIONS_HELPER `` to
195
+ ``max[total]=320 `` for instance. It will make the tests fails only if a
196
+ higher number of deprecation notices is reached (``0 `` is the default
197
+ value).
198
+
199
+ You can have even finer-grained control by using other keys of the ``max ``
200
+ array, which are ``self ``, ``direct ``, and ``indirect ``. The
201
+ ``SYMFONY_DEPRECATIONS_HELPER `` environment variable accept a
202
+ url-encoded string, meaning you can combine thresholds and any other
203
+ configuration setting, like this:
204
+ ``SYMFONY_DEPRECATIONS_HELPER=max[total]=42&max[self]=0&verbose=0 ``
205
+
206
+ Internal deprecations
207
+ .....................
208
+
209
+ When you maintain a library, having the test suite fail as soon as a
210
+ dependency introduces a new deprecation is not desirable, because it
211
+ shifts the burden of fixing that deprecation to any contributor that
212
+ happens to submit a pull request shortly after a new vendor release is
213
+ made with that deprecation. To mitigate this, you can either use tighter
214
+ requirements, in the hope that dependencies will not introduce
215
+ deprecations in a patch version, or even commit the ``composer.lock `` file,
216
+ which would create another class of issues. Libraries will often use
217
+ ``SYMFONY_DEPRECATIONS_HELPER=max[total]=999999 `` because of this. This
218
+ has the drawback of allowing contributions that introduce deprecations
219
+ but:
209
220
210
221
* forget to fix the deprecated calls if there are any;
211
222
* forget to mark appropriate tests with the ``@group legacy `` annotations.
212
223
213
- By using the ``"weak_vendors" `` value, deprecations that are triggered outside
214
- the ``vendors `` directory will make the test suite fail, while deprecations
215
- triggered from a library inside it will not, giving you the best of both
216
- worlds.
224
+ By using ``SYMFONY_DEPRECATIONS_HELPER=max[self]=0 ``,
225
+ deprecations that are triggered outside the ``vendors `` directory will
226
+ be accounted for seperately, while deprecations triggered from a library
227
+ inside it will not (unless you reach 999999 of these), giving you
228
+ the best of both worlds.
229
+
230
+ Direct and Indirect Deprecations
231
+ ................................
232
+
233
+ When working on a project, you might be more interested in
234
+ ``max[direct] ``. Let's say you want to fix deprecations as soon as
235
+ they appear. A problem many people experience is that some dependencies
236
+ they have tend to lag behind their own dependencies, meaning they do not
237
+ fix deprecations as soon as possible, which means you should create a pull
238
+ request on the outdated vendor, and ignore these deprecations until your
239
+ pull request is merged. This key allows you to put a threshold on direct
240
+ deprecations only,allowing you to notice when *your code * is using
241
+ deprecated APIs, and to keep up with the changes. You can of course
242
+ still use ``max[indirect] `` if you want to keep indirect deprecations
243
+ under a given threshold.
244
+
245
+ Here is a summary that should help you pick the right configuration:
246
+
247
+ +------------------------+-----------------------------------------------------+
248
+ | Value | Recommended situation |
249
+ +========================+=====================================================+
250
+ | max[total]=0 | Recommended for actively maintained projects |
251
+ | | with robust/no dependencies |
252
+ +------------------------+-----------------------------------------------------+
253
+ | max[direct]=0 | Recommended for projects with dependencies |
254
+ | | that fail to keep up with new deprecations. |
255
+ +------------------------+-----------------------------------------------------+
256
+ | max[self]=0 | Recommended for libraries that use |
257
+ | | the deprecation system themselves and |
258
+ | | cannot afford to use one of the modes above. |
259
+ +------------------------+-----------------------------------------------------+
260
+
261
+ Disabling the Verbose Output
262
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
263
+
264
+ By default, the bridge will display a detailed output with the number of
265
+ deprecations and where they arise. If this is too much for you, you can
266
+ use ``SYMFONY_DEPRECATIONS_HELPER=verbose=0 `` to turn the verbose output
267
+ off.
217
268
218
269
Disabling the Deprecation Helper
219
270
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
220
271
221
- Set the ``SYMFONY_DEPRECATIONS_HELPER `` environment variable to `` disabled `` to
222
- completely disable the deprecation helper. This is useful to make use of the
223
- rest of features provided by this component without getting errors or messages
224
- related to deprecations.
272
+ Set the ``SYMFONY_DEPRECATIONS_HELPER `` environment variable to
273
+ `` disabled=1 `` to completely disable the deprecation helper. This is
274
+ useful to make use of the rest of features provided by this component
275
+ without getting errors or messages related to deprecations.
225
276
226
277
.. _write-assertions-about-deprecations :
227
278
@@ -247,6 +298,10 @@ class autoloading time. This can be disabled with the ``debug-class-loader`` opt
247
298
</listener >
248
299
</listeners >
249
300
301
+ .. versionadded :: 4.2
302
+
303
+ The ``DebugClassLoader `` integration was introduced in Symfony 4.2.
304
+
250
305
Write Assertions about Deprecations
251
306
-----------------------------------
252
307
@@ -287,7 +342,7 @@ Running the following command will display the full stack trace:
287
342
288
343
.. code-block :: terminal
289
344
290
- $ SYMFONY_DEPRECATIONS_HELPER='/Doctrine\\Common\\ClassLoader is deprecated\./' ./vendor/bin/simple-phpunit
345
+ $ SYMFONY_DEPRECATIONS_HELPER='regex= /Doctrine\\Common\\ClassLoader is deprecated\./' ./vendor/bin/simple-phpunit
291
346
292
347
Time-sensitive Tests
293
348
--------------------
0 commit comments