fix issue93 - hide output of code in early-loaded conftest files
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									f466d35771
								
							
						
					
					
						commit
						b4210f3ae0
					
				| 
						 | 
					@ -5,7 +5,7 @@ see http://pytest.org for documentation and details
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(c) Holger Krekel and others, 2004-2010
 | 
					(c) Holger Krekel and others, 2004-2010
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
__version__ = "2.0.0.dev4"
 | 
					__version__ = '2.0.0.dev6'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
__all__ = ['config', 'cmdline']
 | 
					__all__ = ['config', 'cmdline']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@ import py
 | 
				
			||||||
import sys, os
 | 
					import sys, os
 | 
				
			||||||
from pytest._core import PluginManager
 | 
					from pytest._core import PluginManager
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def pytest_cmdline_parse(pluginmanager, args):
 | 
					def pytest_cmdline_parse(pluginmanager, args):
 | 
				
			||||||
    config = Config(pluginmanager)
 | 
					    config = Config(pluginmanager)
 | 
				
			||||||
    config.parse(args)
 | 
					    config.parse(args)
 | 
				
			||||||
| 
						 | 
					@ -283,11 +284,25 @@ class Config(object):
 | 
				
			||||||
            if not hasattr(self.option, opt.dest):
 | 
					            if not hasattr(self.option, opt.dest):
 | 
				
			||||||
                setattr(self.option, opt.dest, opt.default)
 | 
					                setattr(self.option, opt.dest, opt.default)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _setinitialconftest(self, args):
 | 
				
			||||||
 | 
					        # capture output during conftest init (#issue93)
 | 
				
			||||||
 | 
					        name = hasattr(os, 'dup') and 'StdCaptureFD' or 'StdCapture'
 | 
				
			||||||
 | 
					        cap = getattr(py.io, name)()
 | 
				
			||||||
 | 
					        try:
 | 
				
			||||||
 | 
					            try:
 | 
				
			||||||
 | 
					                self._conftest.setinitial(args)
 | 
				
			||||||
 | 
					            finally:
 | 
				
			||||||
 | 
					                out, err = cap.reset()
 | 
				
			||||||
 | 
					        except:
 | 
				
			||||||
 | 
					            sys.stdout.write(out)
 | 
				
			||||||
 | 
					            sys.stderr.write(err)
 | 
				
			||||||
 | 
					            raise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _preparse(self, args):
 | 
					    def _preparse(self, args):
 | 
				
			||||||
        self.pluginmanager.consider_setuptools_entrypoints()
 | 
					        self.pluginmanager.consider_setuptools_entrypoints()
 | 
				
			||||||
        self.pluginmanager.consider_env()
 | 
					        self.pluginmanager.consider_env()
 | 
				
			||||||
        self.pluginmanager.consider_preparse(args)
 | 
					        self.pluginmanager.consider_preparse(args)
 | 
				
			||||||
        self._conftest.setinitial(args)
 | 
					        self._setinitialconftest(args)
 | 
				
			||||||
        self.pluginmanager.do_addoption(self._parser)
 | 
					        self.pluginmanager.do_addoption(self._parser)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def parse(self, args):
 | 
					    def parse(self, args):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								setup.py
								
								
								
								
							
							
						
						
									
										2
									
								
								setup.py
								
								
								
								
							| 
						 | 
					@ -22,7 +22,7 @@ def main():
 | 
				
			||||||
        name='pytest',
 | 
					        name='pytest',
 | 
				
			||||||
        description='py.test: simple powerful testing with Python',
 | 
					        description='py.test: simple powerful testing with Python',
 | 
				
			||||||
        long_description = long_description,
 | 
					        long_description = long_description,
 | 
				
			||||||
        version='2.0.0.dev5',
 | 
					        version='2.0.0.dev6',
 | 
				
			||||||
        url='http://pytest.org',
 | 
					        url='http://pytest.org',
 | 
				
			||||||
        license='MIT license',
 | 
					        license='MIT license',
 | 
				
			||||||
        platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
 | 
					        platforms=['unix', 'linux', 'osx', 'cygwin', 'win32'],
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -138,15 +138,23 @@ class TestGeneralUsage:
 | 
				
			||||||
            "*Module*test_issue88*",
 | 
					            "*Module*test_issue88*",
 | 
				
			||||||
        ])
 | 
					        ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @py.test.mark.xfail
 | 
					 | 
				
			||||||
    def test_issue93_initialnode_importing_capturing(self, testdir):
 | 
					    def test_issue93_initialnode_importing_capturing(self, testdir):
 | 
				
			||||||
        testdir.makeconftest("""
 | 
					        testdir.makeconftest("""
 | 
				
			||||||
            print "should not be seen"
 | 
					            print ("should not be seen")
 | 
				
			||||||
        """)
 | 
					        """)
 | 
				
			||||||
        result = testdir.runpytest()
 | 
					        result = testdir.runpytest()
 | 
				
			||||||
        assert result.ret == 0
 | 
					        assert result.ret == 0
 | 
				
			||||||
        assert "should not be seen" not in result.stdout.str()
 | 
					        assert "should not be seen" not in result.stdout.str()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_conftest_printing_shows_if_error(self, testdir):
 | 
				
			||||||
 | 
					        testdir.makeconftest("""
 | 
				
			||||||
 | 
					            print ("should be seen")
 | 
				
			||||||
 | 
					            assert 0
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        result = testdir.runpytest()
 | 
				
			||||||
 | 
					        assert result.ret != 0
 | 
				
			||||||
 | 
					        assert "should be seen" in result.stdout.str()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @py.test.mark.skipif("not hasattr(os, 'symlink')")
 | 
					    @py.test.mark.skipif("not hasattr(os, 'symlink')")
 | 
				
			||||||
    def test_chdir(self, testdir):
 | 
					    def test_chdir(self, testdir):
 | 
				
			||||||
        testdir.tmpdir.join("py").mksymlinkto(py._pydir)
 | 
					        testdir.tmpdir.join("py").mksymlinkto(py._pydir)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue