capture: formalize and check allowed state transition in capture classes
There are state transitions start/done/suspend/resume and two additional operations snap/writeorg. Previously it was not well defined in what order they can be called, and which operations are idempotent. Formalize this and enforce using assert checks with informative error messages if they fail (rather than random AttributeErrors).
This commit is contained in:
@@ -878,9 +878,8 @@ class TestFDCapture:
|
||||
cap = capture.FDCapture(fd)
|
||||
data = b"hello"
|
||||
os.write(fd, data)
|
||||
s = cap.snap()
|
||||
pytest.raises(AssertionError, cap.snap)
|
||||
cap.done()
|
||||
assert not s
|
||||
cap = capture.FDCapture(fd)
|
||||
cap.start()
|
||||
os.write(fd, data)
|
||||
@@ -901,7 +900,7 @@ class TestFDCapture:
|
||||
fd = tmpfile.fileno()
|
||||
cap = capture.FDCapture(fd)
|
||||
cap.done()
|
||||
pytest.raises(ValueError, cap.start)
|
||||
pytest.raises(AssertionError, cap.start)
|
||||
|
||||
def test_stderr(self):
|
||||
cap = capture.FDCapture(2)
|
||||
@@ -952,7 +951,7 @@ class TestFDCapture:
|
||||
assert s == "but now yes\n"
|
||||
cap.suspend()
|
||||
cap.done()
|
||||
pytest.raises(AttributeError, cap.suspend)
|
||||
pytest.raises(AssertionError, cap.suspend)
|
||||
|
||||
assert repr(cap) == (
|
||||
"<FDCapture 1 oldfd={} _state='done' tmpfile={!r}>".format(
|
||||
@@ -1154,6 +1153,7 @@ class TestStdCaptureFD(TestStdCapture):
|
||||
with lsof_check():
|
||||
for i in range(10):
|
||||
cap = StdCaptureFD()
|
||||
cap.start_capturing()
|
||||
cap.stop_capturing()
|
||||
|
||||
|
||||
@@ -1175,7 +1175,7 @@ class TestStdCaptureFDinvalidFD:
|
||||
def test_stdout():
|
||||
os.close(1)
|
||||
cap = StdCaptureFD(out=True, err=False, in_=False)
|
||||
assert fnmatch(repr(cap.out), "<FDCapture 1 oldfd=* _state=None tmpfile=*>")
|
||||
assert fnmatch(repr(cap.out), "<FDCapture 1 oldfd=* _state='initialized' tmpfile=*>")
|
||||
cap.start_capturing()
|
||||
os.write(1, b"stdout")
|
||||
assert cap.readouterr() == ("stdout", "")
|
||||
@@ -1184,7 +1184,7 @@ class TestStdCaptureFDinvalidFD:
|
||||
def test_stderr():
|
||||
os.close(2)
|
||||
cap = StdCaptureFD(out=False, err=True, in_=False)
|
||||
assert fnmatch(repr(cap.err), "<FDCapture 2 oldfd=* _state=None tmpfile=*>")
|
||||
assert fnmatch(repr(cap.err), "<FDCapture 2 oldfd=* _state='initialized' tmpfile=*>")
|
||||
cap.start_capturing()
|
||||
os.write(2, b"stderr")
|
||||
assert cap.readouterr() == ("", "stderr")
|
||||
@@ -1193,7 +1193,7 @@ class TestStdCaptureFDinvalidFD:
|
||||
def test_stdin():
|
||||
os.close(0)
|
||||
cap = StdCaptureFD(out=False, err=False, in_=True)
|
||||
assert fnmatch(repr(cap.in_), "<FDCapture 0 oldfd=* _state=None tmpfile=*>")
|
||||
assert fnmatch(repr(cap.in_), "<FDCapture 0 oldfd=* _state='initialized' tmpfile=*>")
|
||||
cap.stop_capturing()
|
||||
"""
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user