Skip to content

Merge from master to features #1705

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

Merged
merged 34 commits into from
Jul 8, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
6359e75
Trivial spelling fix in runtest_setup.py
The-Compiler Jun 22, 2016
df9918e
issue1625, name getfuncargvalue to getfixturevalue
tomviner Jun 21, 2016
3d263c6
Merge pull request #1626 from tomviner/issue1625/rename-getfuncargvalue
nicoddemus Jun 24, 2016
77689eb
Fixes #1503 no longer collapse false explanations
tomviner Jun 24, 2016
ea5bda0
remove links to funding campaign
pfctdayelise Jun 24, 2016
62255d8
rm global header
pfctdayelise Jun 24, 2016
7612b65
update sprint page to be past tense
pfctdayelise Jun 24, 2016
0c63762
Merge pull request #1654 from tomviner/issue1503/remove_collapse_false
nicoddemus Jun 24, 2016
939407e
Simplify Argument.__repr__
blueyed Jun 22, 2016
757f37f
Don't ignore ImportError with setuptools plugins
The-Compiler May 23, 2016
05b5554
Renamed pytest pdb to debugging which conflicts with python pdb.
Jun 25, 2016
9a5224e
Renamed the pdb module and changed unit tests accordingly
Jun 25, 2016
70ea3ce
Merge pull request #1564 from The-Compiler/issue1479
RonnyPfannschmidt Jun 25, 2016
ce603dc
Add changelog entry for #1564
The-Compiler Jun 25, 2016
7eb1318
Merge pull request #1656 from pytest-dev/rm-indiegogo-links
nicoddemus Jun 25, 2016
df17f86
Merge pull request #1648 from blueyed/simplify-Argument-__repr__
nicoddemus Jun 25, 2016
e024214
Merge pull request #1666 from pytest-dev/1564-changelog
nicoddemus Jun 25, 2016
c519b95
Merge pull request #1663 from aostr/master
nicoddemus Jun 25, 2016
e2f5501
Improve of the test output for logical expression with brackets.
RedBeardCode Jun 25, 2016
22c2d87
Fix bad merge in CHANGELOG
nicoddemus Jun 26, 2016
58e5581
Remove commented out code
nicoddemus Jun 26, 2016
7e78965
Merge branch 'logic_brackets'
nicoddemus Jun 26, 2016
21d2778
catched -> caught
eli-b Jun 27, 2016
1e60294
Merge pull request #1679 from eli-b/patch-1
The-Compiler Jun 27, 2016
771c453
Document the interaction of autouse scopes
quodlibetor Jun 29, 2016
75ecd94
Merge pull request #1689 from quodlibetor/autouse-docs
nicoddemus Jun 29, 2016
e3c43a1
Add changelog to requirements for pytest-dev plugins
The-Compiler Jun 30, 2016
f74dd85
Merge pull request #1692 from pytest-dev/changelog
nicoddemus Jun 30, 2016
8d39ce1
Fix links and removed 404 links from talks.rst
nicoddemus Jul 5, 2016
10c5e6f
Split AppVeyor test runs in multiple jobs to avoid timeout issues
nicoddemus Jul 5, 2016
067e044
Merge pull request #1700 from nicoddemus/split-appveyor
The-Compiler Jul 5, 2016
cc0920c
Merge pull request #1699 from nicoddemus/404-links-on-talks-docs
RonnyPfannschmidt Jul 5, 2016
b9a91dc
merge from master to features
RonnyPfannschmidt Jul 6, 2016
dad6aa8
fix duplicate target in changelog
RonnyPfannschmidt Jul 6, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -172,13 +172,36 @@
* Add proposal to docs for a new feature that enables users to combine multiple
fixtures into one. Thanks to `@hpk42`_ and `@hackebrot`_.

* Rename ``getfuncargvalue`` to ``getfixturevalue``. ``getfuncargvalue`` is
deprecated but still present. Thanks to `@RedBeardCode`_ and `@tomviner`_
for PR (`#1626`_).

* Always include full assertion explanation. The previous behaviour was hiding
sub-expressions that happened to be False, assuming this was redundant information.
Thanks `@bagerard`_ for reporting (`#1503`_). Thanks to `@davehunt`_ and
`@tomviner`_ for PR.

* Renamed the pytest ``pdb`` module (plugin) into ``debugging``.

* Improve of the test output for logical expression with brackets.
Fixes(`#925`_). Thanks `@DRMacIver`_ for reporting. Thanks to `@RedBeardCode`_
for PR.

* ImportErrors in plugins now are a fatal error instead of issuing a

.. _#1632: https://github.com/pytest-dev/pytest/issues/1632

pytest warning (`#1479`_). Thanks to `@The-Compiler`_ for the PR.

.. _#1580: https://github.com/pytest-dev/pytest/pull/1580
.. _#1605: https://github.com/pytest-dev/pytest/issues/1605
.. _#1597: https://github.com/pytest-dev/pytest/pull/1597
.. _#460: https://github.com/pytest-dev/pytest/pull/460
.. _#1553: https://github.com/pytest-dev/pytest/issues/1553
.. _#1626: https://github.com/pytest-dev/pytest/pull/1626
.. _#1503: https://github.com/pytest-dev/pytest/issues/1503
.. _#1479: https://github.com/pytest-dev/pytest/issues/1479
.. _#925: https://github.com/pytest-dev/pytest/issues/925

.. _@graingert: https://github.com/graingert
.. _@taschini: https://github.com/taschini
Expand All @@ -187,6 +210,8 @@
.. _@Vogtinator: https://github.com/Vogtinator
.. _@blueyed: https://github.com/blueyed
.. _@fengxx: https://github.com/fengxx
.. _@bagerard: https://github.com/bagerard
.. _@DRMacIver: https://github.com/DRMacIver

* Fix `#1421`_: Exit tests if a collection error occurs and add
``--continue-on-collection-errors`` option to restore previous behaviour.
Expand Down
2 changes: 2 additions & 0 deletions CONTRIBUTING.rst
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ the following:

- an issue tracker for bug reports and enhancement requests.

- a `changelog <http://keepachangelog.com/>`_

If no contributor strongly objects and two agree, the repository can then be
transferred to the ``pytest-dev`` organisation.

Expand Down
5 changes: 5 additions & 0 deletions _pytest/assertion/rewrite.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
"""Rewrite assertion AST to produce nice error messages"""

import ast
import _ast
import errno
import itertools
import imp
Expand Down Expand Up @@ -876,6 +877,8 @@ def visit_Attribute(self, attr):
def visit_Compare(self, comp):
self.push_format_context()
left_res, left_expl = self.visit(comp.left)
if isinstance(comp.left, (_ast.Compare, _ast.BoolOp)):
left_expl = "({0})".format(left_expl)
res_variables = [self.variable() for i in range(len(comp.ops))]
load_names = [ast.Name(v, ast.Load()) for v in res_variables]
store_names = [ast.Name(v, ast.Store()) for v in res_variables]
Expand All @@ -885,6 +888,8 @@ def visit_Compare(self, comp):
results = [left_res]
for i, op, next_operand in it:
next_res, next_expl = self.visit(next_operand)
if isinstance(next_operand, (_ast.Compare, _ast.BoolOp)):
next_expl = "({0})".format(next_expl)
results.append(next_res)
sym = binop_map[op.__class__]
syms.append(ast.Str(sym))
Expand Down
33 changes: 0 additions & 33 deletions _pytest/assertion/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,44 +38,11 @@ def format_explanation(explanation):
displaying diffs.
"""
explanation = ecu(explanation)
explanation = _collapse_false(explanation)
lines = _split_explanation(explanation)
result = _format_lines(lines)
return u('\n').join(result)


def _collapse_false(explanation):
"""Collapse expansions of False

So this strips out any "assert False\n{where False = ...\n}"
blocks.
"""
where = 0
while True:
start = where = explanation.find("False\n{False = ", where)
if where == -1:
break
level = 0
prev_c = explanation[start]
for i, c in enumerate(explanation[start:]):
if prev_c + c == "\n{":
level += 1
elif prev_c + c == "\n}":
level -= 1
if not level:
break
prev_c = c
else:
raise AssertionError("unbalanced braces: %r" % (explanation,))
end = start + i
where = end
if explanation[end - 1] == '\n':
explanation = (explanation[:start] + explanation[start+15:end-1] +
explanation[end+1:])
where -= 17
return explanation


def _split_explanation(explanation):
"""Return a list of individual lines in the explanation

Expand Down
24 changes: 9 additions & 15 deletions _pytest/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ class UsageError(Exception):
_preinit = []

default_plugins = (
"mark main terminal runner python pdb unittest capture skipping "
"mark main terminal runner python debugging unittest capture skipping "
"tmpdir monkeypatch recwarn pastebin helpconfig nose assertion "
"junitxml resultlog doctest cacheprovider freeze_support "
"setuponly setupplan").split()
Expand Down Expand Up @@ -656,20 +656,17 @@ def _set_opt_strings(self, opts):
self._long_opts.append(opt)

def __repr__(self):
retval = 'Argument('
args = []
if self._short_opts:
retval += '_short_opts: ' + repr(self._short_opts) + ', '
args += ['_short_opts: ' + repr(self._short_opts)]
if self._long_opts:
retval += '_long_opts: ' + repr(self._long_opts) + ', '
retval += 'dest: ' + repr(self.dest) + ', '
args += ['_long_opts: ' + repr(self._long_opts)]
args += ['dest: ' + repr(self.dest)]
if hasattr(self, 'type'):
retval += 'type: ' + repr(self.type) + ', '
args += ['type: ' + repr(self.type)]
if hasattr(self, 'default'):
retval += 'default: ' + repr(self.default) + ', '
if retval[-2:] == ', ': # always long enough to test ("Argument(" )
retval = retval[:-2]
retval += ')'
return retval
args += ['default: ' + repr(self.default)]
return 'Argument({0})'.format(', '.join(args))


class OptionGroup:
Expand Down Expand Up @@ -928,10 +925,7 @@ def _preparse(self, args, addopts=True):
args[:] = self.getini("addopts") + args
self._checkversion()
self.pluginmanager.consider_preparse(args)
try:
self.pluginmanager.load_setuptools_entrypoints("pytest11")
except ImportError as e:
self.warn("I2", "could not load setuptools entry import: %s" % (e,))
self.pluginmanager.load_setuptools_entrypoints("pytest11")
self.pluginmanager.consider_env()
self.known_args_namespace = ns = self._parser.parse_known_args(args, namespace=self.option.copy())
if self.known_args_namespace.confcutdir is None and self.inifile:
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion _pytest/doctest.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def __init__(self, name, parent, runner=None, dtest=None):
def setup(self):
if self.dtest is not None:
self.fixture_request = _setup_fixtures(self)
globs = dict(getfixture=self.fixture_request.getfuncargvalue)
globs = dict(getfixture=self.fixture_request.getfixturevalue)
for name, value in self.fixture_request.getfuncargvalue('doctest_namespace').items():
globs[name] = value
self.dtest.globs.update(globs)
Expand Down
29 changes: 18 additions & 11 deletions _pytest/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
import re
import types
import sys
import math
import warnings
import collections
import math

import py
import pytest
Expand Down Expand Up @@ -1855,7 +1856,7 @@ def _getnextfixturedef(self, argname):
fixturedefs = self._arg2fixturedefs.get(argname, None)
if fixturedefs is None:
# we arrive here because of a a dynamic call to
# getfuncargvalue(argname) usage which was naturally
# getfixturevalue(argname) usage which was naturally
# not known at parsing/collection time
fixturedefs = self._fixturemanager.getfixturedefs(
argname, self._pyfuncitem.parent.nodeid)
Expand Down Expand Up @@ -1950,7 +1951,7 @@ def _fillfixtures(self):
fixturenames = getattr(item, "fixturenames", self.fixturenames)
for argname in fixturenames:
if argname not in item.funcargs:
item.funcargs[argname] = self.getfuncargvalue(argname)
item.funcargs[argname] = self.getfixturevalue(argname)

def cached_setup(self, setup, teardown=None, scope="module", extrakey=None):
""" (deprecated) Return a testing resource managed by ``setup`` &
Expand Down Expand Up @@ -1984,17 +1985,23 @@ def finalizer():
self._addfinalizer(finalizer, scope=scope)
return val

def getfuncargvalue(self, argname):
""" Dynamically retrieve a named fixture function argument.
def getfixturevalue(self, argname):
""" Dynamically run a named fixture function.

As of pytest-2.3, it is easier and usually better to access other
fixture values by stating it as an input argument in the fixture
function. If you only can decide about using another fixture at test
Declaring fixtures via function argument is recommended where possible.
But if you can only decide whether to use another fixture at test
setup time, you may use this function to retrieve it inside a fixture
function body.
or test function body.
"""
return self._get_active_fixturedef(argname).cached_result[0]

def getfuncargvalue(self, argname):
""" Deprecated, use getfixturevalue. """
warnings.warn(
"use of getfuncargvalue is deprecated, use getfixturevalue",
DeprecationWarning)
return self.getfixturevalue(argname)

def _get_active_fixturedef(self, argname):
try:
return self._fixturedefs[argname]
Expand All @@ -2010,7 +2017,7 @@ class PseudoFixtureDef:
raise
# remove indent to prevent the python3 exception
# from leaking into the call
result = self._getfuncargvalue(fixturedef)
result = self._getfixturevalue(fixturedef)
self._funcargs[argname] = result
self._fixturedefs[argname] = fixturedef
return fixturedef
Expand All @@ -2026,7 +2033,7 @@ def _get_fixturestack(self):
l.append(fixturedef)
current = current._parent_request

def _getfuncargvalue(self, fixturedef):
def _getfixturevalue(self, fixturedef):
# prepare a subrequest object before calling fixture function
# (latter managed by fixturedef)
argname = fixturedef.argname
Expand Down
7 changes: 7 additions & 0 deletions appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,13 @@ environment:
# using pytestbot account as detailed here:
# https://www.appveyor.com/docs/build-configuration#secure-variables

matrix:
# create multiple jobs to execute a set of tox runs on each; this is to workaround having
# builds timing out in AppVeyor
- TOXENV: "linting,py26,py27,py33,py34,py35,pypy"
- TOXENV: "py27-pexpect,py27-xdist,py27-trial,py35-pexpect,py35-xdist,py35-trial"
- TOXENV: "py27-nobyte,doctesting,py27-cxfreeze"

install:
- echo Installed Pythons
- dir c:\Python*
Expand Down
14 changes: 0 additions & 14 deletions doc/en/_templates/layout.html
Original file line number Diff line number Diff line change
@@ -1,19 +1,5 @@
{% extends "!layout.html" %}
{% block header %}
<div align="center" xmlns="http://www.w3.org/1999/html" style="background-color: lightgreen; padding: .5em">
<h4>
Want to help improve pytest? Please
<a href="https://www.indiegogo.com/projects/python-testing-sprint-mid-2016#/">
contribute to
</a>
or
<a href="announce/sprint2016.html">
join
</a>
our upcoming sprint in June 2016!

</h4>
</div>
{{super()}}
{% endblock %}
{% block footer %}
Expand Down
5 changes: 0 additions & 5 deletions doc/en/_templates/links.html
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
<h3>Useful Links</h3>
<ul>
<li>
<a href="https://www.indiegogo.com/projects/python-testing-sprint-mid-2016#/">
<b>Sprint funding campaign</b>
</a>
</li>
<li><a href="{{ pathto('index') }}">The pytest Website</a></li>
<li><a href="{{ pathto('contributing') }}">Contribution Guide</a></li>
<li><a href="https://pypi.python.org/pypi/pytest">pytest @ PyPI</a></li>
Expand Down
Loading