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