]> granicus.if.org Git - python/commitdiff
Issue #16045: add more unit tests for built-in int()
authorAndrew Svetlov <andrew.svetlov@gmail.com>
Sun, 23 Dec 2012 10:49:33 +0000 (12:49 +0200)
committerAndrew Svetlov <andrew.svetlov@gmail.com>
Sun, 23 Dec 2012 10:49:33 +0000 (12:49 +0200)
Patch by Chris Jerdonek.

Lib/test/test_builtin.py
Lib/test/test_int.py

index 19d7c7068d3c57c4b5cfe8f4d0117404714bb0df..bf005c5e0c5fa4b171d754f8805073d42e2bb855 100644 (file)
@@ -1172,6 +1172,8 @@ class BuiltinTest(unittest.TestCase):
         # Check stdin/stdout error handler is used when invoking GNU readline
         self.check_input_tty("prompté", b"quux\xe9", "ascii")
 
+    # test_int(): see test_int.py for tests of built-in function int().
+
     def test_repr(self):
         self.assertEqual(repr(''), '\'\'')
         self.assertEqual(repr(0), '0')
index 227759f2696a2dd67fe4a13e5dff9c9170d2ef38..e0406dd4f9d819656480969540f9767838785a1f 100644 (file)
@@ -1,7 +1,7 @@
 import sys
 
 import unittest
-from test.support import run_unittest
+from test import support
 
 L = [
         ('0', 0),
@@ -221,6 +221,46 @@ class IntTestCases(unittest.TestCase):
         self.assertEqual(int('2br45qc', 35), 4294967297)
         self.assertEqual(int('1z141z5', 36), 4294967297)
 
+    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)
+
+    # For example, PyPy 1.9.0 raised TypeError for these cases because it
+    # expects x to be a string if base is given.
+    @support.cpython_only
+    def test_base_arg_with_no_x_arg(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)
+        self.assertEquals(int(base='foo'), 0)
+
+    def test_non_numeric_input_types(self):
+        # Test possible non-numeric types for the argument x, including
+        # subclasses of the explicitly documented accepted types.
+        class CustomStr(str): pass
+        class CustomBytes(bytes): pass
+        class CustomByteArray(bytearray): pass
+
+        values = [b'100',
+                  bytearray(b'100'),
+                  CustomStr('100'),
+                  CustomBytes(b'100'),
+                  CustomByteArray(b'100')]
+
+        for x in values:
+            msg = 'x has type %s' % type(x).__name__
+            self.assertEquals(int(x), 100, msg=msg)
+            self.assertEquals(int(x, 2), 4, msg=msg)
+
+    def test_string_float(self):
+        self.assertRaises(ValueError, int, '1.2')
+
     def test_intconversion(self):
         # Test __int__()
         class ClassicMissingMethods:
@@ -328,7 +368,7 @@ class IntTestCases(unittest.TestCase):
                 self.fail("Expected int(%r) to raise a ValueError", s)
 
 def test_main():
-    run_unittest(IntTestCases)
+    support.run_unittest(IntTestCases)
 
 if __name__ == "__main__":
     test_main()