[py-svn] commit/pytest: 3 new changesets

Bitbucket commits-noreply at bitbucket.org
Sat Sep 1 09:59:24 CEST 2012


3 new commits in pytest:


https://bitbucket.org/hpk42/pytest/changeset/15afc660b59c/
changeset:   15afc660b59c
user:        hpk42
date:        2012-08-26 16:30:01
summary:     add talk from brianna and me from 2012
affected #:  1 file

diff -r 60f144dcdcf4a488ef1114ead43a7d59df8f4663 -r 15afc660b59c97a2152f1371a1dfbba1464c4cf7 doc/en/talks.txt
--- a/doc/en/talks.txt
+++ b/doc/en/talks.txt
@@ -12,8 +12,12 @@
 
 Basic usage and funcargs:
 
+- `pycon australia 2012 pytest talk from Brianna Laugher
+  <http://2012.pycon-au.org/schedule/52/view_talk?day=sunday>`_ (`video <http://www.youtube.com/watch?v=DTNejE9EraI>`_, `slides <http://www.slideshare.net/pfctdayelise/funcargs-other-fun-with-pytest>`_, `code <https://gist.github.com/3386951>`_)
+- `pycon 2012 US talk video from Holger Krekel <http://www.youtube.com/watch?v=9LVqBQcFmyw>`_ 
 - `pycon 2010 tutorial PDF`_ and `tutorial1 repository`_
 
+
 Function arguments:
 
 - :ref:`mysetup`



https://bitbucket.org/hpk42/pytest/changeset/99d9e72b0732/
changeset:   99d9e72b0732
user:        hpk42
date:        2012-09-01 09:59:11
summary:     merge
affected #:  4 files

diff -r 15afc660b59c97a2152f1371a1dfbba1464c4cf7 -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -35,6 +35,8 @@
 
 - fix issue128: show captured output when capsys/capfd are used
 
+- fix issue179: propperly show the dependency chain of factories
+
 - pluginmanager.register(...) now raises ValueError if the
   plugin has been already registered or the name is taken
 


diff -r 15afc660b59c97a2152f1371a1dfbba1464c4cf7 -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 _pytest/python.py
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -781,7 +781,7 @@
         # we want to catch a AssertionError
         # replace our subclass with the builtin one
         # see https://bitbucket.org/hpk42/pytest/issue/176/pytestraises
-        from exceptions import AssertionError as ExpectedException
+        from _pytest.assertion.util import BuiltinAssertionError as ExpectedException
 
     if not args:
         return RaisesContext(ExpectedException)
@@ -1211,8 +1211,14 @@
 
     def toterminal(self, tw):
         tw.line()
-        for line in self.factblines or []:
-            tw.line(line)
+        if self.factblines:
+            tw.line('    dependency of:')
+            for factorydef in self.factblines:
+                tw.line('        %s in %s' % (
+                    factorydef.argname,
+                    factorydef.baseid,
+                ))
+            tw.line()
         for line in self.deflines:
             tw.line("    " + line.strip())
         for line in self.errorstring.split("\n"):
@@ -1308,16 +1314,14 @@
             obj = getattr(holderobj, name)
             if not callable(obj):
                 continue
-            # to avoid breaking on magic global callables
-            # we explicitly check if we get a sane code object
-            # else having mock.call in the globals fails for example
-            code = py.code.getrawcode(obj)
-            if not inspect.iscode(code):
-                continue
             # resource factories either have a pytest_funcarg__ prefix
             # or are "funcarg" marked
             marker = getattr(obj, "_pytestfactory", None)
             if marker is not None:
+                if not isinstance(marker, FactoryMarker):
+                    # magic globals  with __getattr__
+                    # give us something thats wrong for that case
+                    continue
                 assert not name.startswith(self._argprefix)
                 argname = name
                 scope = marker.scope


diff -r 15afc660b59c97a2152f1371a1dfbba1464c4cf7 -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 testing/test_junitxml.py
--- a/testing/test_junitxml.py
+++ b/testing/test_junitxml.py
@@ -162,7 +162,7 @@
             import pytest
             @pytest.mark.parametrize('arg1', "<&'", ids="<&'")
             def test_func(arg1):
-                print arg1
+                print(arg1)
                 assert 0
         """)
         result, dom = runandparse(testdir)


diff -r 15afc660b59c97a2152f1371a1dfbba1464c4cf7 -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 testing/test_python.py
--- a/testing/test_python.py
+++ b/testing/test_python.py
@@ -1422,9 +1422,9 @@
     def test_raises_flip_builtin_AssertionError(self):
         # we replace AssertionError on python level
         # however c code might still raise the builtin one
-        import exceptions
+        from _pytest.assertion.util import BuiltinAssertionError
         pytest.raises(AssertionError,"""
-            raise exceptions.AssertionError
+            raise BuiltinAssertionError
         """)
 
     @pytest.mark.skipif('sys.version < "2.5"')
@@ -1664,6 +1664,30 @@
             "*2 passed*"
         ])
 
+    def test_factory_uses_unknown_funcarg_as_dependency_error(self, testdir):
+        testdir.makepyfile("""
+            import pytest
+
+            @pytest.factory()
+            def fail(missing):
+                return
+
+            @pytest.factory()
+            def call_fail(fail):
+                return
+
+            def test_missing(call_fail):
+                pass
+            """)
+        result = testdir.runpytest()
+        result.stdout.fnmatch_lines([
+            "*dependency of:*",
+            "*call_fail*",
+            "*def fail(*",
+            "*LookupError: no factory found for argument 'missing'",
+        ])
+
+
 
 class TestResourceIntegrationFunctional:
     def test_parametrize_with_ids(self, testdir):



https://bitbucket.org/hpk42/pytest/changeset/00fb4f72c38a/
changeset:   00fb4f72c38a
user:        hpk42
date:        2012-09-01 09:58:10
summary:     fix issue185 monkeypatching time.time does not cause pytest to fail
affected #:  6 files

diff -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 -r 00fb4f72c38ac921cd9ea3612f0de15878987536 CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 Changes between 2.2.4 and 2.3.0.dev
 -----------------------------------
 
+- fix issue185 monkeypatching time.time does not cause pytest to fail
 - fix issue172 duplicate call of pytest.setup-decoratored setup_module
   functions
 - fix junitxml=path construction so that if tests change the


diff -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 -r 00fb4f72c38ac921cd9ea3612f0de15878987536 _pytest/__init__.py
--- a/_pytest/__init__.py
+++ b/_pytest/__init__.py
@@ -1,2 +1,2 @@
 #
-__version__ = '2.3.0.dev10'
+__version__ = '2.3.0.dev11'


diff -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 -r 00fb4f72c38ac921cd9ea3612f0de15878987536 _pytest/runner.py
--- a/_pytest/runner.py
+++ b/_pytest/runner.py
@@ -1,6 +1,7 @@
 """ basic collect and runtest protocol implementations """
 
-import py, sys, time
+import py, sys
+from time import time
 from py._code.code import TerminalRepr
 
 def pytest_namespace():
@@ -114,7 +115,7 @@
         #: context of invocation: one of "setup", "call",
         #: "teardown", "memocollect"
         self.when = when
-        self.start = time.time()
+        self.start = time()
         try:
             try:
                 self.result = func()
@@ -123,7 +124,7 @@
             except:
                 self.excinfo = py.code.ExceptionInfo()
         finally:
-            self.stop = time.time()
+            self.stop = time()
 
     def __repr__(self):
         if self.excinfo:


diff -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 -r 00fb4f72c38ac921cd9ea3612f0de15878987536 doc/en/funcargs.txt
--- a/doc/en/funcargs.txt
+++ b/doc/en/funcargs.txt
@@ -599,6 +599,35 @@
 Basic ``pytest_generate_tests`` example
 ---------------------------------------------
 
+..  XXX
+
+    > line 598 "Basic ``pytest_generate_tests`` example" - I think this is
+    > not a very basic example! I think it is copied from parametrize.txt
+    > page, where it might make more sense. Here is what I would consider a
+    > basic example.
+    > 
+    > # code
+    > def isSquare(n):
+    >     n = n ** 0.5
+    >     return int(n) == n
+    > 
+    > # test file
+    > def pytest_generate_tests(metafunc):
+    >     squares = [1, 4, 9, 16, 25, 36, 49]
+    >     for n in range(1, 50):
+    >         expected = n in squares
+    >         if metafunc.function.__name__ == 'test_isSquare':
+    >             metafunc.addcall(id=n, funcargs=dict(n=n,
+    >             expected=expected))
+    > 
+    > 
+    > def test_isSquare(n, expected):
+    >     assert isSquare(n) == expected
+
+
+.. XXX
+    consider adding more examples, also mixed (factory-parametrized/test-function-parametrized, see mail from Brianna)
+
 The ``pytest_generate_tests`` hook is typically used if you want
 to go beyond what ``@pytest.mark.parametrize`` offers.  For example,
 let's say we want to execute a test with different computation


diff -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 -r 00fb4f72c38ac921cd9ea3612f0de15878987536 setup.py
--- a/setup.py
+++ b/setup.py
@@ -24,7 +24,7 @@
         name='pytest',
         description='py.test: simple powerful testing with Python',
         long_description = long_description,
-        version='2.3.0.dev10',
+        version='2.3.0.dev11',
         url='http://pytest.org',
         license='MIT license',
         platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],


diff -r 99d9e72b0732d843b71ee9edec63d450fe27bef3 -r 00fb4f72c38ac921cd9ea3612f0de15878987536 testing/test_monkeypatch.py
--- a/testing/test_monkeypatch.py
+++ b/testing/test_monkeypatch.py
@@ -193,3 +193,16 @@
     tmpdir.chdir()
     mp.undo()
     assert os.getcwd() == tmpdir.strpath
+
+def test_issue185_time_breaks(testdir):
+    testdir.makepyfile("""
+        import time
+        def test_m(monkeypatch):
+            def f():
+                raise Exception
+            monkeypatch.setattr(time, "time", f)
+    """)
+    result = testdir.runpytest()
+    result.stdout.fnmatch_lines("""
+        *1 passed*
+    """)

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.



More information about the pytest-commit mailing list