summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorAndrew Svetlov <andrew.svetlov@gmail.com>2012-12-23 10:44:04 (GMT)
committerAndrew Svetlov <andrew.svetlov@gmail.com>2012-12-23 10:44:04 (GMT)
commitcddcafaf6b11f4da66fdccba20a777ccb55b800b (patch)
tree37b76d20b2714ffd4fe26a686ac74b40a5f45a06 /Lib
parent8e1e8165a32da4934449df7dffac82c26b6ab101 (diff)
downloadcpython-cddcafaf6b11f4da66fdccba20a777ccb55b800b.zip
cpython-cddcafaf6b11f4da66fdccba20a777ccb55b800b.tar.gz
cpython-cddcafaf6b11f4da66fdccba20a777ccb55b800b.tar.bz2
Issue #16045: add more unit tests for built-in int()
Patch by Chris Jerdonek.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/test/test_builtin.py2
-rw-r--r--Lib/test/test_int.py54
2 files changed, 56 insertions, 0 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index 1d35a6a..d75c44a 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -680,6 +680,8 @@ class BuiltinTest(unittest.TestCase):
# Test input() later, together with raw_input
+ # test_int(): see test_int.py for int() tests.
+
def test_intern(self):
self.assertRaises(TypeError, intern)
# This fails if the test is run twice with a constant string,
diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py
index fa46212..8862701 100644
--- a/Lib/test/test_int.py
+++ b/Lib/test/test_int.py
@@ -1,6 +1,7 @@
import sys
import unittest
+from test import test_support
from test.test_support import run_unittest, have_unicode
import math
@@ -315,6 +316,59 @@ class IntTestCases(unittest.TestCase):
self.assertEqual(int(float(2**54+10)), 2**54+8)
self.assertEqual(int(float(2**54+11)), 2**54+12)
+ def test_no_args(self):
+ self.assertEquals(int(), 0)
+
+ def test_keyword_args(self):
+ # Test invoking int() using keyword arguments.
+ self.assertEquals(int(x=1.2), 1)
+ self.assertEquals(int('100', base=2), 4)
+ self.assertEquals(int(x='100', base=2), 4)
+
+ def test_valid_non_numeric_input_types_for_x(self):
+ # Test possible valid non-numeric types for x, including subclasses
+ # of the allowed built-in types.
+ class CustomStr(str): pass
+ values = ['100', CustomStr('100')]
+
+ if have_unicode:
+ class CustomUnicode(unicode): pass
+ values += [unicode('100'), CustomUnicode(unicode('100'))]
+
+ for x in values:
+ msg = 'x has value %s and type %s' % (x, type(x).__name__)
+ try:
+ self.assertEquals(int(x), 100, msg=msg)
+ self.assertEquals(int(x, 2), 4, msg=msg)
+ except TypeError, err:
+ raise AssertionError('For %s got TypeError: %s' %
+ (type(x).__name__, err))
+
+ def test_error_on_string_float_for_x(self):
+ self.assertRaises(ValueError, int, '1.2')
+
+ def test_error_on_bytearray_for_x(self):
+ self.assertRaises(TypeError, int, bytearray('100'), 2)
+
+ def test_error_on_invalid_int_bases(self):
+ for base in [-1, 1, 1000]:
+ self.assertRaises(ValueError, int, '100', base)
+
+ def test_error_on_string_base(self):
+ self.assertRaises(TypeError, int, 100, base='foo')
+ # Include the following because in contrast CPython raises no error
+ # for bad integer bases when x is not given.
+ self.assertRaises(TypeError, int, base='foo')
+
+ # For example, PyPy 1.9.0 raised TypeError for these cases because it
+ # expects x to be a string if base is given.
+ @test_support.cpython_only
+ def test_int_base_without_x_returns_0(self):
+ self.assertEquals(int(base=6), 0)
+ # Even invalid bases don't raise an exception.
+ self.assertEquals(int(base=1), 0)
+ self.assertEquals(int(base=1000), 0)
+
def test_intconversion(self):
# Test __int__()
class ClassicMissingMethods: