60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
"""
 | 
						|
'capsys' and 'capfd' funcargs for capturing stdout/stderror either
 | 
						|
by intercepting sys.stdout/stderr or File Descriptors 1/2. 
 | 
						|
 | 
						|
Calling the reset() method of the capture funcargs gives 
 | 
						|
a out/err tuple of strings representing the captured streams. 
 | 
						|
You can call reset() multiple times each time getting
 | 
						|
the chunk of output that was captured between the invocations. 
 | 
						|
 | 
						|
"""
 | 
						|
import py
 | 
						|
 | 
						|
def pytest_funcarg__capsys(request):
 | 
						|
    """ capture writes to sys.stdout/sys.stderr. """ 
 | 
						|
    capture = Capture(py.io.StdCapture)
 | 
						|
    request.addfinalizer(capture.finalize)
 | 
						|
    return capture 
 | 
						|
 | 
						|
def pytest_funcarg__capfd(request):
 | 
						|
    """ capture writes to filedescriptors 1 and 2"""
 | 
						|
    capture = Capture(py.io.StdCaptureFD)
 | 
						|
    request.addfinalizer(capture.finalize)
 | 
						|
    return capture 
 | 
						|
 | 
						|
class Capture:
 | 
						|
    def __init__(self, captureclass):
 | 
						|
        self._captureclass = captureclass
 | 
						|
        self._capture = self._captureclass()
 | 
						|
 | 
						|
    def finalize(self):
 | 
						|
        self._capture.reset()
 | 
						|
 | 
						|
    def reset(self):
 | 
						|
        res = self._capture.reset()
 | 
						|
        self._capture = self._captureclass()
 | 
						|
        return res 
 | 
						|
 | 
						|
def test_generic(plugintester):
 | 
						|
    plugintester.hookcheck()
 | 
						|
 | 
						|
class TestCapture:
 | 
						|
    def test_std_functional(self, testdir):        
 | 
						|
        reprec = testdir.inline_runsource("""
 | 
						|
            def test_hello(capsys):
 | 
						|
                print 42
 | 
						|
                out, err = capsys.reset()
 | 
						|
                assert out.startswith("42")
 | 
						|
        """)
 | 
						|
        reprec.assertoutcome(passed=1)
 | 
						|
        
 | 
						|
    def test_stdfd_functional(self, testdir):        
 | 
						|
        reprec = testdir.inline_runsource("""
 | 
						|
            def test_hello(capfd):
 | 
						|
                import os
 | 
						|
                os.write(1, "42")
 | 
						|
                out, err = capfd.reset()
 | 
						|
                assert out.startswith("42")
 | 
						|
        """)
 | 
						|
        reprec.assertoutcome(passed=1)
 |