From 46950ef19a5de80ee4cfceb796e1078e1f052a70 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Tue, 5 Jul 2011 17:29:53 +0200 Subject: [PATCH] rename and simplify the assert option: cmdline usage is now: --assert=rewrite/reinterp/plain there is no conflict detection (don't think that's neccessary) --- _pytest/__init__.py | 2 +- _pytest/assertion/__init__.py | 29 +++++++++++++---------------- doc/assert.txt | 20 ++++++++++---------- setup.py | 2 +- testing/test_assertion.py | 20 +++++++------------- 5 files changed, 32 insertions(+), 41 deletions(-) diff --git a/_pytest/__init__.py b/_pytest/__init__.py index 7f1034c8e..21687d318 100644 --- a/_pytest/__init__.py +++ b/_pytest/__init__.py @@ -1,2 +1,2 @@ # -__version__ = '2.1.0.dev5' +__version__ = '2.1.0.dev6' diff --git a/_pytest/assertion/__init__.py b/_pytest/assertion/__init__.py index fec80a1bd..104f9a9ce 100644 --- a/_pytest/assertion/__init__.py +++ b/_pytest/assertion/__init__.py @@ -9,18 +9,18 @@ from _pytest.assertion import util def pytest_addoption(parser): group = parser.getgroup("debugconfig") - group.addoption('--assertmode', action="store", dest="assertmode", - choices=("rewrite", "reinterp", "off", "default"), - default="default", metavar="off|reinterp|rewrite", + group.addoption('--assert', action="store", dest="assertmode", + choices=("rewrite", "reinterp", "plain",), + default="rewrite", metavar="MODE", help="""control assertion debugging tools. -'off' performs no assertion debugging. -'reinterp' reinterprets the expressions in asserts to glean information. -'rewrite' (the default) rewrites the assert statements in test modules on import -to provide sub-expression results.""") +'plain' performs no assertion debugging. +'reinterp' reinterprets assert statements after they failed to provide assertion expression information. +'rewrite' (the default) rewrites assert statements in test modules on import +to provide assert expression information. """) group.addoption('--no-assert', action="store_true", default=False, - dest="noassert", help="DEPRECATED equivalent to --assertmode=off") + dest="noassert", help="DEPRECATED equivalent to --assert=plain") group.addoption('--nomagic', action="store_true", default=False, - dest="nomagic", help="DEPRECATED equivalent to --assertmode=off") + dest="nomagic", help="DEPRECATED equivalent to --assert=plain") class AssertionState: """State for the assertion plugin.""" @@ -33,17 +33,13 @@ class AssertionState: def pytest_configure(config): mode = config.getvalue("assertmode") if config.getvalue("noassert") or config.getvalue("nomagic"): - if mode not in ("off", "default"): - raise pytest.UsageError("assertion options conflict") - mode = "off" - elif mode == "default": - mode = "rewrite" + mode = "plain" if mode == "rewrite": try: import ast except ImportError: mode = "reinterp" - if mode != "off": + if mode != "plain": _load_modules(mode) def callbinrepr(op, left, right): hook_result = config.hook.pytest_assertrepr_compare( @@ -104,7 +100,8 @@ def warn_about_missing_assertion(mode): specifically = "failing tests may report as passing" sys.stderr.write("WARNING: " + specifically + - " because assertions are turned off " + " because assert statements are not executed " + "by the underlying Python interpreter " "(are you using python -O?)\n") pytest_assertrepr_compare = util.assertrepr_compare diff --git a/doc/assert.txt b/doc/assert.txt index 8876e6d68..9c53d3bee 100644 --- a/doc/assert.txt +++ b/doc/assert.txt @@ -23,7 +23,7 @@ you will see the return value of the function call:: $ py.test test_assert1.py ============================= test session starts ============================== - platform darwin -- Python 2.7.0 -- pytest-2.1.0.dev4 + platform linux2 -- Python 2.6.6 -- pytest-2.1.0.dev6 collecting ... collected 1 items test_assert1.py F @@ -37,7 +37,7 @@ you will see the return value of the function call:: E + where 3 = f() test_assert1.py:5: AssertionError - =========================== 1 failed in 0.05 seconds =========================== + =========================== 1 failed in 0.01 seconds =========================== py.test has support for showing the values of the most common subexpressions including calls, attributes, comparisons, and binary and unary @@ -105,7 +105,7 @@ if you run this module:: $ py.test test_assert2.py ============================= test session starts ============================== - platform darwin -- Python 2.7.0 -- pytest-2.1.0.dev4 + platform linux2 -- Python 2.6.6 -- pytest-2.1.0.dev6 collecting ... collected 1 items test_assert2.py F @@ -124,7 +124,7 @@ if you run this module:: E '5' test_assert2.py:5: AssertionError - =========================== 1 failed in 0.05 seconds =========================== + =========================== 1 failed in 0.01 seconds =========================== Special comparisons are done for a number of cases: @@ -181,7 +181,7 @@ the conftest file:: E vals: 1 != 2 test_foocompare.py:8: AssertionError - 1 failed in 0.05 seconds + 1 failed in 0.01 seconds .. _assert-details: .. _`assert introspection`: @@ -212,8 +212,8 @@ rewritten. py.test rewrites test modules on import. It does this by using an import hook to write a new pyc files. Most of the time this works transparently. However, if you are messing with import yourself, the import hook may interfere. If - this is the case, simply use ``--assertmode=reinterp`` or - ``--assertmode=off``. Additionally, rewriting will fail silently if it cannot + this is the case, simply use ``--assert=reinterp`` or + ``--assert=plain``. Additionally, rewriting will fail silently if it cannot write new pycs, i.e. in a read-only filesystem or a zipfile. If an assert statement has not been rewritten or the Python version is less than @@ -221,7 +221,7 @@ If an assert statement has not been rewritten or the Python version is less than py.test walks the frame of the function containing the assert statement to discover sub-expression results of the failing assert statement. You can force py.test to always use assertion reinterpretation by passing the -``--assertmode=reinterp`` option. +``--assert=reinterp`` option. Assert reinterpretation has a caveat not present with assert rewriting: If evaluating the assert expression has side effects you may get a warning that the @@ -238,11 +238,11 @@ easy to rewrite the assertion and avoid any trouble:: content = f.read() assert content != '...' -All assert introspection can be turned off by passing ``--assertmode=off``. +All assert introspection can be turned off by passing ``--assert=plain``. .. versionadded:: 2.1 Add assert rewriting as an alternate introspection technique. .. versionchanged:: 2.1 - Introduce the ``--assertmode`` option. Deprecate ``--no-assert`` and + Introduce the ``--assert`` option. Deprecate ``--no-assert`` and ``--nomagic``. diff --git a/setup.py b/setup.py index 084bb498f..ce9973248 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ def main(): name='pytest', description='py.test: simple powerful testing with Python', long_description = long_description, - version='2.1.0.dev5', + version='2.1.0.dev6', url='http://pytest.org', license='MIT license', platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'], diff --git a/testing/test_assertion.py b/testing/test_assertion.py index a00b430fd..2d8b8b5c2 100644 --- a/testing/test_assertion.py +++ b/testing/test_assertion.py @@ -179,26 +179,20 @@ def test_assertion_options(testdir): off_options = (("--no-assert",), ("--nomagic",), ("--no-assert", "--nomagic"), - ("--assertmode=off",), - ("--assertmode=off", "--no-assert"), - ("--assertmode=off", "--nomagic"), - ("--assertmode=off," "--no-assert", "--nomagic")) + ("--assert=plain",), + ("--assert=plain", "--no-assert"), + ("--assert=plain", "--nomagic"), + ("--assert=plain", "--no-assert", "--nomagic")) for opt in off_options: result = testdir.runpytest(*opt) assert "3 == 4" not in result.stdout.str() - for mode in "rewrite", "reinterp": - for other_opt in off_options[:3]: - opt = ("--assertmode=" + mode,) + other_opt - result = testdir.runpytest(*opt) - assert result.ret == 3 - assert "assertion options conflict" in result.stderr.str() def test_old_assert_mode(testdir): testdir.makepyfile(""" def test_in_old_mode(): assert "@py_builtins" not in globals() """) - result = testdir.runpytest("--assertmode=reinterp") + result = testdir.runpytest("--assert=reinterp") assert result.ret == 0 def test_triple_quoted_string_issue113(testdir): @@ -246,11 +240,11 @@ def test_warn_missing(testdir): p1 = testdir.makepyfile("") result = testdir.run(sys.executable, "-OO", "-m", "pytest", "-h") result.stderr.fnmatch_lines([ - "*WARNING*assertion*", + "*WARNING*assert statements are not executed*", ]) result = testdir.run(sys.executable, "-OO", "-m", "pytest", "--no-assert") result.stderr.fnmatch_lines([ - "*WARNING*assertion*", + "*WARNING*assert statements are not executed*", ]) def test_load_fake_pyc(testdir):