[py-svn] py-trunk commit 196d3c7e0809: reduce usage of the global py.test.config which maybe should die or become less global at some point (along with py.test.ensuretemp)

commits-noreply at bitbucket.org commits-noreply at bitbucket.org
Wed Jan 13 18:07:14 CET 2010


# HG changeset patch -- Bitbucket.org
# Project py-trunk
# URL http://bitbucket.org/hpk42/py-trunk/overview/
# User holger krekel <holger at merlinux.eu>
# Date 1263402298 -3600
# Node ID 196d3c7e080933d864d03eec31ef0fb8837f742b
# Parent 92022b94ebd9777ecbf318bc77a1432e91f62ea0
reduce usage of the global py.test.config which maybe should die or become less global at some point (along with py.test.ensuretemp)

--- a/ISSUES.txt
+++ b/ISSUES.txt
@@ -51,14 +51,23 @@ but a remote one fail because the tests 
 does not contain an "__init__.py". Either give
 an error or make it work without the __init__.py
 
-deprecate ensuretemp / introduce funcargs to setup method
+consider globals: py.test.ensuretemp and config 
 --------------------------------------------------------------
 tags: experimental-wish 1.2
 
-The remaining uses of py.test.ensuretemp within the py-test base
-itself are for setup methods.  Also users have expressed the
-wish to have funcargs available to setup functions.  Experiment
-with allowing funcargs there and finalizing deprecating py.test.ensuretemp.
+consider deprecating py.test.ensuretemp and py.test.config 
+to further reduce py.test globality.  Also consider 
+having py.test.config and ensuretemp coming from
+a plugin rather than being there from the start.
+
+consider allowing funcargs to setup methods
+--------------------------------------------------------------
+tags: experimental-wish 1.2
+
+Users have expressed the wish to have funcargs available to setup 
+functions.  Experiment with allowing funcargs there - it might
+also help to make the py.test.ensuretemp and config deprecation.
+
 
 outsource figleaf plugin 
 ---------------------------------------

--- a/testing/acceptance_test.py
+++ b/testing/acceptance_test.py
@@ -19,8 +19,8 @@ class TestGeneralUsage:
         """)
         testdir.makepyfile(test_one="""
             import py
-            def test_option():
-                assert py.test.config.option.xyz == "123"
+            def test_option(pytestconfig):
+                assert pytestconfig.option.xyz == "123"
         """)
         result = testdir.runpytest("-p", "xyz", "--xyz=123")
         assert result.ret == 0

--- a/testing/io_/test_terminalwriter.py
+++ b/testing/io_/test_terminalwriter.py
@@ -44,46 +44,69 @@ def test_unicode_encoding():
         tw.line(msg)
         assert l[0].strip() == msg.encode(encoding)
 
-class BaseTests:
-    def test_line(self):    
-        tw = self.getwriter()
+class TestTerminalWriter:
+    def pytest_generate_tests(self, metafunc):
+        if "tw" in metafunc.funcargnames:
+            metafunc.addcall(id="path", param="path")
+            metafunc.addcall(id="stringio", param="stringio")
+            metafunc.addcall(id="callable", param="callable")
+    def pytest_funcarg__tw(self, request):
+        if request.param == "path":
+            tmpdir = request.getfuncargvalue("tmpdir")
+            p = tmpdir.join("tmpfile")
+            tw = py.io.TerminalWriter(p.open('w+'))
+            def getlines():
+                tw._file.flush()
+                return p.open('r').readlines()
+        elif request.param == "stringio":
+            tw = py.io.TerminalWriter(stringio=True)
+            def getlines():
+                tw.stringio.seek(0)
+                return tw.stringio.readlines()
+        elif request.param == "callable":
+            writes = []
+            tw = py.io.TerminalWriter(writes.append)
+            def getlines():
+                io = py.io.TextIO()
+                io.write("".join(writes))
+                io.seek(0)
+                return io.readlines()
+        tw.getlines = getlines
+        return tw
+
+    def test_line(self, tw):    
         tw.line("hello")
-        l = self.getlines()
+        l = tw.getlines()
         assert len(l) == 1
         assert l[0] == "hello\n"
 
-    def test_line_unicode(self):    
-        tw = self.getwriter()
+    def test_line_unicode(self, tw):    
         for encoding in 'utf8', 'latin1':
             tw._encoding = encoding 
             msg = py.builtin._totext('b\u00f6y', 'utf8')
             tw.line(msg)
-            l = self.getlines()
+            l = tw.getlines()
             assert l[0] == msg + "\n"
 
-    def test_sep_no_title(self):
-        tw = self.getwriter()
+    def test_sep_no_title(self, tw):
         tw.sep("-", fullwidth=60) 
-        l = self.getlines()
+        l = tw.getlines()
         assert len(l) == 1
         assert l[0] == "-" * 60 + "\n"
 
-    def test_sep_with_title(self):
-        tw = self.getwriter()
+    def test_sep_with_title(self, tw):
         tw.sep("-", "hello", fullwidth=60) 
-        l = self.getlines()
+        l = tw.getlines()
         assert len(l) == 1
         assert l[0] == "-" * 26 + " hello " + "-" * 27 + "\n"
 
     @py.test.mark.skipif("sys.platform == 'win32'")
-    def test__escaped(self):
-        tw = self.getwriter()
+    def test__escaped(self, tw):
         text2 = tw._escaped("hello", (31))
         assert text2.find("hello") != -1
 
     @py.test.mark.skipif("sys.platform == 'win32'")
-    def test_markup(self):
-        tw = self.getwriter()
+    def test_markup(self, tw):
         for bold in (True, False):
             for color in ("red", "green"):
                 text2 = tw.markup("hello", **{color: True, 'bold': bold})
@@ -91,53 +114,22 @@ class BaseTests:
         py.test.raises(ValueError, "tw.markup('x', wronkw=3)")
         py.test.raises(ValueError, "tw.markup('x', wronkw=0)")
 
-    def test_line_write_markup(self):
-        tw = self.getwriter()
+    def test_line_write_markup(self, tw):
         tw.hasmarkup = True
         tw.line("x", bold=True)
         tw.write("x\n", red=True)
-        l = self.getlines()
+        l = tw.getlines()
         if sys.platform != "win32":
             assert len(l[0]) > 2, l
             assert len(l[1]) > 2, l
 
-    def test_attr_fullwidth(self):
-        tw = self.getwriter()
+    def test_attr_fullwidth(self, tw):
         tw.sep("-", "hello", fullwidth=70)
         tw.fullwidth = 70
         tw.sep("-", "hello")
-        l = self.getlines()
+        l = tw.getlines()
         assert len(l[0]) == len(l[1])
 
-class TestTmpfile(BaseTests):
-    def getwriter(self):
-        self.path = py.test.config.ensuretemp("terminalwriter").ensure("tmpfile")
-        self.tw = py.io.TerminalWriter(self.path.open('w+'))
-        return self.tw
-    def getlines(self):
-        io = self.tw._file
-        io.flush()
-        return self.path.open('r').readlines()
-
-class TestWithStringIO(BaseTests):
-    def getwriter(self):
-        self.tw = py.io.TerminalWriter(stringio=True)
-        return self.tw
-    def getlines(self):
-        io = self.tw.stringio
-        io.seek(0)
-        return io.readlines()
-
-class TestCallableFile(BaseTests):    
-    def getwriter(self):
-        self.writes = []
-        return py.io.TerminalWriter(self.writes.append)
-
-    def getlines(self):
-        io = py.io.TextIO()
-        io.write("".join(self.writes))
-        io.seek(0)
-        return io.readlines()
 
 def test_attr_hasmarkup():
     tw = py.io.TerminalWriter(stringio=True)
@@ -146,6 +138,3 @@ def test_attr_hasmarkup():
     tw.line("hello", bold=True)
     s = tw.stringio.getvalue()
     assert len(s) > len("hello")
-
-    
-

--- a/testing/test_funcargs.py
+++ b/testing/test_funcargs.py
@@ -391,15 +391,15 @@ class TestGenfuncFunctional:
                 assert request._pyfuncitem._genid == "0"
                 return request.param 
 
-            def test_function(metafunc):
-                assert metafunc.config == py.test.config
+            def test_function(metafunc, pytestconfig):
+                assert metafunc.config == pytestconfig
                 assert metafunc.module.__name__ == __name__
                 assert metafunc.function == test_function
                 assert metafunc.cls is None
 
             class TestClass:
-                def test_method(self, metafunc):
-                    assert metafunc.config == py.test.config
+                def test_method(self, metafunc, pytestconfig):
+                    assert metafunc.config == pytestconfig
                     assert metafunc.module.__name__ == __name__
                     if py.std.sys.version_info > (3, 0):
                         unbound = TestClass.test_method

--- a/testing/test_pluginmanager.py
+++ b/testing/test_pluginmanager.py
@@ -74,8 +74,8 @@ class TestBootstrapping:
         x500 = testdir.makepyfile(pytest_x500="#")
         p = testdir.makepyfile("""
             import py
-            def test_hello():
-                plugin = py.test.config.pluginmanager.getplugin('x500')
+            def test_hello(pytestconfig):
+                plugin = pytestconfig.pluginmanager.getplugin('x500')
                 assert plugin is not None
         """)
         monkeypatch.setenv('PYTEST_PLUGINS', 'pytest_x500', prepend=",")



More information about the pytest-commit mailing list