mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
Issue #20368: The null character now correctly passed from Tcl to Python.
Improved error handling in variables-related commands.
This commit is contained in:
commit
ce591c2868
4 changed files with 175 additions and 78 deletions
|
@ -55,6 +55,10 @@ class TclTest(unittest.TestCase):
|
|||
tcl.eval('set a 1')
|
||||
self.assertEqual(tcl.eval('set a'),'1')
|
||||
|
||||
def test_eval_null_in_result(self):
|
||||
tcl = self.interp
|
||||
self.assertEqual(tcl.eval('set a "a\\0b"'), 'a\x00b')
|
||||
|
||||
def testEvalException(self):
|
||||
tcl = self.interp
|
||||
self.assertRaises(TclError,tcl.eval,'set a')
|
||||
|
@ -127,20 +131,29 @@ class TclTest(unittest.TestCase):
|
|||
|
||||
def testEvalFile(self):
|
||||
tcl = self.interp
|
||||
filename = "testEvalFile.tcl"
|
||||
fd = open(filename,'w')
|
||||
script = """set a 1
|
||||
set b 2
|
||||
set c [ expr $a + $b ]
|
||||
"""
|
||||
fd.write(script)
|
||||
fd.close()
|
||||
tcl.evalfile(filename)
|
||||
os.remove(filename)
|
||||
with open(support.TESTFN, 'w') as f:
|
||||
self.addCleanup(support.unlink, support.TESTFN)
|
||||
f.write("""set a 1
|
||||
set b 2
|
||||
set c [ expr $a + $b ]
|
||||
""")
|
||||
tcl.evalfile(support.TESTFN)
|
||||
self.assertEqual(tcl.eval('set a'),'1')
|
||||
self.assertEqual(tcl.eval('set b'),'2')
|
||||
self.assertEqual(tcl.eval('set c'),'3')
|
||||
|
||||
def test_evalfile_null_in_result(self):
|
||||
tcl = self.interp
|
||||
with open(support.TESTFN, 'w') as f:
|
||||
self.addCleanup(support.unlink, support.TESTFN)
|
||||
f.write("""
|
||||
set a "a\0b"
|
||||
set b "a\\0b"
|
||||
""")
|
||||
tcl.evalfile(support.TESTFN)
|
||||
self.assertEqual(tcl.eval('set a'), 'a\x00b')
|
||||
self.assertEqual(tcl.eval('set b'), 'a\x00b')
|
||||
|
||||
def testEvalFileException(self):
|
||||
tcl = self.interp
|
||||
filename = "doesnotexists"
|
||||
|
@ -209,6 +222,7 @@ class TclTest(unittest.TestCase):
|
|||
check('"abc"', 'abc')
|
||||
check('"a\xbd\u20ac"', 'a\xbd\u20ac')
|
||||
check(r'"a\xbd\u20ac"', 'a\xbd\u20ac')
|
||||
check(r'"a\0b"', 'a\x00b')
|
||||
|
||||
def test_exprdouble(self):
|
||||
tcl = self.interp
|
||||
|
@ -320,6 +334,11 @@ class TclTest(unittest.TestCase):
|
|||
self.assertEqual(passValue(False), False if self.wantobjects else '0')
|
||||
self.assertEqual(passValue('string'), 'string')
|
||||
self.assertEqual(passValue('string\u20ac'), 'string\u20ac')
|
||||
self.assertEqual(passValue('str\x00ing'), 'str\x00ing')
|
||||
self.assertEqual(passValue('str\x00ing\xbd'), 'str\x00ing\xbd')
|
||||
self.assertEqual(passValue('str\x00ing\u20ac'), 'str\x00ing\u20ac')
|
||||
self.assertEqual(passValue(b'str\x00ing'), 'str\x00ing')
|
||||
self.assertEqual(passValue(b'str\xc0\x80ing'), 'str\x00ing')
|
||||
for i in (0, 1, -1, 2**31-1, -2**31):
|
||||
self.assertEqual(passValue(i), i if self.wantobjects else str(i))
|
||||
for f in (0.0, 1.0, -1.0, 1/3,
|
||||
|
@ -368,6 +387,13 @@ class TclTest(unittest.TestCase):
|
|||
check('string', 'string')
|
||||
check('string\xbd', 'string\xbd')
|
||||
check('string\u20ac', 'string\u20ac')
|
||||
check(b'string', 'string')
|
||||
check(b'string\xe2\x82\xac', 'string\u20ac')
|
||||
check('str\x00ing', 'str\x00ing')
|
||||
check('str\x00ing\xbd', 'str\x00ing\xbd')
|
||||
check('str\x00ing\u20ac', 'str\x00ing\u20ac')
|
||||
check(b'str\xc0\x80ing', 'str\x00ing')
|
||||
check(b'str\xc0\x80ing\xe2\x82\xac', 'str\x00ing\u20ac')
|
||||
for i in (0, 1, -1, 2**31-1, -2**31):
|
||||
check(i, str(i))
|
||||
for f in (0.0, 1.0, -1.0):
|
||||
|
@ -396,6 +422,7 @@ class TclTest(unittest.TestCase):
|
|||
(b'a\n b\t\r c\n ', ('a', 'b', 'c')),
|
||||
('a \u20ac', ('a', '\u20ac')),
|
||||
(b'a \xe2\x82\xac', ('a', '\u20ac')),
|
||||
(b'a\xc0\x80b c\xc0\x80d', ('a\x00b', 'c\x00d')),
|
||||
('a {b c}', ('a', 'b c')),
|
||||
(r'a b\ c', ('a', 'b c')),
|
||||
(('a', 'b c'), ('a', 'b c')),
|
||||
|
@ -438,6 +465,9 @@ class TclTest(unittest.TestCase):
|
|||
(b'a\n b\t\r c\n ', ('a', 'b', 'c')),
|
||||
('a \u20ac', ('a', '\u20ac')),
|
||||
(b'a \xe2\x82\xac', ('a', '\u20ac')),
|
||||
(b'a\xc0\x80b', 'a\x00b'),
|
||||
(b'a\xc0\x80b c\xc0\x80d', ('a\x00b', 'c\x00d')),
|
||||
(b'{a\xc0\x80b c\xc0\x80d', '{a\x00b c\x00d'),
|
||||
('a {b c}', ('a', ('b', 'c'))),
|
||||
(r'a b\ c', ('a', ('b', 'c'))),
|
||||
(('a', b'b c'), ('a', ('b', 'c'))),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue