mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-28 18:59:04 +08:00
Update test_int.py to CPython 3.10.2
This commit is contained in:
1 parent
21c4ea5544
commit
64ef4916ec
1 file changed
+58
-9
Vendored
+58
-9
@@ -340,8 +340,6 @@ class IntTestCases(unittest.TestCase):
|
||||
def test_string_float(self):
|
||||
self.assertRaises(ValueError, int, '1.2')
|
||||
|
||||
# TODO: RUSTPYTHON
|
||||
@unittest.expectedFailure
|
||||
def test_intconversion(self):
|
||||
# Test __int__()
|
||||
class ClassicMissingMethods:
|
||||
@@ -380,15 +378,23 @@ class IntTestCases(unittest.TestCase):
|
||||
int(ExceptionalTrunc())
|
||||
|
||||
for trunc_result_base in (object, Classic):
|
||||
class Integral(trunc_result_base):
|
||||
def __int__(self):
|
||||
class Index(trunc_result_base):
|
||||
def __index__(self):
|
||||
return 42
|
||||
|
||||
class TruncReturnsNonInt(base):
|
||||
def __trunc__(self):
|
||||
return Integral()
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
self.assertEqual(int(TruncReturnsNonInt()), 42)
|
||||
return Index()
|
||||
self.assertEqual(int(TruncReturnsNonInt()), 42)
|
||||
|
||||
class Intable(trunc_result_base):
|
||||
def __int__(self):
|
||||
return 42
|
||||
|
||||
class TruncReturnsNonIndex(base):
|
||||
def __trunc__(self):
|
||||
return Intable()
|
||||
self.assertEqual(int(TruncReturnsNonInt()), 42)
|
||||
|
||||
class NonIntegral(trunc_result_base):
|
||||
def __trunc__(self):
|
||||
@@ -420,6 +426,21 @@ class IntTestCases(unittest.TestCase):
|
||||
with self.assertRaises(TypeError):
|
||||
int(TruncReturnsBadInt())
|
||||
|
||||
def test_int_subclass_with_index(self):
|
||||
class MyIndex(int):
|
||||
def __index__(self):
|
||||
return 42
|
||||
|
||||
class BadIndex(int):
|
||||
def __index__(self):
|
||||
return 42.0
|
||||
|
||||
my_int = MyIndex(7)
|
||||
self.assertEqual(my_int, 7)
|
||||
self.assertEqual(int(my_int), 7)
|
||||
|
||||
self.assertEqual(int(BadIndex()), 0)
|
||||
|
||||
def test_int_subclass_with_int(self):
|
||||
class MyInt(int):
|
||||
def __int__(self):
|
||||
@@ -433,11 +454,21 @@ class IntTestCases(unittest.TestCase):
|
||||
self.assertEqual(my_int, 7)
|
||||
self.assertEqual(int(my_int), 42)
|
||||
|
||||
self.assertRaises(TypeError, int, BadInt())
|
||||
my_int = BadInt(7)
|
||||
self.assertEqual(my_int, 7)
|
||||
self.assertRaises(TypeError, int, my_int)
|
||||
|
||||
# TODO: RUSTPYTHON
|
||||
@unittest.expectedFailure
|
||||
def test_int_returns_int_subclass(self):
|
||||
class BadIndex:
|
||||
def __index__(self):
|
||||
return True
|
||||
|
||||
class BadIndex2(int):
|
||||
def __index__(self):
|
||||
return True
|
||||
|
||||
class BadInt:
|
||||
def __int__(self):
|
||||
return True
|
||||
@@ -446,6 +477,10 @@ class IntTestCases(unittest.TestCase):
|
||||
def __int__(self):
|
||||
return True
|
||||
|
||||
class TruncReturnsBadIndex:
|
||||
def __trunc__(self):
|
||||
return BadIndex()
|
||||
|
||||
class TruncReturnsBadInt:
|
||||
def __trunc__(self):
|
||||
return BadInt()
|
||||
@@ -454,6 +489,17 @@ class IntTestCases(unittest.TestCase):
|
||||
def __trunc__(self):
|
||||
return True
|
||||
|
||||
bad_int = BadIndex()
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
n = int(bad_int)
|
||||
self.assertEqual(n, 1)
|
||||
self.assertIs(type(n), int)
|
||||
|
||||
bad_int = BadIndex2()
|
||||
n = int(bad_int)
|
||||
self.assertEqual(n, 0)
|
||||
self.assertIs(type(n), int)
|
||||
|
||||
bad_int = BadInt()
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
n = int(bad_int)
|
||||
@@ -466,12 +512,15 @@ class IntTestCases(unittest.TestCase):
|
||||
self.assertEqual(n, 1)
|
||||
self.assertIs(type(n), int)
|
||||
|
||||
bad_int = TruncReturnsBadInt()
|
||||
bad_int = TruncReturnsBadIndex()
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
n = int(bad_int)
|
||||
self.assertEqual(n, 1)
|
||||
self.assertIs(type(n), int)
|
||||
|
||||
bad_int = TruncReturnsBadInt()
|
||||
self.assertRaises(TypeError, int, bad_int)
|
||||
|
||||
good_int = TruncReturnsIntSubclass()
|
||||
n = int(good_int)
|
||||
self.assertEqual(n, 1)
|
||||
|
||||
Reference in new issue
Block a user