Commits

Ronny Pfannschmidt committed 1aabf10

add kill-memoizedcall

Comments (0)

Files changed (3)

+# HG changeset patch
+# Parent a5e7a5fa3c7e8aef9306f60c9e0d42c01e4252c7
+diff --git a/testing/test_mark.py b/testing/test_mark.py
+--- a/testing/test_mark.py
++++ b/testing/test_mark.py
+@@ -1,5 +1,5 @@
+ import py, pytest
+-from _pytest.mark import MarkGenerator as Mark
++from _pytest.mark import MarkGenerator as Mark, matchmark
+ 
+ class TestMark:
+     def test_markinfo_repr(self):
+@@ -138,6 +138,21 @@ def test_mark_option(spec, testdir):
+     assert list(passed) == list(passed_result)
+ 
+ 
++class TestMarkMatching:
++    def test_normal_item(self, testdir):
++        items = testdir.getitems("""
++            import pytest
++            pytestmark = pytest.mark.hello
++
++            def test_func():
++                pass
++        """)
++        print items
++        item = items[0]
++        assert matchmark(item, 'hello')
++        assert not matchmark(item, 'notthere')
++
++
+ class TestFunctional:
+ 
+     def test_mark_per_function(self, testdir):
+# HG changeset patch
+# Parent 3a876497815d887f3c13589aa81b238e8bee3b1e
+diff --git a/_pytest/main.py b/_pytest/main.py
+--- a/_pytest/main.py
++++ b/_pytest/main.py
+@@ -251,24 +251,6 @@ class Node(object):
+     def teardown(self):
+         pass
+ 
+-    def _memoizedcall(self, attrname, function):
+-        exattrname = "_ex_" + attrname
+-        failure = getattr(self, exattrname, None)
+-        if failure is not None:
+-            py.builtin._reraise(failure[0], failure[1], failure[2])
+-        if hasattr(self, attrname):
+-            return getattr(self, attrname)
+-        try:
+-            res = function()
+-        except py.builtin._sysex:
+-            raise
+-        except:
+-            failure = py.std.sys.exc_info()
+-            setattr(self, exattrname, failure)
+-            raise
+-        setattr(self, attrname, res)
+-        return res
+-
+     def listchain(self):
+         """ return list of all parent collectors up to self,
+             starting from root of collection tree. """
+@@ -345,10 +327,6 @@ class Collector(Node):
+             return str(exc.args[0])
+         return self._repr_failure_py(excinfo, style="short")
+ 
+-    def _memocollect(self):
+-        """ internal helper method to cache results of calling collect(). """
+-        return self._memoizedcall('_collected', lambda: list(self.collect()))
+-
+     def _prunetraceback(self, excinfo):
+         if hasattr(self, 'fspath'):
+             path = self.fspath
+diff --git a/_pytest/python.py b/_pytest/python.py
+--- a/_pytest/python.py
++++ b/_pytest/python.py
+@@ -332,8 +332,12 @@ def transfer_markers(funcobj, cls, mod):
+ 
+ class Module(pytest.File, PyCollector):
+     """ Collector for test classes and functions. """
++    _obj = None
++
+     def _getobj(self):
+-        return self._memoizedcall('_obj', self._importtestmodule)
++        if self._obj is None:
++            self._obj = self._importtestmodule()
++        return _obj
+ 
+     def collect(self):
+         self.session.funcargmanager._parsefactories(self.obj, self.nodeid)
+diff --git a/_pytest/runner.py b/_pytest/runner.py
+--- a/_pytest/runner.py
++++ b/_pytest/runner.py
+@@ -244,7 +244,7 @@ class TeardownErrorReport(BaseReport):
+         self.__dict__.update(extra)
+ 
+ def pytest_make_collect_report(collector):
+-    call = CallInfo(collector._memocollect, "memocollect")
++    call = CallInfo(lambda: list(collector.collect()), "collect")
+     longrepr = None
+     if not call.excinfo:
+         outcome = "passed"
+kill-memoizedcall
+issue187
 parametrize
 handle-usageerror
 asser-reloader-package