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

TestAssertionRewrite test failures on 3.7.0b5 #3530

Closed
hroncok opened this issue Jun 4, 2018 · 6 comments
Closed

TestAssertionRewrite test failures on 3.7.0b5 #3530

hroncok opened this issue Jun 4, 2018 · 6 comments
Labels
type: bug problem that needs to be addressed

Comments

@hroncok
Copy link
Member

hroncok commented Jun 4, 2018

Running on Fedora 28.

$ tox -e py37 -- testing/test_assertrewrite.py

The tests pass with 3.7.0b4, bt two of them fail with 3.7.0b5:

============================= test session starts ==============================
platform linux -- Python 3.7.0b5, pytest-3.6.1.dev44+gd609b635, py-1.5.3, pluggy-0.6.0
rootdir: /home/churchyard/Dokumenty/pytest, inifile: tox.ini
plugins: hypothesis-3.57.0
collected 57 items                                                             

testing/test_assertrewrite.py FF.....................................s.. [ 73%]
ssss...........                                                          [100%]

=================================== FAILURES ===================================
_______________ TestAssertionRewrite.test_place_initial_imports ________________

self = <test_assertrewrite.TestAssertionRewrite object at 0x7fd164296a58>

    def test_place_initial_imports(self):
        s = """'Doc string'\nother = stuff"""
        m = rewrite(s)
        # Module docstrings in 3.7 are part of Module node, it's not in the body
        # so we remove it so the following body items have the same indexes on
        # all Python versions
        if sys.version_info < (3, 7):
            assert isinstance(m.body[0], ast.Expr)
            assert isinstance(m.body[0].value, ast.Str)
            del m.body[0]
        for imp in m.body[0:2]:
>           assert isinstance(imp, ast.Import)
E           AssertionError: assert False
E            +  where False = isinstance(<_ast.Expr object at 0x7fd16422ee48>, <class '_ast.Import'>)
E            +    where <class '_ast.Import'> = ast.Import

testing/test_assertrewrite.py:81: AssertionError
____________________ TestAssertionRewrite.test_dont_rewrite ____________________

self = <test_assertrewrite.TestAssertionRewrite object at 0x7fd1642cdbe0>

    def test_dont_rewrite(self):
        s = """'PYTEST_DONT_REWRITE'\nassert 14"""
        m = rewrite(s)
        if sys.version_info < (3, 7):
            assert len(m.body) == 2
            assert isinstance(m.body[0], ast.Expr)
            assert isinstance(m.body[0].value, ast.Str)
            del m.body[0]
        else:
>           assert len(m.body) == 1
E           assert 2 == 1
E            +  where 2 = len([<_ast.Expr object at 0x7fd164274710>, <_ast.Assert object at 0x7fd16428cba8>])
E            +    where [<_ast.Expr object at 0x7fd164274710>, <_ast.Assert object at 0x7fd16428cba8>] = <_ast.Module object at 0x7fd164274898>.body

testing/test_assertrewrite.py:133: AssertionError
=========================== short test summary info ============================
FAIL testing/test_assertrewrite.py::TestAssertionRewrite::()::test_place_initial_imports
FAIL testing/test_assertrewrite.py::TestAssertionRewrite::()::test_dont_rewrite
SKIP [1] testing/test_assertrewrite.py:845: python 2 only
SKIP [1] testing/test_assertrewrite.py:895: condition: sys.version_info[0] >= 3
SKIP [1] testing/test_assertrewrite.py:904: condition: sys.version_info[0] >= 3
SKIP [1] testing/test_assertrewrite.py:915: condition: sys.version_info[0] >= 3
SKIP [1] testing/test_assertrewrite.py:926: condition: sys.version_info[0] >= 3
================ 2 failed, 50 passed, 5 skipped in 6.19 seconds ================

Happens on both 3.6.0 and master.

The docstring chanages in AST change form 3.7 got reverted. This might be relevant.

See also PyCQA/mccabe#61 (comment)

@pytestbot pytestbot added the type: infrastructure improvement to development/releases/CI structure label Jun 4, 2018
@hroncok
Copy link
Member Author

hroncok commented Jun 4, 2018

Blame gives a merge commit f3a119c

I think that if I just change the version in there to 3.8, it'll do.

@pytestbot
Copy link
Contributor

GitMate.io thinks possibly related issues are #386 (tests fail with pexpect-3.0), #2975 (Pytest 3.3: tests being skipped without failing), #3011 (Python 3.7 Nightly failures due to Python bug or travis), #1083 (Regression with parallel tests on 2.7.3 and 2.8), and #206 (Test failure with disabled byte-compilation).

@pytestbot pytestbot added the type: bug problem that needs to be addressed label Jun 4, 2018
hroncok added a commit to hroncok/pytest that referenced this issue Jun 4, 2018
hroncok added a commit to hroncok/pytest that referenced this issue Jun 4, 2018
@hroncok hroncok removed the type: infrastructure improvement to development/releases/CI structure label Jun 4, 2018
@RonnyPfannschmidt
Copy link
Member

@hroncok this relates cpython undoing the change to ast, changing it to 3.8 would be absolute horror

@hroncok
Copy link
Member Author

hroncok commented Jun 4, 2018

@RonnyPfannschmidt I'm afraid I don't understand why?

See #3531

hroncok added a commit to hroncok/pytest that referenced this issue Jun 4, 2018
hroncok added a commit to hroncok/pytest that referenced this issue Jun 4, 2018
hroncok added a commit to hroncok/pytest that referenced this issue Jun 4, 2018
@hroncok
Copy link
Member Author

hroncok commented Jun 4, 2018

Any plans for a release in couple of days, or should I backport the fix as a patch (in Fedora)?

@nicoddemus
Copy link
Member

Was planning on making a release this week, might as well prepare one right away: #3534.

guykisel referenced this issue in guykisel/inline-plz Jul 6, 2018
This PR updates [pytest](https://pypi.org/project/pytest) from **3.5.1** to **3.6.3**.



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

Bug Fixes
---------

- Fix regression in ``Node.add_marker`` by extracting the mark object of a
  ``MarkDecorator``. (`3555
  &lt;https://github.com/pytest-dev/pytest/issues/3555&gt;`_)

- Warnings without ``location`` were reported as ``None``. This is corrected to
  now report ``&lt;undetermined location&gt;``. (`3563
  &lt;https://github.com/pytest-dev/pytest/issues/3563&gt;`_)

- Continue to call finalizers in the stack when a finalizer in a former scope
  raises an exception. (`3569
  &lt;https://github.com/pytest-dev/pytest/issues/3569&gt;`_)

- Fix encoding error with `print` statements in doctests (`3583
  &lt;https://github.com/pytest-dev/pytest/issues/3583&gt;`_)


Improved Documentation
----------------------

- Add documentation for the ``--strict`` flag. (`3549
  &lt;https://github.com/pytest-dev/pytest/issues/3549&gt;`_)


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

- Update old quotation style to parens in fixture.rst documentation. (`3525
  &lt;https://github.com/pytest-dev/pytest/issues/3525&gt;`_)

- Improve display of hint about ``--fulltrace`` with ``KeyboardInterrupt``.
  (`3545 &lt;https://github.com/pytest-dev/pytest/issues/3545&gt;`_)

- pytest&#39;s testsuite is no longer runnable through ``python setup.py test`` --
  instead invoke ``pytest`` or ``tox`` directly. (`3552
  &lt;https://github.com/pytest-dev/pytest/issues/3552&gt;`_)

- Fix typo in documentation (`3567
  &lt;https://github.com/pytest-dev/pytest/issues/3567&gt;`_)
   ```
   
  
  
   ### 3.6.1
   ```
   =========================

Bug Fixes
---------

- Fixed a bug where stdout and stderr were logged twice by junitxml when a test
  was marked xfail. (`3491
  &lt;https://github.com/pytest-dev/pytest/issues/3491&gt;`_)

- Fix ``usefixtures`` mark applyed to unittest tests by correctly instantiating
  ``FixtureInfo``. (`3498
  &lt;https://github.com/pytest-dev/pytest/issues/3498&gt;`_)

- Fix assertion rewriter compatibility with libraries that monkey patch
  ``file`` objects. (`3503
  &lt;https://github.com/pytest-dev/pytest/issues/3503&gt;`_)


Improved Documentation
----------------------

- Added a section on how to use fixtures as factories to the fixture
  documentation. (`3461 &lt;https://github.com/pytest-dev/pytest/issues/3461&gt;`_)


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

- Enable caching for pip/pre-commit in order to reduce build time on
  travis/appveyor. (`3502
  &lt;https://github.com/pytest-dev/pytest/issues/3502&gt;`_)

- Switch pytest to the src/ layout as we already suggested it for good practice
  - now we implement it as well. (`3513
  &lt;https://github.com/pytest-dev/pytest/issues/3513&gt;`_)

- Fix if in tests to support 3.7.0b5, where a docstring handling in AST got
  reverted. (`3530 &lt;https://github.com/pytest-dev/pytest/issues/3530&gt;`_)

- Remove some python2.5 compatibility code. (`3529
  &lt;https://github.com/pytest-dev/pytest/issues/3529&gt;`_)
   ```
   
  
  
   ### 3.6.0
   ```
   =========================

Features
--------

- Revamp the internals of the ``pytest.mark`` implementation with correct per
  node handling which fixes a number of long standing bugs caused by the old
  design. This introduces new ``Node.iter_markers(name)`` and
  ``Node.get_closest_mark(name)`` APIs. Users are **strongly encouraged** to
  read the `reasons for the revamp in the docs
  &lt;https://docs.pytest.org/en/latest/mark.htmlmarker-revamp-and-iteration&gt;`_,
  or jump over to details about `updating existing code to use the new APIs
  &lt;https://docs.pytest.org/en/latest/mark.htmlupdating-code&gt;`_. (`3317
  &lt;https://github.com/pytest-dev/pytest/issues/3317&gt;`_)

- Now when ``pytest.fixture`` is applied more than once to the same function a
  ``ValueError`` is raised. This buggy behavior would cause surprising problems
  and if was working for a test suite it was mostly by accident. (`2334
  &lt;https://github.com/pytest-dev/pytest/issues/2334&gt;`_)

- Support for Python 3.7&#39;s builtin ``breakpoint()`` method, see `Using the
  builtin breakpoint function
  &lt;https://docs.pytest.org/en/latest/usage.htmlbreakpoint-builtin&gt;`_ for
  details. (`3180 &lt;https://github.com/pytest-dev/pytest/issues/3180&gt;`_)

- ``monkeypatch`` now supports a ``context()`` function which acts as a context
  manager which undoes all patching done within the ``with`` block. (`3290
  &lt;https://github.com/pytest-dev/pytest/issues/3290&gt;`_)

- The ``--pdb`` option now causes KeyboardInterrupt to enter the debugger,
  instead of stopping the test session. On python 2.7, hitting CTRL+C again
  exits the debugger. On python 3.2 and higher, use CTRL+D. (`3299
  &lt;https://github.com/pytest-dev/pytest/issues/3299&gt;`_)

- pytest not longer changes the log level of the root logger when the
  ``log-level`` parameter has greater numeric value than that of the level of
  the root logger, which makes it play better with custom logging configuration
  in user code. (`3307 &lt;https://github.com/pytest-dev/pytest/issues/3307&gt;`_)


Bug Fixes
---------

- A rare race-condition which might result in corrupted ``.pyc`` files on
  Windows has been hopefully solved. (`3008
  &lt;https://github.com/pytest-dev/pytest/issues/3008&gt;`_)

- Also use iter_marker for discovering the marks applying for marker
  expressions from the cli to avoid the bad data from the legacy mark storage.
  (`3441 &lt;https://github.com/pytest-dev/pytest/issues/3441&gt;`_)

- When showing diffs of failed assertions where the contents contain only
  whitespace, escape them using ``repr()`` first to make it easy to spot the
  differences. (`3443 &lt;https://github.com/pytest-dev/pytest/issues/3443&gt;`_)


Improved Documentation
----------------------

- Change documentation copyright year to a range which auto-updates itself each
  time it is published. (`3303
  &lt;https://github.com/pytest-dev/pytest/issues/3303&gt;`_)


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

- ``pytest`` now depends on the `python-atomicwrites
  &lt;https://github.com/untitaker/python-atomicwrites&gt;`_ library. (`3008
  &lt;https://github.com/pytest-dev/pytest/issues/3008&gt;`_)

- Update all pypi.python.org URLs to pypi.org. (`3431
  &lt;https://github.com/pytest-dev/pytest/issues/3431&gt;`_)

- Detect `pytest_` prefixed hooks using the internal plugin manager since
  ``pluggy`` is deprecating the ``implprefix`` argument to ``PluginManager``.
  (`3487 &lt;https://github.com/pytest-dev/pytest/issues/3487&gt;`_)

- Import ``Mapping`` and ``Sequence`` from ``_pytest.compat`` instead of
  directly from ``collections`` in ``python_api.py::approx``. Add ``Mapping``
  to ``_pytest.compat``, import it from ``collections`` on python 2, but from
  ``collections.abc`` on Python 3 to avoid a ``DeprecationWarning`` on Python
  3.7 or newer. (`3497 &lt;https://github.com/pytest-dev/pytest/issues/3497&gt;`_)
   ```
   
  
</details>


 

<details>
  <summary>Links</summary>
  
  - PyPI: https://pypi.org/project/pytest
  - Changelog: https://pyup.io/changelogs/pytest/
  - Repo: https://github.com/pytest-dev/pytest/issues
  - Homepage: http://pytest.org
</details>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
type: bug problem that needs to be addressed
Projects
None yet
Development

No branches or pull requests

4 participants