blob: 8f262d01ab890176804bfc4b9ba40597391485a7 [file] [log] [blame]
David Aschere2b4b322004-02-18 05:59:53 +00001import unittest
Serhiy Storchaka4a880412013-02-07 15:37:53 +02002import sys
David Aschere2b4b322004-02-18 05:59:53 +00003import os
Serhiy Storchaka42035702013-08-21 21:46:12 +03004import _testcapi
Neal Norwitz63dfece2004-02-19 02:37:29 +00005from test import test_support
Ezio Melotti794e5572013-05-07 09:34:49 +03006from subprocess import Popen, PIPE
R. David Murray597ebab2009-03-31 18:32:17 +00007
8# Skip this test if the _tkinter module wasn't built.
9_tkinter = test_support.import_module('_tkinter')
10
Guilherme Polo8e5e4382009-02-07 02:20:29 +000011from Tkinter import Tcl
David Aschere2b4b322004-02-18 05:59:53 +000012from _tkinter import TclError
13
Serhiy Storchaka94025332013-09-08 20:32:56 +030014tcl_version = _tkinter.TCL_VERSION.split('.')
15try:
16 for i in range(len(tcl_version)):
17 tcl_version[i] = int(tcl_version[i])
18except ValueError:
19 pass
20tcl_version = tuple(tcl_version)
21
Serhiy Storchaka15b67d72014-02-02 23:04:06 +020022_tk_patchlevel = None
23def get_tk_patchlevel():
24 global _tk_patchlevel
25 if _tk_patchlevel is None:
26 tcl = Tcl()
27 patchlevel = []
28 for x in tcl.call('info', 'patchlevel').split('.'):
29 try:
30 x = int(x, 10)
31 except ValueError:
32 x = -1
33 patchlevel.append(x)
34 _tk_patchlevel = tuple(patchlevel)
35 return _tk_patchlevel
36
Benjamin Petersonb3619be2009-01-30 02:24:39 +000037
38class TkinterTest(unittest.TestCase):
39
40 def testFlattenLen(self):
41 # flatten(<object with no length>)
42 self.assertRaises(TypeError, _tkinter._flatten, True)
43
44
David Aschere2b4b322004-02-18 05:59:53 +000045class TclTest(unittest.TestCase):
46
47 def setUp(self):
48 self.interp = Tcl()
Serhiy Storchaka5542b152013-12-25 17:28:50 +020049 self.wantobjects = self.interp.tk.wantobjects()
David Aschere2b4b322004-02-18 05:59:53 +000050
51 def testEval(self):
52 tcl = self.interp
53 tcl.eval('set a 1')
54 self.assertEqual(tcl.eval('set a'),'1')
55
56 def testEvalException(self):
57 tcl = self.interp
58 self.assertRaises(TclError,tcl.eval,'set a')
59
60 def testEvalException2(self):
61 tcl = self.interp
62 self.assertRaises(TclError,tcl.eval,'this is wrong')
63
64 def testCall(self):
65 tcl = self.interp
66 tcl.call('set','a','1')
67 self.assertEqual(tcl.call('set','a'),'1')
68
69 def testCallException(self):
70 tcl = self.interp
71 self.assertRaises(TclError,tcl.call,'set','a')
72
73 def testCallException2(self):
74 tcl = self.interp
75 self.assertRaises(TclError,tcl.call,'this','is','wrong')
76
77 def testSetVar(self):
78 tcl = self.interp
79 tcl.setvar('a','1')
80 self.assertEqual(tcl.eval('set a'),'1')
81
82 def testSetVarArray(self):
83 tcl = self.interp
84 tcl.setvar('a(1)','1')
85 self.assertEqual(tcl.eval('set a(1)'),'1')
86
87 def testGetVar(self):
88 tcl = self.interp
89 tcl.eval('set a 1')
90 self.assertEqual(tcl.getvar('a'),'1')
91
92 def testGetVarArray(self):
93 tcl = self.interp
94 tcl.eval('set a(1) 1')
95 self.assertEqual(tcl.getvar('a(1)'),'1')
96
97 def testGetVarException(self):
98 tcl = self.interp
99 self.assertRaises(TclError,tcl.getvar,'a')
100
101 def testGetVarArrayException(self):
102 tcl = self.interp
103 self.assertRaises(TclError,tcl.getvar,'a(1)')
104
105 def testUnsetVar(self):
106 tcl = self.interp
107 tcl.setvar('a',1)
108 self.assertEqual(tcl.eval('info exists a'),'1')
109 tcl.unsetvar('a')
110 self.assertEqual(tcl.eval('info exists a'),'0')
111
112 def testUnsetVarArray(self):
113 tcl = self.interp
114 tcl.setvar('a(1)',1)
115 tcl.setvar('a(2)',2)
116 self.assertEqual(tcl.eval('info exists a(1)'),'1')
117 self.assertEqual(tcl.eval('info exists a(2)'),'1')
118 tcl.unsetvar('a(1)')
119 self.assertEqual(tcl.eval('info exists a(1)'),'0')
120 self.assertEqual(tcl.eval('info exists a(2)'),'1')
121
122 def testUnsetVarException(self):
123 tcl = self.interp
124 self.assertRaises(TclError,tcl.unsetvar,'a')
Tim Peters27f88362004-07-08 04:22:35 +0000125
David Aschere2b4b322004-02-18 05:59:53 +0000126 def testEvalFile(self):
127 tcl = self.interp
128 filename = "testEvalFile.tcl"
129 fd = open(filename,'w')
130 script = """set a 1
131 set b 2
132 set c [ expr $a + $b ]
133 """
134 fd.write(script)
135 fd.close()
136 tcl.evalfile(filename)
Neal Norwitz9a8d55e2004-02-29 15:37:50 +0000137 os.remove(filename)
David Aschere2b4b322004-02-18 05:59:53 +0000138 self.assertEqual(tcl.eval('set a'),'1')
139 self.assertEqual(tcl.eval('set b'),'2')
140 self.assertEqual(tcl.eval('set c'),'3')
141
142 def testEvalFileException(self):
143 tcl = self.interp
144 filename = "doesnotexists"
145 try:
146 os.remove(filename)
147 except Exception,e:
148 pass
149 self.assertRaises(TclError,tcl.evalfile,filename)
150
David Aschere2b4b322004-02-18 05:59:53 +0000151 def testPackageRequireException(self):
152 tcl = self.interp
153 self.assertRaises(TclError,tcl.eval,'package require DNE')
154
Zachary Ware57d35c62013-11-03 22:51:25 -0600155 @unittest.skipUnless(sys.platform == 'win32', "only applies to Windows")
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000156 def testLoadWithUNC(self):
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000157 # Build a UNC path from the regular path.
158 # Something like
159 # \\%COMPUTERNAME%\c$\python27\python.exe
160
161 fullname = os.path.abspath(sys.executable)
162 if fullname[1] != ':':
Zachary Ware57d35c62013-11-03 22:51:25 -0600163 self.skipTest('unusable path: %r' % fullname)
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000164 unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'],
165 fullname[0],
166 fullname[3:])
167
168 with test_support.EnvironmentVarGuard() as env:
169 env.unset("TCL_LIBRARY")
Ezio Melotti794e5572013-05-07 09:34:49 +0300170 cmd = '%s -c "import Tkinter; print Tkinter"' % (unc_name,)
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000171
Zachary Ware57d35c62013-11-03 22:51:25 -0600172 try:
173 p = Popen(cmd, stdout=PIPE, stderr=PIPE)
174 except WindowsError as e:
175 if e.winerror == 5:
176 self.skipTest('Not permitted to start the child process')
177 else:
178 raise
179
Ezio Melotti794e5572013-05-07 09:34:49 +0300180 out_data, err_data = p.communicate()
181
182 msg = '\n\n'.join(['"Tkinter.py" not in output',
183 'Command:', cmd,
184 'stdout:', out_data,
185 'stderr:', err_data])
186
187 self.assertIn('Tkinter.py', out_data, msg)
188
189 self.assertEqual(p.wait(), 0, 'Non-zero exit code')
190
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000191
Serhiy Storchakad2eff232014-02-03 20:41:04 +0200192 def test_exprstring(self):
193 tcl = self.interp
194 tcl.call('set', 'a', 3)
195 tcl.call('set', 'b', 6)
196 def check(expr, expected):
197 result = tcl.exprstring(expr)
198 self.assertEqual(result, expected)
199 self.assertIsInstance(result, str)
200
201 self.assertRaises(TypeError, tcl.exprstring)
202 self.assertRaises(TypeError, tcl.exprstring, '8.2', '+6')
203 self.assertRaises(TclError, tcl.exprstring, 'spam')
204 check('', '0')
205 check('8.2 + 6', '14.2')
206 check('2**64', str(2**64))
207 check('3.1 + $a', '6.1')
208 check('2 + "$a.$b"', '5.6')
209 check('4*[llength "6 2"]', '8')
210 check('{word one} < "word $a"', '0')
211 check('4*2 < 7', '0')
212 check('hypot($a, 4)', '5.0')
213 check('5 / 4', '1')
214 check('5 / 4.0', '1.25')
215 check('5 / ( [string length "abcd"] + 0.0 )', '1.25')
216 check('20.0/5.0', '4.0')
217 check('"0x03" > "2"', '1')
218 check('[string length "a\xc2\xbd\xe2\x82\xac"]', '3')
219 check(r'[string length "a\xbd\u20ac"]', '3')
220 check('"abc"', 'abc')
221 check('"a\xc2\xbd\xe2\x82\xac"', 'a\xc2\xbd\xe2\x82\xac')
222 check(r'"a\xbd\u20ac"', 'a\xc2\xbd\xe2\x82\xac')
223
224 def test_exprdouble(self):
225 tcl = self.interp
226 tcl.call('set', 'a', 3)
227 tcl.call('set', 'b', 6)
228 def check(expr, expected):
229 result = tcl.exprdouble(expr)
230 self.assertEqual(result, expected)
231 self.assertIsInstance(result, float)
232
233 self.assertRaises(TypeError, tcl.exprdouble)
234 self.assertRaises(TypeError, tcl.exprdouble, '8.2', '+6')
235 self.assertRaises(TclError, tcl.exprdouble, 'spam')
236 check('', 0.0)
237 check('8.2 + 6', 14.2)
238 check('2**64', float(2**64))
239 check('3.1 + $a', 6.1)
240 check('2 + "$a.$b"', 5.6)
241 check('4*[llength "6 2"]', 8.0)
242 check('{word one} < "word $a"', 0.0)
243 check('4*2 < 7', 0.0)
244 check('hypot($a, 4)', 5.0)
245 check('5 / 4', 1.0)
246 check('5 / 4.0', 1.25)
247 check('5 / ( [string length "abcd"] + 0.0 )', 1.25)
248 check('20.0/5.0', 4.0)
249 check('"0x03" > "2"', 1.0)
250 check('[string length "a\xc2\xbd\xe2\x82\xac"]', 3.0)
251 check(r'[string length "a\xbd\u20ac"]', 3.0)
252 self.assertRaises(TclError, tcl.exprdouble, '"abc"')
253
254 def test_exprlong(self):
255 tcl = self.interp
256 tcl.call('set', 'a', 3)
257 tcl.call('set', 'b', 6)
258 def check(expr, expected):
259 result = tcl.exprlong(expr)
260 self.assertEqual(result, expected)
261 self.assertIsInstance(result, int)
262
263 self.assertRaises(TypeError, tcl.exprlong)
264 self.assertRaises(TypeError, tcl.exprlong, '8.2', '+6')
265 self.assertRaises(TclError, tcl.exprlong, 'spam')
266 check('', 0)
267 check('8.2 + 6', 14)
268 self.assertRaises(TclError, tcl.exprlong, '2**64')
269 check('3.1 + $a', 6)
270 check('2 + "$a.$b"', 5)
271 check('4*[llength "6 2"]', 8)
272 check('{word one} < "word $a"', 0)
273 check('4*2 < 7', 0)
274 check('hypot($a, 4)', 5)
275 check('5 / 4', 1)
276 check('5 / 4.0', 1)
277 check('5 / ( [string length "abcd"] + 0.0 )', 1)
278 check('20.0/5.0', 4)
279 check('"0x03" > "2"', 1)
280 check('[string length "a\xc2\xbd\xe2\x82\xac"]', 3)
281 check(r'[string length "a\xbd\u20ac"]', 3)
282 self.assertRaises(TclError, tcl.exprlong, '"abc"')
283
284 def test_exprboolean(self):
285 tcl = self.interp
286 tcl.call('set', 'a', 3)
287 tcl.call('set', 'b', 6)
288 def check(expr, expected):
289 result = tcl.exprboolean(expr)
290 self.assertEqual(result, expected)
291 self.assertIsInstance(result, int)
292 self.assertNotIsInstance(result, bool)
293
294 self.assertRaises(TypeError, tcl.exprboolean)
295 self.assertRaises(TypeError, tcl.exprboolean, '8.2', '+6')
296 self.assertRaises(TclError, tcl.exprboolean, 'spam')
297 check('', False)
298 for value in ('0', 'false', 'no', 'off'):
299 check(value, False)
300 check('"%s"' % value, False)
301 check('{%s}' % value, False)
302 for value in ('1', 'true', 'yes', 'on'):
303 check(value, True)
304 check('"%s"' % value, True)
305 check('{%s}' % value, True)
306 check('8.2 + 6', True)
307 check('2**64', True)
308 check('3.1 + $a', True)
309 check('2 + "$a.$b"', True)
310 check('4*[llength "6 2"]', True)
311 check('{word one} < "word $a"', False)
312 check('4*2 < 7', False)
313 check('hypot($a, 4)', True)
314 check('5 / 4', True)
315 check('5 / 4.0', True)
316 check('5 / ( [string length "abcd"] + 0.0 )', True)
317 check('20.0/5.0', True)
318 check('"0x03" > "2"', True)
319 check('[string length "a\xc2\xbd\xe2\x82\xac"]', True)
320 check(r'[string length "a\xbd\u20ac"]', True)
321 self.assertRaises(TclError, tcl.exprboolean, '"abc"')
322
Serhiy Storchaka4a880412013-02-07 15:37:53 +0200323 def test_passing_values(self):
324 def passValue(value):
325 return self.interp.call('set', '_', value)
Serhiy Storchaka5542b152013-12-25 17:28:50 +0200326
327 self.assertEqual(passValue(True), True if self.wantobjects else '1')
328 self.assertEqual(passValue(False), False if self.wantobjects else '0')
Serhiy Storchaka4a880412013-02-07 15:37:53 +0200329 self.assertEqual(passValue(u'string'), u'string')
330 self.assertEqual(passValue(u'string\u20ac'), u'string\u20ac')
331 for i in (0, 1, -1, int(2**31-1), int(-2**31)):
Serhiy Storchaka5542b152013-12-25 17:28:50 +0200332 self.assertEqual(passValue(i), i if self.wantobjects else str(i))
Ezio Melotti0a4a7e12013-02-23 08:19:00 +0200333 for f in (0.0, 1.0, -1.0, 1//3, 1/3.0,
Serhiy Storchaka4a880412013-02-07 15:37:53 +0200334 sys.float_info.min, sys.float_info.max,
335 -sys.float_info.min, -sys.float_info.max):
Serhiy Storchaka5542b152013-12-25 17:28:50 +0200336 if self.wantobjects:
Serhiy Storchaka4a880412013-02-07 15:37:53 +0200337 self.assertEqual(passValue(f), f)
Serhiy Storchaka5542b152013-12-25 17:28:50 +0200338 else:
339 self.assertEqual(float(passValue(f)), f)
340 if self.wantobjects:
341 f = passValue(float('nan'))
342 self.assertNotEqual(f, f)
343 self.assertEqual(passValue(float('inf')), float('inf'))
344 self.assertEqual(passValue(-float('inf')), -float('inf'))
345 else:
346 f = float(passValue(float('nan')))
347 self.assertNotEqual(f, f)
348 self.assertEqual(float(passValue(float('inf'))), float('inf'))
349 self.assertEqual(float(passValue(-float('inf'))), -float('inf'))
350 self.assertEqual(passValue((1, '2', (3.4,))),
351 (1, '2', (3.4,)) if self.wantobjects else '1 2 3.4')
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000352
Serhiy Storchaka29d8e852014-01-23 09:42:46 +0200353 def test_user_command(self):
354 result = []
355 def testfunc(arg):
356 result.append(arg)
357 return arg
358 self.interp.createcommand('testfunc', testfunc)
Serhiy Storchakadc976672014-01-23 14:38:44 +0200359 def check(value, expected, eq=self.assertEqual):
Serhiy Storchaka29d8e852014-01-23 09:42:46 +0200360 del result[:]
Serhiy Storchaka83515ec2014-01-23 11:03:02 +0200361 r = self.interp.call('testfunc', value)
362 self.assertEqual(len(result), 1)
363 self.assertIsInstance(result[0], str)
Serhiy Storchakadc976672014-01-23 14:38:44 +0200364 eq(result[0], expected)
Serhiy Storchaka83515ec2014-01-23 11:03:02 +0200365 self.assertIsInstance(r, str)
Serhiy Storchakadc976672014-01-23 14:38:44 +0200366 eq(r, expected)
367 def float_eq(actual, expected):
Serhiy Storchakaeb7ef942014-01-23 16:08:35 +0200368 expected = float(expected)
369 self.assertAlmostEqual(float(actual), expected,
370 delta=abs(expected) * 1e-10)
Serhiy Storchakadc976672014-01-23 14:38:44 +0200371 def nan_eq(actual, expected):
372 actual = float(actual)
373 self.assertNotEqual(actual, actual)
Serhiy Storchaka29d8e852014-01-23 09:42:46 +0200374
375 check(True, '1')
376 check(False, '0')
377 check('string', 'string')
378 check('string\xbd', 'string\xbd')
379 check('string\u20ac', 'string\u20ac')
380 for i in (0, 1, -1, 2**31-1, -2**31):
381 check(i, str(i))
Serhiy Storchakadc976672014-01-23 14:38:44 +0200382 for f in (0.0, 1.0, -1.0):
383 check(f, repr(f))
384 for f in (1/3.0, sys.float_info.min, sys.float_info.max,
Serhiy Storchaka29d8e852014-01-23 09:42:46 +0200385 -sys.float_info.min, -sys.float_info.max):
Serhiy Storchakadc976672014-01-23 14:38:44 +0200386 check(f, f, eq=float_eq)
387 check(float('inf'), 'Inf', eq=float_eq)
388 check(-float('inf'), '-Inf', eq=float_eq)
389 check(float('nan'), 'NaN', eq=nan_eq)
Serhiy Storchaka29d8e852014-01-23 09:42:46 +0200390 check((), '')
391 check((1, (2,), (3, 4), '5 6', ()), '1 2 {3 4} {5 6} {}')
392
Serhiy Storchakafab65422013-07-11 20:32:48 +0300393 def test_splitlist(self):
394 splitlist = self.interp.tk.splitlist
395 call = self.interp.tk.call
396 self.assertRaises(TypeError, splitlist)
397 self.assertRaises(TypeError, splitlist, 'a', 'b')
398 self.assertRaises(TypeError, splitlist, 2)
399 testcases = [
400 ('2', ('2',)),
401 ('', ()),
402 ('{}', ('',)),
403 ('""', ('',)),
404 ('a\n b\t\r c\n ', ('a', 'b', 'c')),
405 (u'a\n b\t\r c\n ', ('a', 'b', 'c')),
406 ('a \xe2\x82\xac', ('a', '\xe2\x82\xac')),
407 (u'a \u20ac', ('a', '\xe2\x82\xac')),
408 ('a {b c}', ('a', 'b c')),
409 (r'a b\ c', ('a', 'b c')),
410 (('a', 'b c'), ('a', 'b c')),
411 ('a 2', ('a', '2')),
412 (('a', 2), ('a', 2)),
413 ('a 3.4', ('a', '3.4')),
414 (('a', 3.4), ('a', 3.4)),
415 ((), ()),
Serhiy Storchaka5542b152013-12-25 17:28:50 +0200416 (call('list', 1, '2', (3.4,)),
417 (1, '2', (3.4,)) if self.wantobjects else
418 ('1', '2', '3.4')),
Serhiy Storchakafab65422013-07-11 20:32:48 +0300419 ]
Serhiy Storchaka94025332013-09-08 20:32:56 +0300420 if tcl_version >= (8, 5):
Serhiy Storchaka15b67d72014-02-02 23:04:06 +0200421 if not self.wantobjects:
422 expected = ('12', '\xe2\x82\xac', '\xe2\x82\xac', '3.4')
423 elif get_tk_patchlevel() < (8, 5, 5):
424 # Before 8.5.5 dicts were converted to lists through string
425 expected = ('12', u'\u20ac', u'\u20ac', '3.4')
426 else:
427 expected = (12, u'\u20ac', u'\u20ac', (3.4,))
Serhiy Storchaka94025332013-09-08 20:32:56 +0300428 testcases += [
Serhiy Storchaka15b67d72014-02-02 23:04:06 +0200429 (call('dict', 'create', 12, u'\u20ac', '\xe2\x82\xac', (3.4,)),
430 expected),
Serhiy Storchaka94025332013-09-08 20:32:56 +0300431 ]
Serhiy Storchakafab65422013-07-11 20:32:48 +0300432 for arg, res in testcases:
433 self.assertEqual(splitlist(arg), res)
434 self.assertRaises(TclError, splitlist, '{')
435
436 def test_split(self):
437 split = self.interp.tk.split
438 call = self.interp.tk.call
439 self.assertRaises(TypeError, split)
440 self.assertRaises(TypeError, split, 'a', 'b')
441 self.assertRaises(TypeError, split, 2)
442 testcases = [
443 ('2', '2'),
444 ('', ''),
445 ('{}', ''),
446 ('""', ''),
447 ('{', '{'),
448 ('a\n b\t\r c\n ', ('a', 'b', 'c')),
449 (u'a\n b\t\r c\n ', ('a', 'b', 'c')),
450 ('a \xe2\x82\xac', ('a', '\xe2\x82\xac')),
451 (u'a \u20ac', ('a', '\xe2\x82\xac')),
452 ('a {b c}', ('a', ('b', 'c'))),
453 (r'a b\ c', ('a', ('b', 'c'))),
454 (('a', 'b c'), ('a', ('b', 'c'))),
455 (('a', u'b c'), ('a', ('b', 'c'))),
456 ('a 2', ('a', '2')),
457 (('a', 2), ('a', 2)),
458 ('a 3.4', ('a', '3.4')),
459 (('a', 3.4), ('a', 3.4)),
460 (('a', (2, 3.4)), ('a', (2, 3.4))),
461 ((), ()),
Serhiy Storchaka5542b152013-12-25 17:28:50 +0200462 (call('list', 1, '2', (3.4,)),
463 (1, '2', (3.4,)) if self.wantobjects else
464 ('1', '2', '3.4')),
Serhiy Storchakafab65422013-07-11 20:32:48 +0300465 ]
Serhiy Storchaka94025332013-09-08 20:32:56 +0300466 if tcl_version >= (8, 5):
Serhiy Storchaka15b67d72014-02-02 23:04:06 +0200467 if not self.wantobjects:
468 expected = ('12', '\xe2\x82\xac', '\xe2\x82\xac', '3.4')
469 elif get_tk_patchlevel() < (8, 5, 5):
470 # Before 8.5.5 dicts were converted to lists through string
471 expected = ('12', u'\u20ac', u'\u20ac', '3.4')
472 else:
473 expected = (12, u'\u20ac', u'\u20ac', (3.4,))
Serhiy Storchaka94025332013-09-08 20:32:56 +0300474 testcases += [
475 (call('dict', 'create', 12, u'\u20ac', '\xe2\x82\xac', (3.4,)),
Serhiy Storchaka15b67d72014-02-02 23:04:06 +0200476 expected),
Serhiy Storchaka94025332013-09-08 20:32:56 +0300477 ]
Serhiy Storchakafab65422013-07-11 20:32:48 +0300478 for arg, res in testcases:
479 self.assertEqual(split(arg), res)
480
Neal Norwitz63dfece2004-02-19 02:37:29 +0000481
Serhiy Storchaka42035702013-08-21 21:46:12 +0300482class BigmemTclTest(unittest.TestCase):
483
484 def setUp(self):
485 self.interp = Tcl()
486
487 @unittest.skipUnless(_testcapi.INT_MAX < _testcapi.PY_SSIZE_T_MAX,
488 "needs UINT_MAX < SIZE_MAX")
489 @test_support.precisionbigmemtest(size=_testcapi.INT_MAX + 1, memuse=5,
490 dry_run=False)
491 def test_huge_string(self, size):
492 value = ' ' * size
493 self.assertRaises(OverflowError, self.interp.call, 'set', '_', value)
494
495
Serhiy Storchaka78ecaba2013-11-20 17:44:38 +0200496def setUpModule():
497 if test_support.verbose:
498 tcl = Tcl()
499 print 'patchlevel =', tcl.call('info', 'patchlevel')
500
501
Neal Norwitz63dfece2004-02-19 02:37:29 +0000502def test_main():
Serhiy Storchaka42035702013-08-21 21:46:12 +0300503 test_support.run_unittest(TclTest, TkinterTest, BigmemTclTest)
Neal Norwitz63dfece2004-02-19 02:37:29 +0000504
David Aschere2b4b322004-02-18 05:59:53 +0000505if __name__ == "__main__":
Neal Norwitz63dfece2004-02-19 02:37:29 +0000506 test_main()