Re: [docutils:feature-requests] #81 0.17.1: pytest is failing

Adam Turner <[email protected]>
Newsgroups gmane.text.docutils.devel
Message-ID <LO3P123MB2681AC9CFA72ED7C6BE169A2C2179@LO3P123MB2681.GBRP123.PROD.OUTLOOK.COM>
Dear Günter,

This note contains replies to all the recent emails in the "0.17.1: pytest is failing" thread.

> On 2022-11-10, Adam Turner via Docutils-develop wrote:

>> With [r9237] the test-suite refactoring project is complete -- using 
>> `pytest` and `python -m unittest` now work "out-of-the-box".

-----

> Run all test tests from the ``test`` directory::
>
>     #> cd REPO-ROOT/docutils/test
>
> Now testing with different methods::
>
>     # ./alltests.py
>     [...]
>
> * All tests run.
> * Test reporting (in case of failures) seems OK.
> * Some diffs only show up after adding ``maxDiff = None`` to the test class
>   definition.

Perhaps we should add ``maxDiff = None`` to all test cases.

-----

> ::
>
>     #> pytest-3 --quiet .
>     [...]
>
>
> * Only 369 out of 1739 tests reported by "alltests.py" are reported.
>   Is this different counting or does pytest miss more than half of the tests?

Different counting -- "sub tests" aren't counted individually by default, see ``NumbersTestResult`` in ``alltests.py``.


> * The warnings show up despite explicit silencing in the code.
>   (Except when we explicitely test for them.)
>   It seems `pytest` bypasses this and reports anyway??

``test_settings`` didn't have the warnings silenced in the ``setUp()`` block.

-----

> Next the standard Python way::
>
>     #> python3.9 -m unittest .
>
> :(

``python -m unittest`` has an odd calling convention. Had you typed ``python -m unittest``, it would've succeeded, as it is shorthand for the 'actual' call of ``python -m unittest discover .``. Adding any arguments means the shorthand isn't used, though.

I am unsure if we should declare support for this method of running tests, whilst it works it may constrain us should we choose e.g. to move to ``pytest`` more properly.

-----

> The "nose" test framework fails, too::

``nose`` is unsupported and I don't intend to support it. The maintainers don't recommend using it (https://nose.readthedocs.io/en/latest/#note-to-users)

-----

> Running idividual test files::
> [...]

> Its a "chicken or egg" problem: the only remaining code in ``DocutilsTestSupport.py`` is adding the "docutils root" and the "test root"
> to sys.path. However, it can only be imported if "test" is recognized as package.

Must the executable be ``python`` here? ``pytest .\test_parsers\test_rst\test_definition_lists.py`` works, as ``pytest`` discovers the root directory as the one containing ``setup.cfg`` (or a numer of other sentinel files) and prepends it to ``sys.path``. Similarly, ``pytest test_definition_lists.py`` works within ``test\test_parsers\test_rst``. 

-----

> trying the test suite on an installation without recommonmark, I stumbled about a new problem:
>     
>     Traceback (most recent call last):
>     [...]
>         raise unittest.SkipTest(f'Cannot test "{md_parser}". '
>     unittest.case.SkipTest: Cannot test "recommonmark". Parser not found.
>
> It seems raising SkipTest is only applicable for test run through the unittest framework (where I am not sure all test run).

Ahh, we should use ``unittest.defaultTestLoader.discover`` to load tests, this respects ``SkipTest``.

Thanks,
Adam
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.