blob: 0cc21c9f2b9a930b4893f41fa0a0e827ae3874f4 [file] [log] [blame]
Benjamin Peterson90f5ba52010-03-11 22:53:45 +00001#!/usr/bin/env python3
David Aschere2b4b322004-02-18 05:59:53 +00002
3import unittest
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +00004import sys
David Aschere2b4b322004-02-18 05:59:53 +00005import os
Benjamin Petersonee8712c2008-05-20 21:35:26 +00006from test import support
R. David Murraya21e4ca2009-03-31 23:16:50 +00007
8# Skip this test if the _tkinter module wasn't built.
9_tkinter = support.import_module('_tkinter')
10
Terry Jan Reedy743c85a2013-03-16 02:37:06 -040011# Make sure tkinter._fix runs to set up the environment
12support.import_fresh_module('tkinter')
13
Guilherme Polofa8fba92009-02-07 02:33:47 +000014from tkinter import Tcl
David Aschere2b4b322004-02-18 05:59:53 +000015from _tkinter import TclError
16
Benjamin Petersonc4bbc8d2009-01-30 03:39:35 +000017
18class TkinterTest(unittest.TestCase):
19
20 def testFlattenLen(self):
21 # flatten(<object with no length>)
22 self.assertRaises(TypeError, _tkinter._flatten, True)
23
24
David Aschere2b4b322004-02-18 05:59:53 +000025class TclTest(unittest.TestCase):
26
27 def setUp(self):
28 self.interp = Tcl()
29
30 def testEval(self):
31 tcl = self.interp
32 tcl.eval('set a 1')
33 self.assertEqual(tcl.eval('set a'),'1')
34
35 def testEvalException(self):
36 tcl = self.interp
37 self.assertRaises(TclError,tcl.eval,'set a')
38
39 def testEvalException2(self):
40 tcl = self.interp
41 self.assertRaises(TclError,tcl.eval,'this is wrong')
42
43 def testCall(self):
44 tcl = self.interp
45 tcl.call('set','a','1')
46 self.assertEqual(tcl.call('set','a'),'1')
47
48 def testCallException(self):
49 tcl = self.interp
50 self.assertRaises(TclError,tcl.call,'set','a')
51
52 def testCallException2(self):
53 tcl = self.interp
54 self.assertRaises(TclError,tcl.call,'this','is','wrong')
55
56 def testSetVar(self):
57 tcl = self.interp
58 tcl.setvar('a','1')
59 self.assertEqual(tcl.eval('set a'),'1')
60
61 def testSetVarArray(self):
62 tcl = self.interp
63 tcl.setvar('a(1)','1')
64 self.assertEqual(tcl.eval('set a(1)'),'1')
65
66 def testGetVar(self):
67 tcl = self.interp
68 tcl.eval('set a 1')
69 self.assertEqual(tcl.getvar('a'),'1')
70
71 def testGetVarArray(self):
72 tcl = self.interp
73 tcl.eval('set a(1) 1')
74 self.assertEqual(tcl.getvar('a(1)'),'1')
75
76 def testGetVarException(self):
77 tcl = self.interp
78 self.assertRaises(TclError,tcl.getvar,'a')
79
80 def testGetVarArrayException(self):
81 tcl = self.interp
82 self.assertRaises(TclError,tcl.getvar,'a(1)')
83
84 def testUnsetVar(self):
85 tcl = self.interp
86 tcl.setvar('a',1)
87 self.assertEqual(tcl.eval('info exists a'),'1')
88 tcl.unsetvar('a')
89 self.assertEqual(tcl.eval('info exists a'),'0')
90
91 def testUnsetVarArray(self):
92 tcl = self.interp
93 tcl.setvar('a(1)',1)
94 tcl.setvar('a(2)',2)
95 self.assertEqual(tcl.eval('info exists a(1)'),'1')
96 self.assertEqual(tcl.eval('info exists a(2)'),'1')
97 tcl.unsetvar('a(1)')
98 self.assertEqual(tcl.eval('info exists a(1)'),'0')
99 self.assertEqual(tcl.eval('info exists a(2)'),'1')
100
101 def testUnsetVarException(self):
102 tcl = self.interp
103 self.assertRaises(TclError,tcl.unsetvar,'a')
Tim Peters27f88362004-07-08 04:22:35 +0000104
David Aschere2b4b322004-02-18 05:59:53 +0000105 def testEvalFile(self):
106 tcl = self.interp
107 filename = "testEvalFile.tcl"
108 fd = open(filename,'w')
109 script = """set a 1
110 set b 2
111 set c [ expr $a + $b ]
112 """
113 fd.write(script)
114 fd.close()
115 tcl.evalfile(filename)
Neal Norwitz9a8d55e2004-02-29 15:37:50 +0000116 os.remove(filename)
David Aschere2b4b322004-02-18 05:59:53 +0000117 self.assertEqual(tcl.eval('set a'),'1')
118 self.assertEqual(tcl.eval('set b'),'2')
119 self.assertEqual(tcl.eval('set c'),'3')
120
121 def testEvalFileException(self):
122 tcl = self.interp
123 filename = "doesnotexists"
124 try:
125 os.remove(filename)
Guido van Rossumb940e112007-01-10 16:19:56 +0000126 except Exception as e:
David Aschere2b4b322004-02-18 05:59:53 +0000127 pass
128 self.assertRaises(TclError,tcl.evalfile,filename)
129
David Aschere2b4b322004-02-18 05:59:53 +0000130 def testPackageRequireException(self):
131 tcl = self.interp
132 self.assertRaises(TclError,tcl.eval,'package require DNE')
133
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +0000134 @unittest.skipUnless(sys.platform == 'win32', 'Requires Windows')
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000135 def testLoadWithUNC(self):
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000136 # 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] != ':':
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +0000142 raise unittest.SkipTest('Absolute path should have drive part')
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000143 unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'],
144 fullname[0],
145 fullname[3:])
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +0000146 if not os.path.exists(unc_name):
147 raise unittest.SkipTest('Cannot connect to UNC Path')
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000148
Georg Brandlec5ae3b2010-07-31 19:17:11 +0000149 with support.EnvironmentVarGuard() as env:
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000150 env.unset("TCL_LIBRARY")
Hirokazu Yamamotof2dec8d2010-09-18 04:42:41 +0000151 f = os.popen('%s -c "import tkinter; print(tkinter)"' % (unc_name,))
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000152
Hirokazu Yamamotof2dec8d2010-09-18 04:42:41 +0000153 self.assertIn('tkinter', f.read())
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000154 # exit code must be zero
155 self.assertEqual(f.close(), None)
156
Serhiy Storchakadf4bb462013-02-07 15:40:03 +0200157 def test_passing_values(self):
158 def passValue(value):
159 return self.interp.call('set', '_', value)
160
161 self.assertEqual(passValue(True), True)
162 self.assertEqual(passValue(False), False)
163 self.assertEqual(passValue('string'), 'string')
164 self.assertEqual(passValue('string\u20ac'), 'string\u20ac')
165 for i in (0, 1, -1, 2**31-1, -2**31):
166 self.assertEqual(passValue(i), i)
167 for f in (0.0, 1.0, -1.0, 1/3,
168 sys.float_info.min, sys.float_info.max,
169 -sys.float_info.min, -sys.float_info.max):
170 self.assertEqual(passValue(f), f)
171 for f in float('nan'), float('inf'), -float('inf'):
172 if f != f: # NaN
173 self.assertNotEqual(passValue(f), f)
174 else:
175 self.assertEqual(passValue(f), f)
176 self.assertEqual(passValue((1, '2', (3.4,))), (1, '2', (3.4,)))
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000177
Neal Norwitz63dfece2004-02-19 02:37:29 +0000178
179def test_main():
Benjamin Petersonc4bbc8d2009-01-30 03:39:35 +0000180 support.run_unittest(TclTest, TkinterTest)
Neal Norwitz63dfece2004-02-19 02:37:29 +0000181
David Aschere2b4b322004-02-18 05:59:53 +0000182if __name__ == "__main__":
Neal Norwitz63dfece2004-02-19 02:37:29 +0000183 test_main()