diff options
author | Anthony Shaw <anthonyshaw@apache.org> | 2018-03-23 14:18:56 +1100 |
---|---|---|
committer | Anthony Shaw <anthonyshaw@apache.org> | 2018-03-23 14:18:56 +1100 |
commit | a1ff758d0d0fbb1655e85472fe896b3356dac404 (patch) | |
tree | fe95783761b51b1181d183e265db3b5d1edb0fbb /testing | |
parent | 5a53b9aabb296f18b77edabb6b873195c27ebd34 (diff) | |
download | pytest-a1ff758d0d0fbb1655e85472fe896b3356dac404.tar.gz |
"Added acceptance tests for configuration of sys.breakpointhook and resetting back when system default (pdb) is used""
Diffstat (limited to 'testing')
-rw-r--r-- | testing/test_pdb.py | 81 |
1 files changed, 75 insertions, 6 deletions
diff --git a/testing/test_pdb.py b/testing/test_pdb.py index c798be6fc..c31939d7f 100644 --- a/testing/test_pdb.py +++ b/testing/test_pdb.py @@ -4,10 +4,14 @@ import platform import os import _pytest._code -from _pytest.debugging import SUPPORTS_BREAKPOINT_BUILTIN, pytestPDB +from _pytest.debugging import (SUPPORTS_BREAKPOINT_BUILTIN, pytestPDB, + pytest_configure) import pytest +_ENVIRON_PYTHONBREAKPOINT = getattr(os.environ, 'PYTHONBREAKPOINT', '') + + def runpdb_and_get_report(testdir, source): p = testdir.makepyfile(source) result = testdir.runpytest_inprocess("--pdb", p) @@ -452,10 +456,75 @@ class TestDebuggingBreakpoints(object): if sys.version_info.major == 2 and sys.version_info.minor == 7: assert SUPPORTS_BREAKPOINT_BUILTIN is False - @pytest.mark.skipif(sys.version_info < (3,7), reason="Requires python3.7") - def test_sys_breakpointhook(self): + @pytest.mark.skipif(not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin") + def test_sys_breakpointhook_not_custom_pdb(self): + """ + Test that sys.breakpointhook is not set to the custom Pdb class + """ + assert sys.breakpointhook != pytestPDB.set_trace + + + @pytest.mark.skipif(not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin") + def test_sys_breakpointhook_not_custom_pdb(self): + """ + Test that sys.breakpointhook is not set to the custom Pdb class without configuration + """ + assert sys.breakpointhook != pytestPDB.set_trace + + + @pytest.mark.skipif(not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin") + def test_sys_breakpointhook_configure_and_unconfigure(self, testdir): + """ + Test that sys.breakpointhook is set to the custom Pdb class once configured, test that + hook is reset to system value once pytest has been unconfigured + """ + config = testdir.parseconfig() + + pytest_configure(config) + assert sys.breakpointhook == pytestPDB.set_trace + + p1 = testdir.makepyfile(""" + def test_nothing(): + a = 0 + assert a == 0 + """) + result = testdir.runpytest_inprocess("", p1) + assert sys.breakpointhook != pytestPDB.set_trace + + + @pytest.mark.skipif(not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin") + @pytest.mark.skipif(not _ENVIRON_PYTHONBREAKPOINT=='', reason="Requires breakpoint() default value") + def test_sys_breakpoint_interception(self, testdir): + p1 = testdir.makepyfile(""" + def test_1(): + breakpoint() + """) + child = testdir.spawn_pytest(str(p1)) + child.expect("test_1") + child.expect("(Pdb)") + child.sendeof() + rest = child.read().decode("utf8") + assert "1 failed" in rest + assert "reading from stdin while output" not in rest + TestPDB.flush(child) + + + @pytest.mark.skipif(not SUPPORTS_BREAKPOINT_BUILTIN, reason="Requires breakpoint() builtin") + def test_pdb_not_altered(self, testdir): """ - Test that sys.breakpointhook is set to the custom Pdb class + Test that calling PDB set_trace() is not affected + when PYTHONBREAKPOINT=0 """ - if 'PYTHONBREAKPOINT' not in os.environ or os.environ['PYTHONBREAKPOINT'] == '': - assert isinstance(sys.breakpointhook, pytestPDB) + p1 = testdir.makepyfile(""" + import pdb + def test_1(): + pdb.set_trace() + """) + child = testdir.spawn_pytest(str(p1)) + child.expect("test_1") + child.expect("(Pdb)") + child.sendeof() + rest = child.read().decode("utf8") + assert "1 failed" in rest + assert "reading from stdin while output" not in rest + TestPDB.flush(child) |