Skip to content
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

Plurality matching

Merged
merged 1 commit into from Oct 28, 2019
Merged

Conversation

MarcoGorelli
Copy link
Contributor

@MarcoGorelli MarcoGorelli commented Oct 18, 2019

Fixes #5989 .

I presume this is small enough that I shouldn't add it to the changelog (or myself to the authors), but please do let me know if I should.

@The-Compiler
Copy link
Member

The-Compiler commented Oct 18, 2019

Nice work! IMHO this is big enough for a changelog/author entry! However, the tests are currently failing - it seems like there are other places which you adjusted in the tests (e.g. "1 errors during collection" -> "1 error during collection") but not in the code. Could you take a look at the failing tests?

@MarcoGorelli
Copy link
Contributor Author

MarcoGorelli commented Oct 18, 2019

Thanks! Yes, just working on it, I'll ping you when it's ready.

@@ -1007,6 +1007,14 @@ def _folded_skips(skipped):
return values


def _match_plurality(count, key):
Copy link
Member

@nicoddemus nicoddemus Oct 18, 2019

Choose a reason for hiding this comment

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

I think it makes more sense to always pass the key as singular, and add s as necessary:

def _make_plural(noun, count):
   return noun + "s" if count != 1 else noun

This of course requires a change in the key themselves, but I believe this to be more elegant. What do you think?

Copy link
Contributor Author

@MarcoGorelli MarcoGorelli Oct 18, 2019

Choose a reason for hiding this comment

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

Yes, _make_plural is an easier-to-understand name, thanks. I've kept the guard in though as we wouldn't want to add an 's' to the end of 'skipped', for example.

Copy link
Member

@The-Compiler The-Compiler Oct 18, 2019

Choose a reason for hiding this comment

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

This of course requires a change in the key themselves, but I believe this to be more elegant. What do you think?

How backwards-compatible would that be (warnings -> warning) for e.g. plugins?

Copy link
Member

@nicoddemus nicoddemus Oct 18, 2019

Choose a reason for hiding this comment

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

It might cause minor breakages for plugins testing things with testdir, depending on the test, good point.

To be on the safe side we should target features instead and get this out in 5.3. @MarcoGorelli could you rebase on features and change the target branch of the PR? Thanks!

Copy link
Contributor

@blueyed blueyed Oct 18, 2019

Choose a reason for hiding this comment

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

changed the base branch from master to features

@MarcoGorelli
You also need to rebase it on features then (and force-push).

Copy link
Contributor

@blueyed blueyed Oct 18, 2019

Choose a reason for hiding this comment

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

Do not add a commit that removes the changes (31af969), but rebase it so that only your commit(s) are there.

Copy link
Contributor Author

@MarcoGorelli MarcoGorelli Oct 18, 2019

Choose a reason for hiding this comment

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

Ok, is it right now? (sorry, bit of a git-rebase noob here)

Anyway, thanks to you all for your time! :)

Copy link
Contributor

@blueyed blueyed Oct 18, 2019

Choose a reason for hiding this comment

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

Better.. but the commit message needs adjustments.. ;)

@@ -0,0 +1 @@
Fix plurality mismatch in test summary (e.g. display "2 errors" instead of "2 error").
Copy link
Member

@nicoddemus nicoddemus Oct 18, 2019

Choose a reason for hiding this comment

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

This is actually the other way around:

Fix plurality mismatch in test summary (e.g. display "1 error" instead of "1 errors").

Copy link
Contributor Author

@MarcoGorelli MarcoGorelli Oct 18, 2019

Choose a reason for hiding this comment

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

Good catch, thanks!

@kalekundert
Copy link
Contributor

kalekundert commented Oct 18, 2019

I may be a little late to the game here, but I wanted to share a snippet of code I use to get plurality right in my scripts. I really like how succinct and flexible it is:

class plural:
    """
    The format string has three sections, separated by '/'.  The first section 
    is always printed, the second (optional) section is printed if the number 
    is singular, and the third section is printed if the number is plural.  Any 
    '?' in the format string are replaced with the actual number.

    >>> "I have {:? thing/s}.".format(plural(1))
    I have 1 thing.
    >>> "I have {:? thing/s}.".format(plural(2))
    I have 2 things.

    >>> "I want {:/a cactus/? cacti}.".format(plural(1))
    I want a cactus.
    >>> "I want {:/a cactus/? cacti}.".format(plural(2))
    I want 2 cacti.

    If the provided object supports len() (e.g. lists, dicts, etc.), then that 
    value is automatically used as the number:

    >>> "I have {:? thing/s}.".format(plural([3]))
    I have 1 thing.
    >>> "I have {:? thing/s}.".format(plural([3,4]))
    I have 2 things.

    From Veedrac on Stack Overflow (with some modifications): 
    http://stackoverflow.com/questions/21872366/plural-string-formatting
    """
    def __init__(self, value):
        self.value = value

    def __format__(self, formatter):
        from collections.abc import Sized

        x = self.value
        number = len(x) if isinstance(x, Sized) else self.value
        formatter = formatter.replace("?", str(number))
        always, _, suffixes = formatter.partition("/")
        singular, _, plural = suffixes.rpartition("/")

        return "{}{}".format(always, singular if number == 1 else plural)

I have this snippet on PyPI (nonstdlib.plural), but if you want to use it in pytest, I think it would be better to avoid a dependency for something so trivial.

@MarcoGorelli MarcoGorelli changed the base branch from master to features Oct 18, 2019
def build_summary_stats_line(stats):
known_types = (
"failed passed skipped deselected xfailed xpassed warnings error".split()
"failed passed skipped deselected xfailed xpassed warning error".split()
Copy link
Contributor

@blueyed blueyed Oct 18, 2019

Choose a reason for hiding this comment

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

That's an unnecessary API breakage, isn't it? I.e. plugins might use stats.get("warnings").
I think we should handle/set both then still, but can use "warning" only internally then.

@MarcoGorelli
Copy link
Contributor Author

MarcoGorelli commented Oct 18, 2019

Hi all - just FYI, I'm away until the 26th of October, I'll finish this after that. Thanks for your patience in helping me get it right!

@blueyed blueyed changed the title Plurality matching [WIP] Plurality matching Oct 18, 2019
@MarcoGorelli MarcoGorelli changed the title [WIP] Plurality matching Plurality matching Oct 27, 2019
@MarcoGorelli
Copy link
Contributor Author

MarcoGorelli commented Oct 27, 2019

I've updated the PR so it's a single commit which targets the features branch.

I've kept the API the same (so stats.get('warnings') continues to work), only changing it to warning within the scope of _make_plural.

Copy link
Contributor

@blueyed blueyed left a comment

Thanks!

@blueyed blueyed requested a review from nicoddemus Oct 28, 2019
@blueyed blueyed merged commit cdc53da into pytest-dev:features Oct 28, 2019
5 checks passed
@blueyed
Copy link
Contributor

blueyed commented Oct 28, 2019

Went ahead with merging when noticing the issue with #6094 .. :)
Thanks!

@blueyed blueyed mentioned this pull request Oct 28, 2019
4 tasks
@MarcoGorelli MarcoGorelli deleted the plurality-matching branch Oct 28, 2019
bors bot added a commit to duckinator/bork that referenced this issue Nov 21, 2019
79: Update pytest to 5.3.0 r=duckinator a=pyup-bot


This PR updates [pytest](https://pypi.org/project/pytest) from **5.2.4** to **5.3.0**.



<details>
  <summary>Changelog</summary>
  
  
   ### 5.3.0
   ```
   =========================

Deprecations
------------

- `6179 &lt;https://github.com/pytest-dev/pytest/issues/6179&gt;`_: The default value of ``junit_family`` option will change to ``xunit2`` in pytest 6.0, given
  that this is the version supported by default in modern tools that manipulate this type of file.

  In order to smooth the transition, pytest will issue a warning in case the ``--junitxml`` option
  is given in the command line but ``junit_family`` is not explicitly configured in ``pytest.ini``.

  For more information, `see the docs &lt;https://docs.pytest.org/en/latest/deprecations.htmljunit-family-default-value-change-to-xunit2&gt;`__.



Features
--------

- `4488 &lt;https://github.com/pytest-dev/pytest/issues/4488&gt;`_: The pytest team has created the `pytest-reportlog &lt;https://github.com/pytest-dev/pytest-reportlog&gt;`__
  plugin, which provides a new ``--report-log=FILE`` option that writes *report logs* into a file as the test session executes.

  Each line of the report log contains a self contained JSON object corresponding to a testing event,
  such as a collection or a test result report. The file is guaranteed to be flushed after writing
  each line, so systems can read and process events in real-time.

  The plugin is meant to replace the ``--resultlog`` option, which is deprecated and meant to be removed
  in a future release. If you use ``--resultlog``, please try out ``pytest-reportlog`` and
  provide feedback.


- `4730 &lt;https://github.com/pytest-dev/pytest/issues/4730&gt;`_: When ``sys.pycache_prefix`` (Python 3.8+) is set, it will be used by pytest to cache test files changed by the assertion rewriting mechanism.

  This makes it easier to benefit of cached ``.pyc`` files even on file systems without permissions.


- `5515 &lt;https://github.com/pytest-dev/pytest/issues/5515&gt;`_: Allow selective auto-indentation of multiline log messages.

  Adds command line option ``--log-auto-indent``, config option
  ``log_auto_indent`` and support for per-entry configuration of
  indentation behavior on calls to ``logging.log()``.

  Alters the default for auto-indention from ``on`` to ``off``. This
  restores the older behavior that existed prior to v4.6.0. This
  reversion to earlier behavior was done because it is better to
  activate new features that may lead to broken tests explicitly
  rather than implicitly.


- `5914 &lt;https://github.com/pytest-dev/pytest/issues/5914&gt;`_: ``pytester`` learned two new functions, `no_fnmatch_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_fnmatch_line&gt;`_ and
  `no_re_match_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_re_match_line&gt;`_.

  The functions are used to ensure the captured text *does not* match the given
  pattern.

  The previous idiom was to use ``re.match``:

  .. code-block:: python

      assert re.match(pat, result.stdout.str()) is None

  Or the ``in`` operator:

  .. code-block:: python

      assert text in result.stdout.str()

  But the new functions produce best output on failure.


- `6057 &lt;https://github.com/pytest-dev/pytest/issues/6057&gt;`_: Added tolerances to complex values when printing ``pytest.approx``.

  For example, ``repr(pytest.approx(3+4j))`` returns ``(3+4j) ± 5e-06 ∠ ±180°``. This is polar notation indicating a circle around the expected value, with a radius of 5e-06. For ``approx`` comparisons to return ``True``, the actual value should fall within this circle.


- `6061 &lt;https://github.com/pytest-dev/pytest/issues/6061&gt;`_: Added the pluginmanager as an argument to ``pytest_addoption``
  so that hooks can be invoked when setting up command line options. This is
  useful for having one plugin communicate things to another plugin,
  such as default values or which set of command line options to add.



Improvements
------------

- `5061 &lt;https://github.com/pytest-dev/pytest/issues/5061&gt;`_: Use multiple colors with terminal summary statistics.


- `5630 &lt;https://github.com/pytest-dev/pytest/issues/5630&gt;`_: Quitting from debuggers is now properly handled in ``doctest`` items.


- `5924 &lt;https://github.com/pytest-dev/pytest/issues/5924&gt;`_: Improved verbose diff output with sequences.

  Before:

  .. code-block::

      E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
      E     Right contains 3 more items, first extra item: &#39; &#39;
      E     Full diff:
      E     - [&#39;version&#39;, &#39;version_info&#39;, &#39;sys.version&#39;, &#39;sys.version_info&#39;]
      E     + [&#39;version&#39;,
      E     +  &#39;version_info&#39;,
      E     +  &#39;sys.version&#39;,
      E     +  &#39;sys.version_info&#39;,
      E     +  &#39; &#39;,
      E     +  &#39;sys.version&#39;,
      E     +  &#39;sys.version_info&#39;]

  After:

  .. code-block::

      E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
      E     Right contains 3 more items, first extra item: &#39; &#39;
      E     Full diff:
      E       [
      E        &#39;version&#39;,
      E        &#39;version_info&#39;,
      E        &#39;sys.version&#39;,
      E        &#39;sys.version_info&#39;,
      E     +  &#39; &#39;,
      E     +  &#39;sys.version&#39;,
      E     +  &#39;sys.version_info&#39;,
      E       ]


- `5936 &lt;https://github.com/pytest-dev/pytest/issues/5936&gt;`_: Display untruncated assertion message with ``-vv``.


- `5990 &lt;https://github.com/pytest-dev/pytest/issues/5990&gt;`_: Fixed plurality mismatch in test summary (e.g. display &quot;1 error&quot; instead of &quot;1 errors&quot;).


- `6008 &lt;https://github.com/pytest-dev/pytest/issues/6008&gt;`_: ``Config.InvocationParams.args`` is now always a ``tuple`` to better convey that it should be
  immutable and avoid accidental modifications.


- `6023 &lt;https://github.com/pytest-dev/pytest/issues/6023&gt;`_: ``pytest.main`` now returns a ``pytest.ExitCode`` instance now, except for when custom exit codes are used (where it returns ``int`` then still).


- `6026 &lt;https://github.com/pytest-dev/pytest/issues/6026&gt;`_: Align prefixes in output of pytester&#39;s ``LineMatcher``.


- `6059 &lt;https://github.com/pytest-dev/pytest/issues/6059&gt;`_: Collection errors are reported as errors (and not failures like before) in the terminal&#39;s short test summary.


- `6069 &lt;https://github.com/pytest-dev/pytest/issues/6069&gt;`_: ``pytester.spawn`` does not skip/xfail tests on FreeBSD anymore unconditionally.


- `6097 &lt;https://github.com/pytest-dev/pytest/issues/6097&gt;`_: The &quot;[XXX%]&quot; indicator in the test summary is now colored according to the final (new) multi-colored line&#39;s main color.


- `6116 &lt;https://github.com/pytest-dev/pytest/issues/6116&gt;`_: Added ``--co`` as a synonym to ``--collect-only``.


- `6148 &lt;https://github.com/pytest-dev/pytest/issues/6148&gt;`_: ``atomicwrites`` is now only used on Windows, fixing a performance regression with assertion rewriting on Unix.


- `6152 &lt;https://github.com/pytest-dev/pytest/issues/6152&gt;`_: Now parametrization will use the ``__name__`` attribute of any object for the id, if present. Previously it would only use ``__name__`` for functions and classes.


- `6176 &lt;https://github.com/pytest-dev/pytest/issues/6176&gt;`_: Improved failure reporting with pytester&#39;s ``Hookrecorder.assertoutcome``.


- `6181 &lt;https://github.com/pytest-dev/pytest/issues/6181&gt;`_: The reason for a stopped session, e.g. with ``--maxfail`` / ``-x``, now gets reported in the test summary.


- `6206 &lt;https://github.com/pytest-dev/pytest/issues/6206&gt;`_: Improved ``cache.set`` robustness and performance.



Bug Fixes
---------

- `2049 &lt;https://github.com/pytest-dev/pytest/issues/2049&gt;`_: Fixed ``--setup-plan`` showing inaccurate information about fixture lifetimes.


- `2548 &lt;https://github.com/pytest-dev/pytest/issues/2548&gt;`_: Fixed line offset mismatch of skipped tests in terminal summary.


- `6039 &lt;https://github.com/pytest-dev/pytest/issues/6039&gt;`_: The ``PytestDoctestRunner`` is now properly invalidated when unconfiguring the doctest plugin.

  This is important when used with ``pytester``&#39;s ``runpytest_inprocess``.


- `6047 &lt;https://github.com/pytest-dev/pytest/issues/6047&gt;`_: BaseExceptions are now handled in ``saferepr``, which includes ``pytest.fail.Exception`` etc.


- `6074 &lt;https://github.com/pytest-dev/pytest/issues/6074&gt;`_: pytester: fixed order of arguments in ``rm_rf`` warning when cleaning up temporary directories, and do not emit warnings for errors with ``os.open``.


- `6189 &lt;https://github.com/pytest-dev/pytest/issues/6189&gt;`_: Fixed result of ``getmodpath`` method.



Trivial/Internal Changes
------------------------

- `4901 &lt;https://github.com/pytest-dev/pytest/issues/4901&gt;`_: ``RunResult`` from ``pytester`` now displays the mnemonic of the ``ret`` attribute when it is a
  valid ``pytest.ExitCode`` value.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest
  - Changelog: https://pyup.io/changelogs/pytest/
  - Homepage: https://docs.pytest.org/en/latest/
</details>



Co-authored-by: pyup-bot <github-bot@pyup.io>
bors bot added a commit to rehandalal/therapist that referenced this issue Nov 28, 2019
105: Update pytest to 5.3.1 r=rehandalal a=pyup-bot


This PR updates [pytest](https://pypi.org/project/pytest) from **5.2.4** to **5.3.1**.



<details>
  <summary>Changelog</summary>
  
  
   ### 5.3.1
   ```
   =========================

Improvements
------------

- `6231 &lt;https://github.com/pytest-dev/pytest/issues/6231&gt;`_: Improve check for misspelling of ``pytest.mark.parametrize``.


- `6257 &lt;https://github.com/pytest-dev/pytest/issues/6257&gt;`_: Handle `exit.Exception` raised in `notify_exception` (via `pytest_internalerror`), e.g. when quitting pdb from post mortem.



Bug Fixes
---------

- `5914 &lt;https://github.com/pytest-dev/pytest/issues/5914&gt;`_: pytester: fix ``no_fnmatch_line`` when used after positive matching.


- `6082 &lt;https://github.com/pytest-dev/pytest/issues/6082&gt;`_: Fix line detection for doctest samples inside ``property`` docstrings, as a workaround to `bpo-17446 &lt;https://bugs.python.org/issue17446&gt;`__.


- `6254 &lt;https://github.com/pytest-dev/pytest/issues/6254&gt;`_: Fix compatibility with pytest-parallel (regression in pytest 5.3.0).


- `6255 &lt;https://github.com/pytest-dev/pytest/issues/6255&gt;`_: Clear the ``sys.last_traceback``, ``sys.last_type`` and ``sys.last_value``
  attributes by deleting them instead of setting them to ``None``. This better
  matches the behaviour of the Python standard library.
   ```
   
  
  
   ### 5.3.0
   ```
   =========================

Deprecations
------------

- `6179 &lt;https://github.com/pytest-dev/pytest/issues/6179&gt;`_: The default value of ``junit_family`` option will change to ``xunit2`` in pytest 6.0, given
  that this is the version supported by default in modern tools that manipulate this type of file.

  In order to smooth the transition, pytest will issue a warning in case the ``--junitxml`` option
  is given in the command line but ``junit_family`` is not explicitly configured in ``pytest.ini``.

  For more information, `see the docs &lt;https://docs.pytest.org/en/latest/deprecations.htmljunit-family-default-value-change-to-xunit2&gt;`__.



Features
--------

- `4488 &lt;https://github.com/pytest-dev/pytest/issues/4488&gt;`_: The pytest team has created the `pytest-reportlog &lt;https://github.com/pytest-dev/pytest-reportlog&gt;`__
  plugin, which provides a new ``--report-log=FILE`` option that writes *report logs* into a file as the test session executes.

  Each line of the report log contains a self contained JSON object corresponding to a testing event,
  such as a collection or a test result report. The file is guaranteed to be flushed after writing
  each line, so systems can read and process events in real-time.

  The plugin is meant to replace the ``--resultlog`` option, which is deprecated and meant to be removed
  in a future release. If you use ``--resultlog``, please try out ``pytest-reportlog`` and
  provide feedback.


- `4730 &lt;https://github.com/pytest-dev/pytest/issues/4730&gt;`_: When ``sys.pycache_prefix`` (Python 3.8+) is set, it will be used by pytest to cache test files changed by the assertion rewriting mechanism.

  This makes it easier to benefit of cached ``.pyc`` files even on file systems without permissions.


- `5515 &lt;https://github.com/pytest-dev/pytest/issues/5515&gt;`_: Allow selective auto-indentation of multiline log messages.

  Adds command line option ``--log-auto-indent``, config option
  ``log_auto_indent`` and support for per-entry configuration of
  indentation behavior on calls to ``logging.log()``.

  Alters the default for auto-indention from ``on`` to ``off``. This
  restores the older behavior that existed prior to v4.6.0. This
  reversion to earlier behavior was done because it is better to
  activate new features that may lead to broken tests explicitly
  rather than implicitly.


- `5914 &lt;https://github.com/pytest-dev/pytest/issues/5914&gt;`_: `testdir &lt;https://docs.pytest.org/en/latest/reference.htmltestdir&gt;`__ learned two new functions, `no_fnmatch_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_fnmatch_line&gt;`_ and
  `no_re_match_line &lt;https://docs.pytest.org/en/latest/reference.html_pytest.pytester.LineMatcher.no_re_match_line&gt;`_.

  The functions are used to ensure the captured text *does not* match the given
  pattern.

  The previous idiom was to use ``re.match``:

  .. code-block:: python

      result = testdir.runpytest()
      assert re.match(pat, result.stdout.str()) is None

  Or the ``in`` operator:

  .. code-block:: python

      result = testdir.runpytest()
      assert text in result.stdout.str()

  But the new functions produce best output on failure.


- `6057 &lt;https://github.com/pytest-dev/pytest/issues/6057&gt;`_: Added tolerances to complex values when printing ``pytest.approx``.

  For example, ``repr(pytest.approx(3+4j))`` returns ``(3+4j) ± 5e-06 ∠ ±180°``. This is polar notation indicating a circle around the expected value, with a radius of 5e-06. For ``approx`` comparisons to return ``True``, the actual value should fall within this circle.


- `6061 &lt;https://github.com/pytest-dev/pytest/issues/6061&gt;`_: Added the pluginmanager as an argument to ``pytest_addoption``
  so that hooks can be invoked when setting up command line options. This is
  useful for having one plugin communicate things to another plugin,
  such as default values or which set of command line options to add.



Improvements
------------

- `5061 &lt;https://github.com/pytest-dev/pytest/issues/5061&gt;`_: Use multiple colors with terminal summary statistics.


- `5630 &lt;https://github.com/pytest-dev/pytest/issues/5630&gt;`_: Quitting from debuggers is now properly handled in ``doctest`` items.


- `5924 &lt;https://github.com/pytest-dev/pytest/issues/5924&gt;`_: Improved verbose diff output with sequences.

  Before:

  ::

      E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
      E     Right contains 3 more items, first extra item: &#39; &#39;
      E     Full diff:
      E     - [&#39;version&#39;, &#39;version_info&#39;, &#39;sys.version&#39;, &#39;sys.version_info&#39;]
      E     + [&#39;version&#39;,
      E     +  &#39;version_info&#39;,
      E     +  &#39;sys.version&#39;,
      E     +  &#39;sys.version_info&#39;,
      E     +  &#39; &#39;,
      E     +  &#39;sys.version&#39;,
      E     +  &#39;sys.version_info&#39;]

  After:

  ::

      E   AssertionError: assert [&#39;version&#39;, &#39;...version_info&#39;] == [&#39;version&#39;, &#39;...version&#39;, ...]
      E     Right contains 3 more items, first extra item: &#39; &#39;
      E     Full diff:
      E       [
      E        &#39;version&#39;,
      E        &#39;version_info&#39;,
      E        &#39;sys.version&#39;,
      E        &#39;sys.version_info&#39;,
      E     +  &#39; &#39;,
      E     +  &#39;sys.version&#39;,
      E     +  &#39;sys.version_info&#39;,
      E       ]


- `5934 &lt;https://github.com/pytest-dev/pytest/issues/5934&gt;`_: ``repr`` of ``ExceptionInfo`` objects has been improved to honor the ``__repr__`` method of the underlying exception.

- `5936 &lt;https://github.com/pytest-dev/pytest/issues/5936&gt;`_: Display untruncated assertion message with ``-vv``.


- `5990 &lt;https://github.com/pytest-dev/pytest/issues/5990&gt;`_: Fixed plurality mismatch in test summary (e.g. display &quot;1 error&quot; instead of &quot;1 errors&quot;).


- `6008 &lt;https://github.com/pytest-dev/pytest/issues/6008&gt;`_: ``Config.InvocationParams.args`` is now always a ``tuple`` to better convey that it should be
  immutable and avoid accidental modifications.


- `6023 &lt;https://github.com/pytest-dev/pytest/issues/6023&gt;`_: ``pytest.main`` returns a ``pytest.ExitCode`` instance now, except for when custom exit codes are used (where it returns ``int`` then still).


- `6026 &lt;https://github.com/pytest-dev/pytest/issues/6026&gt;`_: Align prefixes in output of pytester&#39;s ``LineMatcher``.


- `6059 &lt;https://github.com/pytest-dev/pytest/issues/6059&gt;`_: Collection errors are reported as errors (and not failures like before) in the terminal&#39;s short test summary.


- `6069 &lt;https://github.com/pytest-dev/pytest/issues/6069&gt;`_: ``pytester.spawn`` does not skip/xfail tests on FreeBSD anymore unconditionally.


- `6097 &lt;https://github.com/pytest-dev/pytest/issues/6097&gt;`_: The &quot;[...%]&quot; indicator in the test summary is now colored according to the final (new) multi-colored line&#39;s main color.


- `6116 &lt;https://github.com/pytest-dev/pytest/issues/6116&gt;`_: Added ``--co`` as a synonym to ``--collect-only``.


- `6148 &lt;https://github.com/pytest-dev/pytest/issues/6148&gt;`_: ``atomicwrites`` is now only used on Windows, fixing a performance regression with assertion rewriting on Unix.


- `6152 &lt;https://github.com/pytest-dev/pytest/issues/6152&gt;`_: Now parametrization will use the ``__name__`` attribute of any object for the id, if present. Previously it would only use ``__name__`` for functions and classes.


- `6176 &lt;https://github.com/pytest-dev/pytest/issues/6176&gt;`_: Improved failure reporting with pytester&#39;s ``Hookrecorder.assertoutcome``.


- `6181 &lt;https://github.com/pytest-dev/pytest/issues/6181&gt;`_: The reason for a stopped session, e.g. with ``--maxfail`` / ``-x``, now gets reported in the test summary.


- `6206 &lt;https://github.com/pytest-dev/pytest/issues/6206&gt;`_: Improved ``cache.set`` robustness and performance.



Bug Fixes
---------

- `2049 &lt;https://github.com/pytest-dev/pytest/issues/2049&gt;`_: Fixed ``--setup-plan`` showing inaccurate information about fixture lifetimes.


- `2548 &lt;https://github.com/pytest-dev/pytest/issues/2548&gt;`_: Fixed line offset mismatch of skipped tests in terminal summary.


- `6039 &lt;https://github.com/pytest-dev/pytest/issues/6039&gt;`_: The ``PytestDoctestRunner`` is now properly invalidated when unconfiguring the doctest plugin.

  This is important when used with ``pytester``&#39;s ``runpytest_inprocess``.


- `6047 &lt;https://github.com/pytest-dev/pytest/issues/6047&gt;`_: BaseExceptions are now handled in ``saferepr``, which includes ``pytest.fail.Exception`` etc.


- `6074 &lt;https://github.com/pytest-dev/pytest/issues/6074&gt;`_: pytester: fixed order of arguments in ``rm_rf`` warning when cleaning up temporary directories, and do not emit warnings for errors with ``os.open``.


- `6189 &lt;https://github.com/pytest-dev/pytest/issues/6189&gt;`_: Fixed result of ``getmodpath`` method.



Trivial/Internal Changes
------------------------

- `4901 &lt;https://github.com/pytest-dev/pytest/issues/4901&gt;`_: ``RunResult`` from ``pytester`` now displays the mnemonic of the ``ret`` attribute when it is a
  valid ``pytest.ExitCode`` value.
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest
  - Changelog: https://pyup.io/changelogs/pytest/
  - Homepage: https://docs.pytest.org/en/latest/
</details>



Co-authored-by: pyup-bot <github-bot@pyup.io>
@aragilar
Copy link

aragilar commented Dec 18, 2019

This appears to break the testdir fixture, as the fixture assumes that the outcomes will be one of (with no variations) passed, skipped, failed, error, xpassed or xfailed. Can we revert this, as the errors I'm getting are really unhelpful, and make this a pain to debug?

mulatinho added a commit to mulatinho/pytest that referenced this issue Dec 18, 2019
Signed-off-by: Alexandre Mulatinho <alex@mulatinho.net>
mulatinho added a commit to mulatinho/pytest that referenced this issue Dec 18, 2019
- added a test to check this condition

Signed-off-by: Alexandre Mulatinho <alex@mulatinho.net>
nicoddemus added a commit that referenced this issue Dec 27, 2019
pytester: quick fix error introduced in #5990
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

6 participants