Skip to content

Commit c5c4005

Browse files
committed
Test with extrem values
1 parent d70b3ce commit c5c4005

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

Lib/test/test_msvcrt.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import subprocess
33
import sys
44
import unittest
5+
from contextlib import contextmanager
56
from textwrap import dedent
67

78
from test.support import os_helper, requires_resource, Py_DEBUG
@@ -109,6 +110,18 @@ def test_putwch(self):
109110

110111

111112
class TestOther(unittest.TestCase):
113+
# We can't suppress the msgbox with invalid input without debug build
114+
@unittest.skipUnless(Py_DEBUG, "only available under debug build")
115+
@contextmanager
116+
def set_crt_dbg_report_to_stderr(self):
117+
mode = msvcrt.CrtSetReportMode(msvcrt.CRT_ASSERT, msvcrt.CRTDBG_MODE_FILE)
118+
file = msvcrt.CrtSetReportFile(msvcrt.CRT_ASSERT, msvcrt.CRTDBG_FILE_STDERR)
119+
try:
120+
yield
121+
finally:
122+
msvcrt.CrtSetReportMode(msvcrt.CRT_ASSERT, mode)
123+
msvcrt.CrtSetReportFile(msvcrt.CRT_ASSERT, file)
124+
112125
def test_heap_min(self):
113126
try:
114127
msvcrt.heapmin()
@@ -128,6 +141,10 @@ def test_SetErrorMode(self):
128141
self.assertIs(type(returned), int)
129142
self.assertEqual(old, returned)
130143

144+
msvcrt.SetErrorMode(-1)
145+
msvcrt.SetErrorMode(2**32) # max unsigned int
146+
msvcrt.SetErrorMode(-2**31)
147+
131148
@unittest.skipUnless(Py_DEBUG, "only available under debug build")
132149
def test_set_error_mode(self):
133150
old = msvcrt.set_error_mode(msvcrt.REPORT_ERRMODE)
@@ -141,6 +158,11 @@ def test_set_error_mode(self):
141158
returned = msvcrt.set_error_mode(msvcrt.REPORT_ERRMODE)
142159
self.assertEqual(returned, msvcrt.OUT_TO_STDERR)
143160

161+
with self.set_crt_dbg_report_to_stderr():
162+
self.assertEqual(msvcrt.set_error_mode(-1), -1)
163+
self.assertEqual(msvcrt.set_error_mode(2**31-1), -1)
164+
self.assertEqual(msvcrt.set_error_mode(-2**31), -1)
165+
144166
@unittest.skipUnless(Py_DEBUG, "only available under debug build")
145167
def test_CrtSetReportMode(self):
146168
old = msvcrt.CrtSetReportMode(msvcrt.CRT_WARN,
@@ -157,6 +179,10 @@ def test_CrtSetReportMode(self):
157179
msvcrt.CRTDBG_REPORT_MODE)
158180
self.assertEqual(returned, msvcrt.CRTDBG_MODE_DEBUG)
159181

182+
self.assertRaises(OSError, msvcrt.CrtSetReportMode, -1, -1)
183+
self.assertRaises(OSError, msvcrt.CrtSetReportMode, 2**31-1, 2**31-1)
184+
self.assertRaises(OSError, msvcrt.CrtSetReportMode, -2**31, -2**31)
185+
160186
@unittest.skipUnless(Py_DEBUG, "only available under debug build")
161187
def test_CrtSetReportFile(self):
162188
# Set the report mode to CRTDBG_REPORT_FILE at first.
@@ -176,6 +202,10 @@ def test_CrtSetReportFile(self):
176202
msvcrt.CRTDBG_REPORT_FILE)
177203
self.assertEqual(returned, msvcrt.get_osfhandle(sys.stdout.fileno()))
178204

205+
msvcrt.CrtSetReportFile(-1, -1)
206+
msvcrt.CrtSetReportFile(2**31-1, 2**31-1)
207+
msvcrt.CrtSetReportFile(-2**31, -2**31)
208+
179209

180210
if __name__ == "__main__":
181211
unittest.main()

0 commit comments

Comments
 (0)