summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_tcl.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_tcl.py')
-rw-r--r--Lib/test/test_tcl.py94
1 files changed, 93 insertions, 1 deletions
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index 0cc21c9..cf717d8 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -3,6 +3,7 @@
import unittest
import sys
import os
+import _testcapi
from test import support
# Skip this test if the _tkinter module wasn't built.
@@ -14,6 +15,14 @@ support.import_fresh_module('tkinter')
from tkinter import Tcl
from _tkinter import TclError
+tcl_version = _tkinter.TCL_VERSION.split('.')
+try:
+ for i in range(len(tcl_version)):
+ tcl_version[i] = int(tcl_version[i])
+except ValueError:
+ pass
+tcl_version = tuple(tcl_version)
+
class TkinterTest(unittest.TestCase):
@@ -175,9 +184,92 @@ class TclTest(unittest.TestCase):
self.assertEqual(passValue(f), f)
self.assertEqual(passValue((1, '2', (3.4,))), (1, '2', (3.4,)))
+ def test_splitlist(self):
+ splitlist = self.interp.tk.splitlist
+ call = self.interp.tk.call
+ self.assertRaises(TypeError, splitlist)
+ self.assertRaises(TypeError, splitlist, 'a', 'b')
+ self.assertRaises(TypeError, splitlist, 2)
+ testcases = [
+ ('2', ('2',)),
+ ('', ()),
+ ('{}', ('',)),
+ ('""', ('',)),
+ ('a\n b\t\r c\n ', ('a', 'b', 'c')),
+ (b'a\n b\t\r c\n ', ('a', 'b', 'c')),
+ ('a \u20ac', ('a', '\u20ac')),
+ (b'a \xe2\x82\xac', ('a', '\u20ac')),
+ ('a {b c}', ('a', 'b c')),
+ (r'a b\ c', ('a', 'b c')),
+ (('a', 'b c'), ('a', 'b c')),
+ ('a 2', ('a', '2')),
+ (('a', 2), ('a', 2)),
+ ('a 3.4', ('a', '3.4')),
+ (('a', 3.4), ('a', 3.4)),
+ ((), ()),
+ (call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
+ ]
+ if tcl_version >= (8, 5):
+ testcases += [
+ (call('dict', 'create', 1, '\u20ac', b'\xe2\x82\xac', (3.4,)),
+ (1, '\u20ac', '\u20ac', (3.4,))),
+ ]
+ for arg, res in testcases:
+ self.assertEqual(splitlist(arg), res, msg=arg)
+ self.assertRaises(TclError, splitlist, '{')
+
+ def test_split(self):
+ split = self.interp.tk.split
+ call = self.interp.tk.call
+ self.assertRaises(TypeError, split)
+ self.assertRaises(TypeError, split, 'a', 'b')
+ self.assertRaises(TypeError, split, 2)
+ testcases = [
+ ('2', '2'),
+ ('', ''),
+ ('{}', ''),
+ ('""', ''),
+ ('{', '{'),
+ ('a\n b\t\r c\n ', ('a', 'b', 'c')),
+ (b'a\n b\t\r c\n ', ('a', 'b', 'c')),
+ ('a \u20ac', ('a', '\u20ac')),
+ (b'a \xe2\x82\xac', ('a', '\u20ac')),
+ ('a {b c}', ('a', ('b', 'c'))),
+ (r'a b\ c', ('a', ('b', 'c'))),
+ (('a', b'b c'), ('a', ('b', 'c'))),
+ (('a', 'b c'), ('a', ('b', 'c'))),
+ ('a 2', ('a', '2')),
+ (('a', 2), ('a', 2)),
+ ('a 3.4', ('a', '3.4')),
+ (('a', 3.4), ('a', 3.4)),
+ (('a', (2, 3.4)), ('a', (2, 3.4))),
+ ((), ()),
+ (call('list', 1, '2', (3.4,)), (1, '2', (3.4,))),
+ ]
+ if tcl_version >= (8, 5):
+ testcases += [
+ (call('dict', 'create', 12, '\u20ac', b'\xe2\x82\xac', (3.4,)),
+ (12, '\u20ac', '\u20ac', (3.4,))),
+ ]
+ for arg, res in testcases:
+ self.assertEqual(split(arg), res, msg=arg)
+
+
+class BigmemTclTest(unittest.TestCase):
+
+ def setUp(self):
+ self.interp = Tcl()
+
+ @unittest.skipUnless(_testcapi.INT_MAX < _testcapi.PY_SSIZE_T_MAX,
+ "needs UINT_MAX < SIZE_MAX")
+ @support.bigmemtest(size=_testcapi.INT_MAX + 1, memuse=5, dry_run=False)
+ def test_huge_string(self, size):
+ value = ' ' * size
+ self.assertRaises(OverflowError, self.interp.call, 'set', '_', value)
+
def test_main():
- support.run_unittest(TclTest, TkinterTest)
+ support.run_unittest(TclTest, TkinterTest, BigmemTclTest)
if __name__ == "__main__":
test_main()