2 new commits in pytest:

https://bitbucket.org/hpk42/pytest/commits/b04ea4da194b/
Changeset:   b04ea4da194b
User:        hpk42
Date:        2013-11-21 14:54:46
Summary:     simplify basedir isolation
Affected #:  1 file

diff -r 4c926afb69fc84051e08a2816085a58a74493ebf -r 
b04ea4da194bbce91e32fc94fbfafa7ee20ee456 testing/conftest.py
--- a/testing/conftest.py
+++ b/testing/conftest.py
@@ -12,6 +12,7 @@
            help=("run FD checks if lsof is available"))
 
 def pytest_configure(config):
+    config._basedir = py.path.local()
     if config.getvalue("lsof"):
         try:
             out = py.process.cmdexec("lsof -p %d" % pid)
@@ -42,12 +43,8 @@
         config._numfiles = len(lines2)
         raise AssertionError("\n".join(error))
 
-@pytest.mark.tryfirst # XXX rather do item.addfinalizer
-def pytest_runtest_setup(item):
-    item._oldir = py.path.local()
-
 def pytest_runtest_teardown(item, __multicall__):
-    item._oldir.chdir()
+    item.config._basedir.chdir()
     if hasattr(item.config, '_numfiles'):
         x = __multicall__.execute()
         check_open_files(item.config)


https://bitbucket.org/hpk42/pytest/commits/4951204afadc/
Changeset:   4951204afadc
User:        hpk42
Date:        2013-11-21 15:25:16
Summary:     fix issue357 - special case "-k" expressions to allow for
filtering with simple strings that are not valid python expressions.
Examples: "-k 1.3" matches all tests parametrized with 1.3.
"-k None" filters all tests that have "None" in their name
and conversely "-k 'not None'".
Previously these examples would raise syntax errors.

Also add a note to the docs about what is allowed.
Affected #:  4 files

diff -r b04ea4da194bbce91e32fc94fbfafa7ee20ee456 -r 
4951204afadcc1070e0d478c7ba4e8bdd29cd8fd CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -11,6 +11,13 @@
   help with random "xdist" collection failures.  Thanks to
   Ronny Pfannschmidt and Donald Stufft for helping to isolate it.
 
+- fix issue357 - special case "-k" expressions to allow for
+  filtering with simple strings that are not valid python expressions.
+  Examples: "-k 1.3" matches all tests parametrized with 1.3.
+  "-k None" filters all tests that have "None" in their name
+  and conversely "-k 'not None'". 
+  Previously these examples would raise syntax errors.
+  
 - fix issue384 by removing the trial support code
   since the unittest compat enhancements allow
   trial to handle it on its own

diff -r b04ea4da194bbce91e32fc94fbfafa7ee20ee456 -r 
4951204afadcc1070e0d478c7ba4e8bdd29cd8fd _pytest/mark.py
--- a/_pytest/mark.py
+++ b/_pytest/mark.py
@@ -140,7 +140,13 @@
         for name in colitem.function.__dict__:
             mapped_names.add(name)
 
-    return eval(keywordexpr, {}, KeywordMapping(mapped_names))
+    mapping = KeywordMapping(mapped_names)
+    if " " not in keywordexpr:
+        # special case to allow for simple "-k pass" and "-k 1.3"
+        return mapping[keywordexpr]
+    elif keywordexpr.startswith("not ") and " " not in keywordexpr[4:]:
+        return not mapping[keywordexpr[4:]]
+    return eval(keywordexpr, {}, mapping)
 
 
 def pytest_configure(config):

diff -r b04ea4da194bbce91e32fc94fbfafa7ee20ee456 -r 
4951204afadcc1070e0d478c7ba4e8bdd29cd8fd doc/en/example/markers.txt
--- a/doc/en/example/markers.txt
+++ b/doc/en/example/markers.txt
@@ -95,6 +95,17 @@
     ================= 1 tests deselected by '-khttp or quick' 
==================
     ================== 2 passed, 1 deselected in 0.01 seconds 
==================
 
+.. note::
+
+    If you are using expressions such as "X and Y" then both X and Y
+    need to be simple non-keyword names.  For example, "pass" or "from"
+    will result in SyntaxErrors because "-k" evaluates the expression.
+
+    However, if the "-k" argument is a simple string, no such restrictions
+    apply.  Also "-k 'not STRING'" has no restrictions.  You can also
+    specify numbers like "-k 1.3" to match tests which are parametrized
+    with the float "1.3".
+
 Registering markers
 -------------------------------------
 

diff -r b04ea4da194bbce91e32fc94fbfafa7ee20ee456 -r 
4951204afadcc1070e0d478c7ba4e8bdd29cd8fd testing/test_mark.py
--- a/testing/test_mark.py
+++ b/testing/test_mark.py
@@ -174,7 +174,9 @@
 
 @pytest.mark.parametrize("spec", [
         ("interface", ("test_interface",)),
-        ("not interface", ("test_nointer",)),
+        ("not interface", ("test_nointer", "test_pass")),
+        ("pass", ("test_pass",)),
+        ("not pass", ("test_interface", "test_nointer")),
 ])
 def test_keyword_option_custom(spec, testdir):
     testdir.makepyfile("""
@@ -182,6 +184,8 @@
             pass
         def test_nointer():
             pass
+        def test_pass():
+            pass
     """)
     opt, passed_result = spec
     rec = testdir.inline_run("-k", opt)
@@ -191,6 +195,24 @@
     assert list(passed) == list(passed_result)
 
 
+@pytest.mark.parametrize("spec", [
+        ("None", ("test_func[None]",)),
+        ("1.3", ("test_func[1.3]",))
+])
+def test_keyword_option_parametrize(spec, testdir):
+    testdir.makepyfile("""
+        import pytest
+        @pytest.mark.parametrize("arg", [None, 1.3])
+        def test_func(arg):
+            pass
+    """)
+    opt, passed_result = spec
+    rec = testdir.inline_run("-k", opt)
+    passed, skipped, fail = rec.listoutcomes()
+    passed = [x.nodeid.split("::")[-1] for x in passed]
+    assert len(passed) == len(passed_result)
+    assert list(passed) == list(passed_result)
+
 class TestFunctional:
 
     def test_mark_per_function(self, testdir):

Repository URL: https://bitbucket.org/hpk42/pytest/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.
_______________________________________________
pytest-commit mailing list
pytest-commit@python.org
https://mail.python.org/mailman/listinfo/pytest-commit

Reply via email to