blob: ea3d87d7b57d7b3cdb0e571cbc38cea3a0c9a4e2 [file] [log] [blame]
David Aschere2b4b322004-02-18 05:59:53 +00001#!/usr/bin/env python
2
3import unittest
Serhiy Storchaka4a880412013-02-07 15:37:53 +02004import sys
David Aschere2b4b322004-02-18 05:59:53 +00005import os
Neal Norwitz63dfece2004-02-19 02:37:29 +00006from test import test_support
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
Benjamin Petersonb3619be2009-01-30 02:24:39 +000014
15class TkinterTest(unittest.TestCase):
16
17 def testFlattenLen(self):
18 # flatten(<object with no length>)
19 self.assertRaises(TypeError, _tkinter._flatten, True)
20
21
David Aschere2b4b322004-02-18 05:59:53 +000022class TclTest(unittest.TestCase):
23
24 def setUp(self):
25 self.interp = Tcl()
26
27 def testEval(self):
28 tcl = self.interp
29 tcl.eval('set a 1')
30 self.assertEqual(tcl.eval('set a'),'1')
31
32 def testEvalException(self):
33 tcl = self.interp
34 self.assertRaises(TclError,tcl.eval,'set a')
35
36 def testEvalException2(self):
37 tcl = self.interp
38 self.assertRaises(TclError,tcl.eval,'this is wrong')
39
40 def testCall(self):
41 tcl = self.interp
42 tcl.call('set','a','1')
43 self.assertEqual(tcl.call('set','a'),'1')
44
45 def testCallException(self):
46 tcl = self.interp
47 self.assertRaises(TclError,tcl.call,'set','a')
48
49 def testCallException2(self):
50 tcl = self.interp
51 self.assertRaises(TclError,tcl.call,'this','is','wrong')
52
53 def testSetVar(self):
54 tcl = self.interp
55 tcl.setvar('a','1')
56 self.assertEqual(tcl.eval('set a'),'1')
57
58 def testSetVarArray(self):
59 tcl = self.interp
60 tcl.setvar('a(1)','1')
61 self.assertEqual(tcl.eval('set a(1)'),'1')
62
63 def testGetVar(self):
64 tcl = self.interp
65 tcl.eval('set a 1')
66 self.assertEqual(tcl.getvar('a'),'1')
67
68 def testGetVarArray(self):
69 tcl = self.interp
70 tcl.eval('set a(1) 1')
71 self.assertEqual(tcl.getvar('a(1)'),'1')
72
73 def testGetVarException(self):
74 tcl = self.interp
75 self.assertRaises(TclError,tcl.getvar,'a')
76
77 def testGetVarArrayException(self):
78 tcl = self.interp
79 self.assertRaises(TclError,tcl.getvar,'a(1)')
80
81 def testUnsetVar(self):
82 tcl = self.interp
83 tcl.setvar('a',1)
84 self.assertEqual(tcl.eval('info exists a'),'1')
85 tcl.unsetvar('a')
86 self.assertEqual(tcl.eval('info exists a'),'0')
87
88 def testUnsetVarArray(self):
89 tcl = self.interp
90 tcl.setvar('a(1)',1)
91 tcl.setvar('a(2)',2)
92 self.assertEqual(tcl.eval('info exists a(1)'),'1')
93 self.assertEqual(tcl.eval('info exists a(2)'),'1')
94 tcl.unsetvar('a(1)')
95 self.assertEqual(tcl.eval('info exists a(1)'),'0')
96 self.assertEqual(tcl.eval('info exists a(2)'),'1')
97
98 def testUnsetVarException(self):
99 tcl = self.interp
100 self.assertRaises(TclError,tcl.unsetvar,'a')
Tim Peters27f88362004-07-08 04:22:35 +0000101
David Aschere2b4b322004-02-18 05:59:53 +0000102 def testEvalFile(self):
103 tcl = self.interp
104 filename = "testEvalFile.tcl"
105 fd = open(filename,'w')
106 script = """set a 1
107 set b 2
108 set c [ expr $a + $b ]
109 """
110 fd.write(script)
111 fd.close()
112 tcl.evalfile(filename)
Neal Norwitz9a8d55e2004-02-29 15:37:50 +0000113 os.remove(filename)
David Aschere2b4b322004-02-18 05:59:53 +0000114 self.assertEqual(tcl.eval('set a'),'1')
115 self.assertEqual(tcl.eval('set b'),'2')
116 self.assertEqual(tcl.eval('set c'),'3')
117
118 def testEvalFileException(self):
119 tcl = self.interp
120 filename = "doesnotexists"
121 try:
122 os.remove(filename)
123 except Exception,e:
124 pass
125 self.assertRaises(TclError,tcl.evalfile,filename)
126
David Aschere2b4b322004-02-18 05:59:53 +0000127 def testPackageRequireException(self):
128 tcl = self.interp
129 self.assertRaises(TclError,tcl.eval,'package require DNE')
130
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000131 def testLoadWithUNC(self):
132 import sys
133 if sys.platform != 'win32':
134 return
135
136 # Build a UNC path from the regular path.
137 # Something like
138 # \\%COMPUTERNAME%\c$\python27\python.exe
139
140 fullname = os.path.abspath(sys.executable)
141 if fullname[1] != ':':
142 return
143 unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'],
144 fullname[0],
145 fullname[3:])
146
147 with test_support.EnvironmentVarGuard() as env:
148 env.unset("TCL_LIBRARY")
149 f = os.popen('%s -c "import Tkinter; print Tkinter"' % (unc_name,))
150
Terry Jan Reedyb1d6f852013-05-05 23:22:19 -0400151 self.assertIn('Tkinter.py', f.read())
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000152 # exit code must be zero
153 self.assertEqual(f.close(), None)
154
Serhiy Storchaka4a880412013-02-07 15:37:53 +0200155 def test_passing_values(self):
156 def passValue(value):
157 return self.interp.call('set', '_', value)
158 self.assertEqual(passValue(True), True)
159 self.assertEqual(passValue(False), False)
160 self.assertEqual(passValue('string'), 'string')
161 self.assertEqual(passValue('string\u20ac'), 'string\u20ac')
162 self.assertEqual(passValue(u'string'), u'string')
163 self.assertEqual(passValue(u'string\u20ac'), u'string\u20ac')
164 for i in (0, 1, -1, int(2**31-1), int(-2**31)):
165 self.assertEqual(passValue(i), i)
Ezio Melotti0a4a7e12013-02-23 08:19:00 +0200166 for f in (0.0, 1.0, -1.0, 1//3, 1/3.0,
Serhiy Storchaka4a880412013-02-07 15:37:53 +0200167 sys.float_info.min, sys.float_info.max,
168 -sys.float_info.min, -sys.float_info.max):
169 self.assertEqual(passValue(f), f)
170 for f in float('nan'), float('inf'), -float('inf'):
171 if f != f: # NaN
172 self.assertNotEqual(passValue(f), f)
173 else:
174 self.assertEqual(passValue(f), f)
175 self.assertEqual(passValue((1, '2', (3.4,))), (1, '2', (3.4,)))
Martin v. Löwiseba67c02010-06-04 19:39:07 +0000176
Neal Norwitz63dfece2004-02-19 02:37:29 +0000177
178def test_main():
Benjamin Petersonb3619be2009-01-30 02:24:39 +0000179 test_support.run_unittest(TclTest, TkinterTest)
Neal Norwitz63dfece2004-02-19 02:37:29 +0000180
David Aschere2b4b322004-02-18 05:59:53 +0000181if __name__ == "__main__":
Neal Norwitz63dfece2004-02-19 02:37:29 +0000182 test_main()