Skip to content

[PHPUnit bridge] Add documentation for the component #6273

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 15 commits into from
1 change: 1 addition & 0 deletions components/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ The Components
http_kernel/index
intl
options_resolver
phpunit_bridge
process
property_access/index
routing/index
Expand Down
6 changes: 5 additions & 1 deletion components/map.rst.inc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
* :doc:`/components/using_components`

* :doc:`/components/browser_kit/index`

* :doc:`/components/browser_kit/introduction`

* :doc:`/components/class_loader/index`
Expand Down Expand Up @@ -100,6 +100,10 @@

* :doc:`/components/options_resolver`

* **PHPUnitBridge**

* :doc:`/components/phpunit_bridge`

* **Process**

* :doc:`/components/process`
Expand Down
114 changes: 114 additions & 0 deletions components/phpunit_bridge.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
.. index::
single: PHPUnitBridge
single: Components; PHPUnitBridge

The PHPUnit Bridge Component
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would omit the component part here and below.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You seem to have forgotten to change this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ha right, although maybe it would be better to keep it to me more consistent:

  • The DomCrawler Component
  • The EventDispatcher Component
  • The Filesystem Component
  • ...

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, this is a bridge and not a component. But we don't have a bridges section on the docs though, so the components section is the best place to put it now.

=============================

The PHPUnit Bridge component provides utilities to report legacy tests and
usage of deprecated code.

It comes with the following features:

* Forces the application to use the default language locale for output (set the
locale to ``C``)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What about changing this to: "Forces the tests to use a consistent locale (C)"

* Auto-register ``class_exists`` to load Doctrine annotations (when used)
* It displays the whole list of deprecated features used in the application
* Display the stack trace of a deprecation on-demand.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Displays


Installation
------------

You can install the component in 2 different ways:

* :doc:`Install it via Composer </components/using_components>`
(``symfony/phpunit-bridge`` on `Packagist`_); as a dev dependency
* Use the official Git repository (https://github.com/symfony/phpunit-bridge)

.. include:: /components/require_autoload.rst.inc

Usage
-----

Once the component installed, it automatically registers a
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's simplify this:

Once the component installed, it automatically registers a
`PHPUnit event listener`_. This listener simply registers a `PHP error handler`_
called `DeprecationErrorHandler`. 

by this:

Once the component installed, it automatically registers a
`PHPUnit event listener`_ which in turn registers a `PHP error handler`_
called `DeprecationErrorHandler`. 

`PHPUnit event listener`_ which in turn registers a `PHP error handler`_
called ``DeprecationErrorHandler``. After running your PHPUnit tests again, you
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can remove "again" here

will get a report similar to this one:

.. image:: /images/components/phpunit_bridge/report.png

The summary includes:

* **Unsilenced** reports deprecation notices that were triggered without the
recommended @-silencing operator
* **Legacy** deprecation notices denote tests that explicitly test some legacy
features
* **Remaining/Other** deprecation notices are all other (non-legacy) notices,
grouped by message, test class and method
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's make this a definition list:

**Unsilenced**
    Reports deprecation notices that were triggered without
    the recommended ``@``-silencing operator.
**Legacy**
    Shows the number of deprecation notices triggered in
    legacy tests.
**Remaining/Other**
    Lists all deprecation notices, grouped by message, test
    class and method.


Trigger deprecation notices
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Trigger Deprecation Notices

---------------------------

Deprecation notices can be triggered by using::

@trigger_error('Your deprecation message', E_USER_DEPRECATED);

Without the @-silencing operator, users would need to opt-out from deprecation
notices. Silencing by default swaps this behavior and allows users to opt-in
when they are ready to cope with them (by adding a custom error handler like the
one provided by this bridge). When not silenced, deprecation notices will appear
in the **Unsilenced** section of the deprecation report.

Mark tests as legacy
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mark Tests as Legacy

--------------------

There are four ways to mark a test as legacy:

* Make its class start with the ``Legacy`` prefix
* Make its method start with ``testLegacy``
* Make its data provider start with ``provideLegacy`` or ``getLegacy``
* Add the ``@group legacy`` annotation to its class or method
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is the most recommended way, let's put it as the first item (and maybe add (**recommended**))


Configuration
-------------

In case you need to inspect the stack trace of a particular deprecation
triggered by your unit tests, you can set the ``SYMFONY_DEPRECATIONS_HELPER``
`environment variable`_ to a regular expression that matches this deprecation's
message, encapsed between ``/``. For example, with:
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[...] enclosed with / [...]


.. configuration-block::
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

YOu can remove this directive (it's only used when showing multiple formats of the same config, but PHPunit only supports XML)


.. code-block:: xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- http://phpunit.de/manual/4.1/en/appendixes.configuration.html -->
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be the very first line in the code block

<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.1/phpunit.xsd"
backupGlobals="false"
colors="true"
bootstrap="app/autoload.php"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these attributes can also be removed

>
<!-- ... -->

<php>
<server name="KERNEL_DIR" value="app/" />
<env name="SYMFONY_DEPRECATIONS_HELPER" value="/foobar/" />
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's only show the PHP tag + env tag. There is no need to show the complete file

</php>
</phpunit>

PHPUnit_ will stop your test suite once a deprecation notice is triggered whose
message contains the ``"foobar"`` string.

By default, any non-legacy-tagged or any non-@-silenced deprecation notices will
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's put this in a seperate (sub-)section. Making tests pass with deprecation notices is a very common question, so I want the answer to be easily findable on google.

make tests fail. Alternatively, setting ``SYMFONY_DEPRECATIONS_HELPER`` to the
value ``"weak"`` will make the bridge ignore any deprecation notices. This is
useful to projects that must use deprecated interfaces for backward compatibility
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

deprecated interfaces -> deprecated features

reasons.

.. _PHPUnit: https://phpunit.de
.. _`PHPUnit event listener`: https://phpunit.de/manual/current/en/extending-phpunit.html#extending-phpunit.PHPUnit_Framework_TestListener
.. _`PHP error handler`: http://php.net/manual/en/book.errorfunc.php
.. _`environment variable`: https://phpunit.de/manual/current/en/appendixes.configuration.html#appendixes.configuration.php-ini-constants-variables
.. _Packagist: https://packagist.org/packages/symfony/phpunit-bridge
Binary file added images/components/phpunit_bridge/report.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.