summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_sys.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_sys.py')
-rw-r--r--Lib/test/test_sys.py65
1 files changed, 35 insertions, 30 deletions
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index d81501f..c3e9f9c 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -269,20 +269,29 @@ class SysModuleTest(unittest.TestCase):
finally:
sys.setswitchinterval(orig)
- def test_recursionlimit(self):
+ def test_getrecursionlimit(self):
+ limit = sys.getrecursionlimit()
+ self.assertIsInstance(limit, int)
+ self.assertGreater(limit, 1)
+
self.assertRaises(TypeError, sys.getrecursionlimit, 42)
- oldlimit = sys.getrecursionlimit()
- self.assertRaises(TypeError, sys.setrecursionlimit)
- self.assertRaises(ValueError, sys.setrecursionlimit, -42)
- sys.setrecursionlimit(10000)
- self.assertEqual(sys.getrecursionlimit(), 10000)
- sys.setrecursionlimit(oldlimit)
+
+ def test_setrecursionlimit(self):
+ old_limit = sys.getrecursionlimit()
+ try:
+ sys.setrecursionlimit(10_005)
+ self.assertEqual(sys.getrecursionlimit(), 10_005)
+
+ self.assertRaises(TypeError, sys.setrecursionlimit)
+ self.assertRaises(ValueError, sys.setrecursionlimit, -42)
+ finally:
+ sys.setrecursionlimit(old_limit)
def test_recursionlimit_recovery(self):
if hasattr(sys, 'gettrace') and sys.gettrace():
self.skipTest('fatal error if run with a trace function')
- oldlimit = sys.getrecursionlimit()
+ old_limit = sys.getrecursionlimit()
def f():
f()
try:
@@ -301,35 +310,31 @@ class SysModuleTest(unittest.TestCase):
with self.assertRaises(RecursionError):
f()
finally:
- sys.setrecursionlimit(oldlimit)
+ sys.setrecursionlimit(old_limit)
@test.support.cpython_only
- def test_setrecursionlimit_recursion_depth(self):
+ def test_setrecursionlimit_to_depth(self):
# Issue #25274: Setting a low recursion limit must be blocked if the
# current recursion depth is already higher than limit.
- from _testinternalcapi import get_recursion_depth
-
- def set_recursion_limit_at_depth(depth, limit):
- recursion_depth = get_recursion_depth()
- if recursion_depth >= depth:
- with self.assertRaises(RecursionError) as cm:
- sys.setrecursionlimit(limit)
- self.assertRegex(str(cm.exception),
- "cannot set the recursion limit to [0-9]+ "
- "at the recursion depth [0-9]+: "
- "the limit is too low")
- else:
- set_recursion_limit_at_depth(depth, limit)
-
- oldlimit = sys.getrecursionlimit()
+ old_limit = sys.getrecursionlimit()
try:
- sys.setrecursionlimit(1000)
-
- for limit in (10, 25, 50, 75, 100, 150, 200):
- set_recursion_limit_at_depth(limit, limit)
+ depth = support.get_recursion_depth()
+ with self.subTest(limit=sys.getrecursionlimit(), depth=depth):
+ # depth + 1 is OK
+ sys.setrecursionlimit(depth + 1)
+
+ # reset the limit to be able to call self.assertRaises()
+ # context manager
+ sys.setrecursionlimit(old_limit)
+ with self.assertRaises(RecursionError) as cm:
+ sys.setrecursionlimit(depth)
+ self.assertRegex(str(cm.exception),
+ "cannot set the recursion limit to [0-9]+ "
+ "at the recursion depth [0-9]+: "
+ "the limit is too low")
finally:
- sys.setrecursionlimit(oldlimit)
+ sys.setrecursionlimit(old_limit)
def test_getwindowsversion(self):
# Raise SkipTest if sys doesn't have getwindowsversion attribute