blob: 7690fe10258d621c44a63c8c9d15fb7c1463b84d [file] [log] [blame]
David Aschere2b4b322004-02-18 05:59:53 +00001#!/usr/bin/env python
2
3import unittest
4import os
Benjamin Petersonb3619be2009-01-30 02:24:39 +00005import _tkinter
Neal Norwitz63dfece2004-02-19 02:37:29 +00006from test import test_support
Guilherme Polo3b331dd2009-02-01 02:56:16 +00007from Tkinter import Tk, Tcl
David Aschere2b4b322004-02-18 05:59:53 +00008from _tkinter import TclError
9
Guilherme Polo3b331dd2009-02-01 02:56:16 +000010# Restore Tkinter.Tk._loadtk that may have been overridden by ttk.
11# If this is not done then this test may fail for reasons related
12# to ttk only (like failing to load the tile package).
13from ttk import __loadtk__
14Tk._loadtk = __loadtk__
15
Benjamin Petersonb3619be2009-01-30 02:24:39 +000016
17class TkinterTest(unittest.TestCase):
18
19 def testFlattenLen(self):
20 # flatten(<object with no length>)
21 self.assertRaises(TypeError, _tkinter._flatten, True)
22
23
David Aschere2b4b322004-02-18 05:59:53 +000024class TclTest(unittest.TestCase):
25
26 def setUp(self):
27 self.interp = Tcl()
28
29 def testEval(self):
30 tcl = self.interp
31 tcl.eval('set a 1')
32 self.assertEqual(tcl.eval('set a'),'1')
33
34 def testEvalException(self):
35 tcl = self.interp
36 self.assertRaises(TclError,tcl.eval,'set a')
37
38 def testEvalException2(self):
39 tcl = self.interp
40 self.assertRaises(TclError,tcl.eval,'this is wrong')
41
42 def testCall(self):
43 tcl = self.interp
44 tcl.call('set','a','1')
45 self.assertEqual(tcl.call('set','a'),'1')
46
47 def testCallException(self):
48 tcl = self.interp
49 self.assertRaises(TclError,tcl.call,'set','a')
50
51 def testCallException2(self):
52 tcl = self.interp
53 self.assertRaises(TclError,tcl.call,'this','is','wrong')
54
55 def testSetVar(self):
56 tcl = self.interp
57 tcl.setvar('a','1')
58 self.assertEqual(tcl.eval('set a'),'1')
59
60 def testSetVarArray(self):
61 tcl = self.interp
62 tcl.setvar('a(1)','1')
63 self.assertEqual(tcl.eval('set a(1)'),'1')
64
65 def testGetVar(self):
66 tcl = self.interp
67 tcl.eval('set a 1')
68 self.assertEqual(tcl.getvar('a'),'1')
69
70 def testGetVarArray(self):
71 tcl = self.interp
72 tcl.eval('set a(1) 1')
73 self.assertEqual(tcl.getvar('a(1)'),'1')
74
75 def testGetVarException(self):
76 tcl = self.interp
77 self.assertRaises(TclError,tcl.getvar,'a')
78
79 def testGetVarArrayException(self):
80 tcl = self.interp
81 self.assertRaises(TclError,tcl.getvar,'a(1)')
82
83 def testUnsetVar(self):
84 tcl = self.interp
85 tcl.setvar('a',1)
86 self.assertEqual(tcl.eval('info exists a'),'1')
87 tcl.unsetvar('a')
88 self.assertEqual(tcl.eval('info exists a'),'0')
89
90 def testUnsetVarArray(self):
91 tcl = self.interp
92 tcl.setvar('a(1)',1)
93 tcl.setvar('a(2)',2)
94 self.assertEqual(tcl.eval('info exists a(1)'),'1')
95 self.assertEqual(tcl.eval('info exists a(2)'),'1')
96 tcl.unsetvar('a(1)')
97 self.assertEqual(tcl.eval('info exists a(1)'),'0')
98 self.assertEqual(tcl.eval('info exists a(2)'),'1')
99
100 def testUnsetVarException(self):
101 tcl = self.interp
102 self.assertRaises(TclError,tcl.unsetvar,'a')
Tim Peters27f88362004-07-08 04:22:35 +0000103
David Aschere2b4b322004-02-18 05:59:53 +0000104 def testEvalFile(self):
105 tcl = self.interp
106 filename = "testEvalFile.tcl"
107 fd = open(filename,'w')
108 script = """set a 1
109 set b 2
110 set c [ expr $a + $b ]
111 """
112 fd.write(script)
113 fd.close()
114 tcl.evalfile(filename)
Neal Norwitz9a8d55e2004-02-29 15:37:50 +0000115 os.remove(filename)
David Aschere2b4b322004-02-18 05:59:53 +0000116 self.assertEqual(tcl.eval('set a'),'1')
117 self.assertEqual(tcl.eval('set b'),'2')
118 self.assertEqual(tcl.eval('set c'),'3')
119
120 def testEvalFileException(self):
121 tcl = self.interp
122 filename = "doesnotexists"
123 try:
124 os.remove(filename)
125 except Exception,e:
126 pass
127 self.assertRaises(TclError,tcl.evalfile,filename)
128
David Aschere2b4b322004-02-18 05:59:53 +0000129 def testPackageRequireException(self):
130 tcl = self.interp
131 self.assertRaises(TclError,tcl.eval,'package require DNE')
132
133 def testLoadTk(self):
134 import os
135 if 'DISPLAY' not in os.environ:
136 # skipping test of clean upgradeability
137 return
138 tcl = Tcl()
139 self.assertRaises(TclError,tcl.winfo_geometry)
140 tcl.loadtk()
141 self.assertEqual('1x1+0+0', tcl.winfo_geometry())
Thomas Woutersa6c67b52006-04-24 11:37:13 +0000142 tcl.destroy()
David Aschere2b4b322004-02-18 05:59:53 +0000143
144 def testLoadTkFailure(self):
145 import os
146 old_display = None
147 import sys
Georg Brandlb2afe852006-06-09 20:43:48 +0000148 if sys.platform.startswith(('win', 'darwin', 'cygwin')):
149 return # no failure possible on windows?
David Aschere2b4b322004-02-18 05:59:53 +0000150 if 'DISPLAY' in os.environ:
151 old_display = os.environ['DISPLAY']
152 del os.environ['DISPLAY']
153 # on some platforms, deleting environment variables
154 # doesn't actually carry through to the process level
155 # because they don't support unsetenv
156 # If that's the case, abort.
157 display = os.popen('echo $DISPLAY').read().strip()
158 if display:
159 return
160 try:
161 tcl = Tcl()
162 self.assertRaises(TclError, tcl.winfo_geometry)
163 self.assertRaises(TclError, tcl.loadtk)
164 finally:
165 if old_display is not None:
166 os.environ['DISPLAY'] = old_display
Neal Norwitz63dfece2004-02-19 02:37:29 +0000167
168def test_main():
Benjamin Petersonb3619be2009-01-30 02:24:39 +0000169 test_support.run_unittest(TclTest, TkinterTest)
Neal Norwitz63dfece2004-02-19 02:37:29 +0000170
David Aschere2b4b322004-02-18 05:59:53 +0000171if __name__ == "__main__":
Neal Norwitz63dfece2004-02-19 02:37:29 +0000172 test_main()