[Python-checkins] cpython: Issue #21337: Add bare-bones Tix test

zach.ware python-checkins at python.org
Mon May 18 03:59:28 CEST 2015


https://hg.python.org/cpython/rev/eeea91d0506b
changeset:   96129:eeea91d0506b
user:        Zachary Ware <zachary.ware at gmail.com>
date:        Sun May 17 20:55:42 2015 -0500
summary:
  Issue #21337: Add bare-bones Tix test

All this does is confirm that Tix is available on Windows, which should
always be the case (if _tkinter itself is available).

files:
  Lib/test/test_tcl.py |  707 +------------------------------
  1 files changed, 18 insertions(+), 689 deletions(-)


diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tix.py
copy from Lib/test/test_tcl.py
copy to Lib/test/test_tix.py
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tix.py
@@ -1,703 +1,32 @@
 import unittest
-import re
+from test import support
 import sys
-import os
-from test import support
 
 # Skip this test if the _tkinter module wasn't built.
 _tkinter = support.import_module('_tkinter')
 
-# Make sure tkinter._fix runs to set up the environment
-tkinter = support.import_fresh_module('tkinter')
+# Skip test if tk cannot be initialized.
+support.requires('gui')
 
-from tkinter import Tcl
-from _tkinter import TclError
+from tkinter import tix, TclError
 
-try:
-    from _testcapi import INT_MAX, PY_SSIZE_T_MAX
-except ImportError:
-    INT_MAX = PY_SSIZE_T_MAX = sys.maxsize
 
-tcl_version = tuple(map(int, _tkinter.TCL_VERSION.split('.')))
-
-_tk_patchlevel = None
-def get_tk_patchlevel():
-    global _tk_patchlevel
-    if _tk_patchlevel is None:
-        tcl = Tcl()
-        patchlevel = tcl.call('info', 'patchlevel')
-        m = re.fullmatch(r'(\d+)\.(\d+)([ab.])(\d+)', patchlevel)
-        major, minor, releaselevel, serial = m.groups()
-        major, minor, serial = int(major), int(minor), int(serial)
-        releaselevel = {'a': 'alpha', 'b': 'beta', '.': 'final'}[releaselevel]
-        if releaselevel == 'final':
-            _tk_patchlevel = major, minor, serial, releaselevel, 0
-        else:
-            _tk_patchlevel = major, minor, 0, releaselevel, serial
-    return _tk_patchlevel
-
-
-class TkinterTest(unittest.TestCase):
-
-    def testFlattenLen(self):
-        # flatten(<object with no length>)
-        self.assertRaises(TypeError, _tkinter._flatten, True)
-
-
-class TclTest(unittest.TestCase):
+class TestTix(unittest.TestCase):
 
     def setUp(self):
-        self.interp = Tcl()
-        self.wantobjects = self.interp.tk.wantobjects()
+        try:
+            self.root = tix.Tk()
+        except TclError:
+            if sys.platform.startswith('win'):
+                self.fail('Tix should always be available on Windows')
+            self.skipTest('Tix not available')
+        else:
+            self.addCleanup(self.root.destroy)
 
-    def testEval(self):
-        tcl = self.interp
-        tcl.eval('set a 1')
-        self.assertEqual(tcl.eval('set a'),'1')
+    def test_tix_available(self):
+        # this test is just here to make setUp run
+        pass
 
-    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')
-
-    def testEvalException2(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.eval,'this is wrong')
-
-    def testCall(self):
-        tcl = self.interp
-        tcl.call('set','a','1')
-        self.assertEqual(tcl.call('set','a'),'1')
-
-    def testCallException(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.call,'set','a')
-
-    def testCallException2(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.call,'this','is','wrong')
-
-    def testSetVar(self):
-        tcl = self.interp
-        tcl.setvar('a','1')
-        self.assertEqual(tcl.eval('set a'),'1')
-
-    def testSetVarArray(self):
-        tcl = self.interp
-        tcl.setvar('a(1)','1')
-        self.assertEqual(tcl.eval('set a(1)'),'1')
-
-    def testGetVar(self):
-        tcl = self.interp
-        tcl.eval('set a 1')
-        self.assertEqual(tcl.getvar('a'),'1')
-
-    def testGetVarArray(self):
-        tcl = self.interp
-        tcl.eval('set a(1) 1')
-        self.assertEqual(tcl.getvar('a(1)'),'1')
-
-    def testGetVarException(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.getvar,'a')
-
-    def testGetVarArrayException(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.getvar,'a(1)')
-
-    def testUnsetVar(self):
-        tcl = self.interp
-        tcl.setvar('a',1)
-        self.assertEqual(tcl.eval('info exists a'),'1')
-        tcl.unsetvar('a')
-        self.assertEqual(tcl.eval('info exists a'),'0')
-
-    def testUnsetVarArray(self):
-        tcl = self.interp
-        tcl.setvar('a(1)',1)
-        tcl.setvar('a(2)',2)
-        self.assertEqual(tcl.eval('info exists a(1)'),'1')
-        self.assertEqual(tcl.eval('info exists a(2)'),'1')
-        tcl.unsetvar('a(1)')
-        self.assertEqual(tcl.eval('info exists a(1)'),'0')
-        self.assertEqual(tcl.eval('info exists a(2)'),'1')
-
-    def testUnsetVarException(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.unsetvar,'a')
-
-    def get_integers(self):
-        integers = (0, 1, -1, 2**31-1, -2**31, 2**31, -2**31-1, 2**63-1, -2**63)
-        # bignum was added in Tcl 8.5, but its support is able only since 8.5.8
-        if (get_tk_patchlevel() >= (8, 6, 0, 'final') or
-            (8, 5, 8) <= get_tk_patchlevel() < (8, 6)):
-            integers += (2**63, -2**63-1, 2**1000, -2**1000)
-        return integers
-
-    def test_getint(self):
-        tcl = self.interp.tk
-        for i in self.get_integers():
-            self.assertEqual(tcl.getint(' %d ' % i), i)
-            if tcl_version >= (8, 5):
-                self.assertEqual(tcl.getint(' %#o ' % i), i)
-            self.assertEqual(tcl.getint((' %#o ' % i).replace('o', '')), i)
-            self.assertEqual(tcl.getint(' %#x ' % i), i)
-        if tcl_version < (8, 5):  # bignum was added in Tcl 8.5
-            self.assertRaises(TclError, tcl.getint, str(2**1000))
-        self.assertEqual(tcl.getint(42), 42)
-        self.assertRaises(TypeError, tcl.getint)
-        self.assertRaises(TypeError, tcl.getint, '42', '10')
-        self.assertRaises(TypeError, tcl.getint, b'42')
-        self.assertRaises(TypeError, tcl.getint, 42.0)
-        self.assertRaises(TclError, tcl.getint, 'a')
-        self.assertRaises((TypeError, ValueError, TclError),
-                          tcl.getint, '42\0')
-        self.assertRaises((UnicodeEncodeError, ValueError, TclError),
-                          tcl.getint, '42\ud800')
-
-    def test_getdouble(self):
-        tcl = self.interp.tk
-        self.assertEqual(tcl.getdouble(' 42 '), 42.0)
-        self.assertEqual(tcl.getdouble(' 42.5 '), 42.5)
-        self.assertEqual(tcl.getdouble(42.5), 42.5)
-        self.assertEqual(tcl.getdouble(42), 42.0)
-        self.assertRaises(TypeError, tcl.getdouble)
-        self.assertRaises(TypeError, tcl.getdouble, '42.5', '10')
-        self.assertRaises(TypeError, tcl.getdouble, b'42.5')
-        self.assertRaises(TclError, tcl.getdouble, 'a')
-        self.assertRaises((TypeError, ValueError, TclError),
-                          tcl.getdouble, '42.5\0')
-        self.assertRaises((UnicodeEncodeError, ValueError, TclError),
-                          tcl.getdouble, '42.5\ud800')
-
-    def test_getboolean(self):
-        tcl = self.interp.tk
-        self.assertIs(tcl.getboolean('on'), True)
-        self.assertIs(tcl.getboolean('1'), True)
-        self.assertIs(tcl.getboolean(42), True)
-        self.assertIs(tcl.getboolean(0), False)
-        self.assertRaises(TypeError, tcl.getboolean)
-        self.assertRaises(TypeError, tcl.getboolean, 'on', '1')
-        self.assertRaises(TypeError, tcl.getboolean, b'on')
-        self.assertRaises(TypeError, tcl.getboolean, 1.0)
-        self.assertRaises(TclError, tcl.getboolean, 'a')
-        self.assertRaises((TypeError, ValueError, TclError),
-                          tcl.getboolean, 'on\0')
-        self.assertRaises((UnicodeEncodeError, ValueError, TclError),
-                          tcl.getboolean, 'on\ud800')
-
-    def testEvalFile(self):
-        tcl = self.interp
-        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"
-        try:
-            os.remove(filename)
-        except Exception as e:
-            pass
-        self.assertRaises(TclError,tcl.evalfile,filename)
-
-    def testPackageRequireException(self):
-        tcl = self.interp
-        self.assertRaises(TclError,tcl.eval,'package require DNE')
-
-    @unittest.skipUnless(sys.platform == 'win32', 'Requires Windows')
-    def testLoadWithUNC(self):
-        # Build a UNC path from the regular path.
-        # Something like
-        #   \\%COMPUTERNAME%\c$\python27\python.exe
-
-        fullname = os.path.abspath(sys.executable)
-        if fullname[1] != ':':
-            raise unittest.SkipTest('Absolute path should have drive part')
-        unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'],
-                                    fullname[0],
-                                    fullname[3:])
-        if not os.path.exists(unc_name):
-            raise unittest.SkipTest('Cannot connect to UNC Path')
-
-        with support.EnvironmentVarGuard() as env:
-            env.unset("TCL_LIBRARY")
-            f = os.popen('%s -c "import tkinter; print(tkinter)"' % (unc_name,))
-
-        self.assertIn('tkinter', f.read())
-        # exit code must be zero
-        self.assertEqual(f.close(), None)
-
-    def test_exprstring(self):
-        tcl = self.interp
-        tcl.call('set', 'a', 3)
-        tcl.call('set', 'b', 6)
-        def check(expr, expected):
-            result = tcl.exprstring(expr)
-            self.assertEqual(result, expected)
-            self.assertIsInstance(result, str)
-
-        self.assertRaises(TypeError, tcl.exprstring)
-        self.assertRaises(TypeError, tcl.exprstring, '8.2', '+6')
-        self.assertRaises(TypeError, tcl.exprstring, b'8.2 + 6')
-        self.assertRaises(TclError, tcl.exprstring, 'spam')
-        check('', '0')
-        check('8.2 + 6', '14.2')
-        check('3.1 + $a', '6.1')
-        check('2 + "$a.$b"', '5.6')
-        check('4*[llength "6 2"]', '8')
-        check('{word one} < "word $a"', '0')
-        check('4*2 < 7', '0')
-        check('hypot($a, 4)', '5.0')
-        check('5 / 4', '1')
-        check('5 / 4.0', '1.25')
-        check('5 / ( [string length "abcd"] + 0.0 )', '1.25')
-        check('20.0/5.0', '4.0')
-        check('"0x03" > "2"', '1')
-        check('[string length "a\xbd\u20ac"]', '3')
-        check(r'[string length "a\xbd\u20ac"]', '3')
-        check('"abc"', 'abc')
-        check('"a\xbd\u20ac"', 'a\xbd\u20ac')
-        check(r'"a\xbd\u20ac"', 'a\xbd\u20ac')
-        check(r'"a\0b"', 'a\x00b')
-        if tcl_version >= (8, 5):  # bignum was added in Tcl 8.5
-            check('2**64', str(2**64))
-
-    def test_exprdouble(self):
-        tcl = self.interp
-        tcl.call('set', 'a', 3)
-        tcl.call('set', 'b', 6)
-        def check(expr, expected):
-            result = tcl.exprdouble(expr)
-            self.assertEqual(result, expected)
-            self.assertIsInstance(result, float)
-
-        self.assertRaises(TypeError, tcl.exprdouble)
-        self.assertRaises(TypeError, tcl.exprdouble, '8.2', '+6')
-        self.assertRaises(TypeError, tcl.exprdouble, b'8.2 + 6')
-        self.assertRaises(TclError, tcl.exprdouble, 'spam')
-        check('', 0.0)
-        check('8.2 + 6', 14.2)
-        check('3.1 + $a', 6.1)
-        check('2 + "$a.$b"', 5.6)
-        check('4*[llength "6 2"]', 8.0)
-        check('{word one} < "word $a"', 0.0)
-        check('4*2 < 7', 0.0)
-        check('hypot($a, 4)', 5.0)
-        check('5 / 4', 1.0)
-        check('5 / 4.0', 1.25)
-        check('5 / ( [string length "abcd"] + 0.0 )', 1.25)
-        check('20.0/5.0', 4.0)
-        check('"0x03" > "2"', 1.0)
-        check('[string length "a\xbd\u20ac"]', 3.0)
-        check(r'[string length "a\xbd\u20ac"]', 3.0)
-        self.assertRaises(TclError, tcl.exprdouble, '"abc"')
-        if tcl_version >= (8, 5):  # bignum was added in Tcl 8.5
-            check('2**64', float(2**64))
-
-    def test_exprlong(self):
-        tcl = self.interp
-        tcl.call('set', 'a', 3)
-        tcl.call('set', 'b', 6)
-        def check(expr, expected):
-            result = tcl.exprlong(expr)
-            self.assertEqual(result, expected)
-            self.assertIsInstance(result, int)
-
-        self.assertRaises(TypeError, tcl.exprlong)
-        self.assertRaises(TypeError, tcl.exprlong, '8.2', '+6')
-        self.assertRaises(TypeError, tcl.exprlong, b'8.2 + 6')
-        self.assertRaises(TclError, tcl.exprlong, 'spam')
-        check('', 0)
-        check('8.2 + 6', 14)
-        check('3.1 + $a', 6)
-        check('2 + "$a.$b"', 5)
-        check('4*[llength "6 2"]', 8)
-        check('{word one} < "word $a"', 0)
-        check('4*2 < 7', 0)
-        check('hypot($a, 4)', 5)
-        check('5 / 4', 1)
-        check('5 / 4.0', 1)
-        check('5 / ( [string length "abcd"] + 0.0 )', 1)
-        check('20.0/5.0', 4)
-        check('"0x03" > "2"', 1)
-        check('[string length "a\xbd\u20ac"]', 3)
-        check(r'[string length "a\xbd\u20ac"]', 3)
-        self.assertRaises(TclError, tcl.exprlong, '"abc"')
-        if tcl_version >= (8, 5):  # bignum was added in Tcl 8.5
-            self.assertRaises(TclError, tcl.exprlong, '2**64')
-
-    def test_exprboolean(self):
-        tcl = self.interp
-        tcl.call('set', 'a', 3)
-        tcl.call('set', 'b', 6)
-        def check(expr, expected):
-            result = tcl.exprboolean(expr)
-            self.assertEqual(result, expected)
-            self.assertIsInstance(result, int)
-            self.assertNotIsInstance(result, bool)
-
-        self.assertRaises(TypeError, tcl.exprboolean)
-        self.assertRaises(TypeError, tcl.exprboolean, '8.2', '+6')
-        self.assertRaises(TypeError, tcl.exprboolean, b'8.2 + 6')
-        self.assertRaises(TclError, tcl.exprboolean, 'spam')
-        check('', False)
-        for value in ('0', 'false', 'no', 'off'):
-            check(value, False)
-            check('"%s"' % value, False)
-            check('{%s}' % value, False)
-        for value in ('1', 'true', 'yes', 'on'):
-            check(value, True)
-            check('"%s"' % value, True)
-            check('{%s}' % value, True)
-        check('8.2 + 6', True)
-        check('3.1 + $a', True)
-        check('2 + "$a.$b"', True)
-        check('4*[llength "6 2"]', True)
-        check('{word one} < "word $a"', False)
-        check('4*2 < 7', False)
-        check('hypot($a, 4)', True)
-        check('5 / 4', True)
-        check('5 / 4.0', True)
-        check('5 / ( [string length "abcd"] + 0.0 )', True)
-        check('20.0/5.0', True)
-        check('"0x03" > "2"', True)
-        check('[string length "a\xbd\u20ac"]', True)
-        check(r'[string length "a\xbd\u20ac"]', True)
-        self.assertRaises(TclError, tcl.exprboolean, '"abc"')
-        if tcl_version >= (8, 5):  # bignum was added in Tcl 8.5
-            check('2**64', True)
-
-    @unittest.skipUnless(tcl_version >= (8, 5), 'requires Tcl version >= 8.5')
-    def test_booleans(self):
-        tcl = self.interp
-        def check(expr, expected):
-            result = tcl.call('expr', expr)
-            if tcl.wantobjects():
-                self.assertEqual(result, expected)
-                self.assertIsInstance(result, int)
-            else:
-                self.assertIn(result, (expr, str(int(expected))))
-                self.assertIsInstance(result, str)
-        check('true', True)
-        check('yes', True)
-        check('on', True)
-        check('false', False)
-        check('no', False)
-        check('off', False)
-        check('1 < 2', True)
-        check('1 > 2', False)
-
-    def test_expr_bignum(self):
-        tcl = self.interp
-        for i in self.get_integers():
-            result = tcl.call('expr', str(i))
-            if self.wantobjects:
-                self.assertEqual(result, i)
-                self.assertIsInstance(result, int)
-            else:
-                self.assertEqual(result, str(i))
-                self.assertIsInstance(result, str)
-        if tcl_version < (8, 5):  # bignum was added in Tcl 8.5
-            self.assertRaises(TclError, tcl.call, 'expr', str(2**1000))
-
-    def test_passing_values(self):
-        def passValue(value):
-            return self.interp.call('set', '_', value)
-
-        self.assertEqual(passValue(True), True if self.wantobjects else '1')
-        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'),
-                         b'str\x00ing' if self.wantobjects else 'str\x00ing')
-        self.assertEqual(passValue(b'str\xc0\x80ing'),
-                         b'str\xc0\x80ing' if self.wantobjects else 'str\xc0\x80ing')
-        self.assertEqual(passValue(b'str\xbding'),
-                         b'str\xbding' if self.wantobjects else 'str\xbding')
-        for i in self.get_integers():
-            self.assertEqual(passValue(i), i if self.wantobjects else str(i))
-        if tcl_version < (8, 5):  # bignum was added in Tcl 8.5
-            self.assertEqual(passValue(2**1000), str(2**1000))
-        for f in (0.0, 1.0, -1.0, 1/3,
-                  sys.float_info.min, sys.float_info.max,
-                  -sys.float_info.min, -sys.float_info.max):
-            if self.wantobjects:
-                self.assertEqual(passValue(f), f)
-            else:
-                self.assertEqual(float(passValue(f)), f)
-        if self.wantobjects:
-            f = passValue(float('nan'))
-            self.assertNotEqual(f, f)
-            self.assertEqual(passValue(float('inf')), float('inf'))
-            self.assertEqual(passValue(-float('inf')), -float('inf'))
-        else:
-            self.assertEqual(float(passValue(float('inf'))), float('inf'))
-            self.assertEqual(float(passValue(-float('inf'))), -float('inf'))
-            # XXX NaN representation can be not parsable by float()
-        self.assertEqual(passValue((1, '2', (3.4,))),
-                         (1, '2', (3.4,)) if self.wantobjects else '1 2 3.4')
-        self.assertEqual(passValue(['a', ['b', 'c']]),
-                         ('a', ('b', 'c')) if self.wantobjects else 'a {b c}')
-
-    def test_user_command(self):
-        result = None
-        def testfunc(arg):
-            nonlocal result
-            result = arg
-            return arg
-        self.interp.createcommand('testfunc', testfunc)
-        self.addCleanup(self.interp.tk.deletecommand, 'testfunc')
-        def check(value, expected=None, *, eq=self.assertEqual):
-            if expected is None:
-                expected = value
-            nonlocal result
-            result = None
-            r = self.interp.call('testfunc', value)
-            self.assertIsInstance(result, str)
-            eq(result, expected)
-            self.assertIsInstance(r, str)
-            eq(r, expected)
-        def float_eq(actual, expected):
-            self.assertAlmostEqual(float(actual), expected,
-                                   delta=abs(expected) * 1e-10)
-
-        check(True, '1')
-        check(False, '0')
-        check('string')
-        check('string\xbd')
-        check('string\u20ac')
-        check('')
-        check(b'string', 'string')
-        check(b'string\xe2\x82\xac', 'string\xe2\x82\xac')
-        check(b'string\xbd', 'string\xbd')
-        check(b'', '')
-        check('str\x00ing')
-        check('str\x00ing\xbd')
-        check('str\x00ing\u20ac')
-        check(b'str\x00ing', 'str\x00ing')
-        check(b'str\xc0\x80ing', 'str\xc0\x80ing')
-        check(b'str\xc0\x80ing\xe2\x82\xac', 'str\xc0\x80ing\xe2\x82\xac')
-        for i in self.get_integers():
-            check(i, str(i))
-        if tcl_version < (8, 5):  # bignum was added in Tcl 8.5
-            check(2**1000, str(2**1000))
-        for f in (0.0, 1.0, -1.0):
-            check(f, repr(f))
-        for f in (1/3.0, sys.float_info.min, sys.float_info.max,
-                  -sys.float_info.min, -sys.float_info.max):
-            check(f, eq=float_eq)
-        check(float('inf'), eq=float_eq)
-        check(-float('inf'), eq=float_eq)
-        # XXX NaN representation can be not parsable by float()
-        check((), '')
-        check((1, (2,), (3, 4), '5 6', ()), '1 2 {3 4} {5 6} {}')
-        check([1, [2,], [3, 4], '5 6', []], '1 2 {3 4} {5 6} {}')
-
-    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')),
-            (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')),
-            ('a 2', ('a', '2')),
-            (('a', 2), ('a', 2)),
-            ('a 3.4', ('a', '3.4')),
-            (('a', 3.4), ('a', 3.4)),
-            ((), ()),
-            ([], ()),
-            (['a', ['b', 'c']], ('a', ['b', 'c'])),
-            (call('list', 1, '2', (3.4,)),
-                (1, '2', (3.4,)) if self.wantobjects else
-                ('1', '2', '3.4')),
-        ]
-        tk_patchlevel = get_tk_patchlevel()
-        if tcl_version >= (8, 5):
-            if not self.wantobjects or tk_patchlevel < (8, 5, 5):
-                # Before 8.5.5 dicts were converted to lists through string
-                expected = ('12', '\u20ac', '\xe2\x82\xac', '3.4')
-            else:
-                expected = (12, '\u20ac', b'\xe2\x82\xac', (3.4,))
-            testcases += [
-                (call('dict', 'create', 12, '\u20ac', b'\xe2\x82\xac', (3.4,)),
-                    expected),
-            ]
-        dbg_info = ('want objects? %s, Tcl version: %s, Tk patchlevel: %s'
-                    % (self.wantobjects, tcl_version, tk_patchlevel))
-        for arg, res in testcases:
-            self.assertEqual(splitlist(arg), res,
-                             'arg=%a, %s' % (arg, dbg_info))
-        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')),
-            (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'))),
-            (('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))),
-            ((), ()),
-            ([], ()),
-            (['a', 'b c'], ('a', ('b', 'c'))),
-            (['a', ['b', 'c']], ('a', ('b', 'c'))),
-            (call('list', 1, '2', (3.4,)),
-                (1, '2', (3.4,)) if self.wantobjects else
-                ('1', '2', '3.4')),
-        ]
-        if tcl_version >= (8, 5):
-            if not self.wantobjects or get_tk_patchlevel() < (8, 5, 5):
-                # Before 8.5.5 dicts were converted to lists through string
-                expected = ('12', '\u20ac', '\xe2\x82\xac', '3.4')
-            else:
-                expected = (12, '\u20ac', b'\xe2\x82\xac', (3.4,))
-            testcases += [
-                (call('dict', 'create', 12, '\u20ac', b'\xe2\x82\xac', (3.4,)),
-                    expected),
-            ]
-        for arg, res in testcases:
-            self.assertEqual(split(arg), res, msg=arg)
-
-    def test_splitdict(self):
-        splitdict = tkinter._splitdict
-        tcl = self.interp.tk
-
-        arg = '-a {1 2 3} -something foo status {}'
-        self.assertEqual(splitdict(tcl, arg, False),
-            {'-a': '1 2 3', '-something': 'foo', 'status': ''})
-        self.assertEqual(splitdict(tcl, arg),
-            {'a': '1 2 3', 'something': 'foo', 'status': ''})
-
-        arg = ('-a', (1, 2, 3), '-something', 'foo', 'status', '{}')
-        self.assertEqual(splitdict(tcl, arg, False),
-            {'-a': (1, 2, 3), '-something': 'foo', 'status': '{}'})
-        self.assertEqual(splitdict(tcl, arg),
-            {'a': (1, 2, 3), 'something': 'foo', 'status': '{}'})
-
-        self.assertRaises(RuntimeError, splitdict, tcl, '-a b -c ')
-        self.assertRaises(RuntimeError, splitdict, tcl, ('-a', 'b', '-c'))
-
-        arg = tcl.call('list',
-                        '-a', (1, 2, 3), '-something', 'foo', 'status', ())
-        self.assertEqual(splitdict(tcl, arg),
-            {'a': (1, 2, 3) if self.wantobjects else '1 2 3',
-             'something': 'foo', 'status': ''})
-
-        if tcl_version >= (8, 5):
-            arg = tcl.call('dict', 'create',
-                           '-a', (1, 2, 3), '-something', 'foo', 'status', ())
-            if not self.wantobjects or get_tk_patchlevel() < (8, 5, 5):
-                # Before 8.5.5 dicts were converted to lists through string
-                expected = {'a': '1 2 3', 'something': 'foo', 'status': ''}
-            else:
-                expected = {'a': (1, 2, 3), 'something': 'foo', 'status': ''}
-            self.assertEqual(splitdict(tcl, arg), expected)
-
-
-class BigmemTclTest(unittest.TestCase):
-
-    def setUp(self):
-        self.interp = Tcl()
-
-    @support.cpython_only
-    @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, "needs UINT_MAX < SIZE_MAX")
-    @support.bigmemtest(size=INT_MAX + 1, memuse=5, dry_run=False)
-    def test_huge_string_call(self, size):
-        value = ' ' * size
-        self.assertRaises(OverflowError, self.interp.call, 'set', '_', value)
-
-    @support.cpython_only
-    @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, "needs UINT_MAX < SIZE_MAX")
-    @support.bigmemtest(size=INT_MAX + 1, memuse=9, dry_run=False)
-    def test_huge_string_builtins(self, size):
-        value = '1' + ' ' * size
-        self.assertRaises(OverflowError, self.interp.tk.getint, value)
-        self.assertRaises(OverflowError, self.interp.tk.getdouble, value)
-        self.assertRaises(OverflowError, self.interp.tk.getboolean, value)
-        self.assertRaises(OverflowError, self.interp.eval, value)
-        self.assertRaises(OverflowError, self.interp.evalfile, value)
-        self.assertRaises(OverflowError, self.interp.record, value)
-        self.assertRaises(OverflowError, self.interp.adderrorinfo, value)
-        self.assertRaises(OverflowError, self.interp.setvar, value, 'x', 'a')
-        self.assertRaises(OverflowError, self.interp.setvar, 'x', value, 'a')
-        self.assertRaises(OverflowError, self.interp.unsetvar, value)
-        self.assertRaises(OverflowError, self.interp.unsetvar, 'x', value)
-        self.assertRaises(OverflowError, self.interp.adderrorinfo, value)
-        self.assertRaises(OverflowError, self.interp.exprstring, value)
-        self.assertRaises(OverflowError, self.interp.exprlong, value)
-        self.assertRaises(OverflowError, self.interp.exprboolean, value)
-        self.assertRaises(OverflowError, self.interp.splitlist, value)
-        self.assertRaises(OverflowError, self.interp.split, value)
-        self.assertRaises(OverflowError, self.interp.createcommand, value, max)
-        self.assertRaises(OverflowError, self.interp.deletecommand, value)
-
-
-def setUpModule():
-    if support.verbose:
-        tcl = Tcl()
-        print('patchlevel =', tcl.call('info', 'patchlevel'))
-
-
-def test_main():
-    support.run_unittest(TclTest, TkinterTest, BigmemTclTest)
-
-if __name__ == "__main__":
-    test_main()
+if __name__ == '__main__':
+    unittest.main()

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list