bpo-23867: Argument Clinic: inline parsing code for a single positional parameter. by serhiy-storchaka · Pull Request #9689 · python/cpython (original) (raw)
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py index dafcf004c0..0e40829395 100644 --- a/Lib/test/test_builtin.py +++ b/Lib/test/test_builtin.py @@ -306,6 +306,9 @@ class BuiltinTest(unittest.TestCase): self.assertRaises(ValueError, chr, 0x00110000) self.assertRaises((OverflowError, ValueError), chr, 2**32)
with self.assertRaisesRegex(TypeError, 'integer argument expected, got float'):
chr(1.0)
def test_cmp(self): self.assertTrue(not hasattr(builtins, "cmp"))
diff --git a/Lib/test/test_codecs.py b/Lib/test/test_codecs.py index 00b5d317c4..529ebaf9dd 100644 --- a/Lib/test/test_codecs.py +++ b/Lib/test/test_codecs.py @@ -1758,6 +1758,10 @@ class CodecsModuleTest(unittest.TestCase): self.assertRaises(TypeError, codecs.lookup) self.assertRaises(LookupError, codecs.lookup, "spam") self.assertRaises(LookupError, codecs.lookup, " ")
with self.assertRaisesRegex(TypeError, 'argument must be str, not list'):
codecs.lookup([])
with self.assertRaisesRegex(ValueError, 'embedded null character'):
def test_getencoder(self): self.assertRaises(TypeError, codecs.getencoder)codecs.lookup('abcd\0ef')
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 3b442fe6a4..ae0ec49703 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -109,6 +109,9 @@ class TestCurses(unittest.TestCase): stdscr.addnstr(4,4, '1234', 3) stdscr.addnstr(5,5, '1234', 3, curses.A_BOLD)
with self.assertRaisesRegex(TypeError, 'integer argument expected, got float'):
stdscr.attron(1.0)
stdscr.attron(curses.A_BOLD) stdscr.attroff(curses.A_BOLD) stdscr.attrset(curses.A_BOLD)
@@ -250,6 +253,14 @@ class TestCurses(unittest.TestCase): f.seek(0) curses.getwin(f)
# Make sure type errors in halfdelay are caught
with self.assertRaisesRegex(TypeError, 'integer argument expected, got float'):
curses.halfdelay(1.0)
with self.assertRaisesRegex(OverflowError, 'unsigned byte integer is less than minimum'):
curses.halfdelay(-1)
with self.assertRaisesRegex(OverflowError, 'unsigned byte integer is greater than maximum'):
curses.halfdelay(5000)
curses.halfdelay(1) curses.intrflush(1) curses.meta(1)
@@ -272,6 +283,11 @@ class TestCurses(unittest.TestCase): curses.unctrl('a') curses.ungetch('a') if hasattr(curses, 'use_env'):
# Make sure type errors in use_env are caught
with self.assertRaisesRegex(TypeError, 'integer argument expected, got float'):
curses.use_env(1.0)
with self.assertRaisesRegex(TypeError, r'an integer is required \(got type list\)'):
curses.use_env([]) curses.use_env(1)
Functions only available on a few platforms
@@ -285,6 +301,14 @@ class TestCurses(unittest.TestCase): curses.pair_content(curses.COLOR_PAIRS - 1) curses.pair_number(0)
# Make sure type errors in color_content are caught
with self.assertRaisesRegex(TypeError, 'integer argument expected, got float'):
curses.color_content(1.0)
with self.assertRaisesRegex(OverflowError, 'signed short integer is less than minimum'):
curses.color_content(-100000)
with self.assertRaisesRegex(OverflowError, 'signed short integer is greater than maximum'):
curses.color_content(100000)
if hasattr(curses, 'use_default_colors'): curses.use_default_colors()
@@ -301,6 +325,11 @@ class TestCurses(unittest.TestCase): (availmask, oldmask) = curses.mousemask(curses.BUTTON1_PRESSED) if availmask == 0: self.skipTest('mouse stuff not available') +
# type check arguments to mousemask
with self.assertRaisesRegex(TypeError, 'argument must be int, not float'):
curses.mousemask(1.0)
curses.mouseinterval(10) # just verify these don't cause errors curses.ungetmouse(0, 0, 0, 0, curses.BUTTON1_PRESSED)
diff --git a/Lib/test/test_io.py b/Lib/test/test_io.py index c68b2fea85..97865fade9 100644 --- a/Lib/test/test_io.py +++ b/Lib/test/test_io.py @@ -1312,6 +1312,7 @@ class BufferedReaderTest(unittest.TestCase, CommonBufferedTests): self.assertEqual(bufio.readinto1(b), 6) self.assertEqual(b[:6], b"fghjkl") self.assertEqual(rawio._reads, 4)
def test_readinto_array(self): buffer_size = 60self.assertRaises(TypeError, bufio.readinto1, [])
diff --git a/Lib/test/test_math.py b/Lib/test/test_math.py index 9b2f55e1f4..0730738afc 100644 --- a/Lib/test/test_math.py +++ b/Lib/test/test_math.py @@ -271,6 +271,7 @@ class MathTests(unittest.TestCase):
def testAcos(self):
self.assertRaises(TypeError, math.acos)
self.assertRaises(TypeError, math.acos, 'a') self.ftest('acos(-1)', math.acos(-1), math.pi) self.ftest('acos(0)', math.acos(0), math.pi/2) self.ftest('acos(1)', math.acos(1), 0)
@@ -475,6 +476,8 @@ class MathTests(unittest.TestCase):
def testDegrees(self):
self.assertRaises(TypeError, math.degrees)
with self.assertRaisesRegex(TypeError, 'must be real number, not str'):
math.degrees('a') self.ftest('degrees(pi)', math.degrees(math.pi), 180.0) self.ftest('degrees(pi/2)', math.degrees(math.pi/2), 90.0) self.ftest('degrees(-pi/4)', math.degrees(-math.pi/4), -45.0)
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 6dbc255612..6bb81ab7dd 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -1332,6 +1332,15 @@ class URandomTests(unittest.TestCase): data2 = self.get_urandom_subprocess(16) self.assertNotEqual(data1, data2)
- def test_uranom_typechecking(self):
with self.assertRaisesRegex(TypeError, 'integer argument expected, got float'):
os.urandom(1.0)
with self.assertRaisesRegex(TypeError, 'object cannot be interpreted as an integer'):
os.urandom([])
# This test should be rewritten to reliably overflow ssize_t on any platform
with self.assertRaisesRegex(OverflowError, 'Python int too large to convert to C ssize_t'):
os.urandom(2**128)
@unittest.skipUnless(hasattr(os, 'getrandom'), 'need os.getrandom()') class GetRandomTests(unittest.TestCase): diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index 170778fa97..ee7587e0d8 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -158,6 +158,9 @@ class UnicodeFunctionsTest(UnicodeDatabaseTest): self.assertRaises(TypeError, self.db.bidirectional) self.assertRaises(TypeError, self.db.bidirectional, 'xx')
with self.assertRaisesRegex(TypeError, 'argument must be a unicode character, not list'):
self.db.bidirectional([])
def test_decomposition(self): self.assertEqual(self.db.decomposition('\uFFFE'),'') self.assertEqual(self.db.decomposition('\u00bc'), '<fraction> 0031 2044 0034')