summaryrefslogtreecommitdiff
path: root/Lib/test/test_ast.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2018-01-04 11:15:39 +0200
committerGitHub <noreply@github.com>2018-01-04 11:15:39 +0200
commitd8ac4d1d5ac256ebf3d8d38c226049abec82a2a0 (patch)
treefd422f2f579ce4c8f2438ffe89b07bc76d48bf49 /Lib/test/test_ast.py
parentfbb490fd2f38bd817d99c20c05121ad0168a38ee (diff)
downloadcpython-git-d8ac4d1d5ac256ebf3d8d38c226049abec82a2a0.tar.gz
bpo-31778: Make ast.literal_eval() more strict. (#4035)
Addition and subtraction of arbitrary numbers no longer allowed.
Diffstat (limited to 'Lib/test/test_ast.py')
-rw-r--r--Lib/test/test_ast.py39
1 files changed, 31 insertions, 8 deletions
diff --git a/Lib/test/test_ast.py b/Lib/test/test_ast.py
index aa53503e3b..67f363ad31 100644
--- a/Lib/test/test_ast.py
+++ b/Lib/test/test_ast.py
@@ -551,14 +551,37 @@ class ASTHelpers_Test(unittest.TestCase):
self.assertEqual(ast.literal_eval('{1, 2, 3}'), {1, 2, 3})
self.assertEqual(ast.literal_eval('b"hi"'), b"hi")
self.assertRaises(ValueError, ast.literal_eval, 'foo()')
+ self.assertEqual(ast.literal_eval('6'), 6)
+ self.assertEqual(ast.literal_eval('+6'), 6)
self.assertEqual(ast.literal_eval('-6'), -6)
- self.assertEqual(ast.literal_eval('-6j+3'), 3-6j)
self.assertEqual(ast.literal_eval('3.25'), 3.25)
-
- def test_literal_eval_issue4907(self):
- self.assertEqual(ast.literal_eval('2j'), 2j)
- self.assertEqual(ast.literal_eval('10 + 2j'), 10 + 2j)
- self.assertEqual(ast.literal_eval('1.5 - 2j'), 1.5 - 2j)
+ self.assertEqual(ast.literal_eval('+3.25'), 3.25)
+ self.assertEqual(ast.literal_eval('-3.25'), -3.25)
+ self.assertEqual(repr(ast.literal_eval('-0.0')), '-0.0')
+ self.assertRaises(ValueError, ast.literal_eval, '++6')
+ self.assertRaises(ValueError, ast.literal_eval, '+True')
+ self.assertRaises(ValueError, ast.literal_eval, '2+3')
+
+ def test_literal_eval_complex(self):
+ # Issue #4907
+ self.assertEqual(ast.literal_eval('6j'), 6j)
+ self.assertEqual(ast.literal_eval('-6j'), -6j)
+ self.assertEqual(ast.literal_eval('6.75j'), 6.75j)
+ self.assertEqual(ast.literal_eval('-6.75j'), -6.75j)
+ self.assertEqual(ast.literal_eval('3+6j'), 3+6j)
+ self.assertEqual(ast.literal_eval('-3+6j'), -3+6j)
+ self.assertEqual(ast.literal_eval('3-6j'), 3-6j)
+ self.assertEqual(ast.literal_eval('-3-6j'), -3-6j)
+ self.assertEqual(ast.literal_eval('3.25+6.75j'), 3.25+6.75j)
+ self.assertEqual(ast.literal_eval('-3.25+6.75j'), -3.25+6.75j)
+ self.assertEqual(ast.literal_eval('3.25-6.75j'), 3.25-6.75j)
+ self.assertEqual(ast.literal_eval('-3.25-6.75j'), -3.25-6.75j)
+ self.assertEqual(ast.literal_eval('(3+6j)'), 3+6j)
+ self.assertRaises(ValueError, ast.literal_eval, '-6j+3')
+ self.assertRaises(ValueError, ast.literal_eval, '-6j+3j')
+ self.assertRaises(ValueError, ast.literal_eval, '3+-6j')
+ self.assertRaises(ValueError, ast.literal_eval, '3+(0+6j)')
+ self.assertRaises(ValueError, ast.literal_eval, '-(3+6j)')
def test_bad_integer(self):
# issue13436: Bad error message with invalid numeric values
@@ -1077,11 +1100,11 @@ class ConstantTests(unittest.TestCase):
ast.copy_location(new_left, binop.left)
binop.left = new_left
- new_right = ast.Constant(value=20)
+ new_right = ast.Constant(value=20j)
ast.copy_location(new_right, binop.right)
binop.right = new_right
- self.assertEqual(ast.literal_eval(binop), 30)
+ self.assertEqual(ast.literal_eval(binop), 10+20j)
def main():