blob: 26e294ce1360d6a83982065bedb3f98f0db19777 [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 Polo8e5e4382009-02-07 02:20:29 +00007from Tkinter import Tcl
David Aschere2b4b322004-02-18 05:59:53 +00008from _tkinter import TclError
9
Benjamin Petersonb3619be2009-01-30 02:24:39 +000010
11class TkinterTest(unittest.TestCase):
12
13 def testFlattenLen(self):
14 # flatten(<object with no length>)
15 self.assertRaises(TypeError, _tkinter._flatten, True)
16
17
David Aschere2b4b322004-02-18 05:59:53 +000018class TclTest(unittest.TestCase):
19
20 def setUp(self):
21 self.interp = Tcl()
22
23 def testEval(self):
24 tcl = self.interp
25 tcl.eval('set a 1')
26 self.assertEqual(tcl.eval('set a'),'1')
27
28 def testEvalException(self):
29 tcl = self.interp
30 self.assertRaises(TclError,tcl.eval,'set a')
31
32 def testEvalException2(self):
33 tcl = self.interp
34 self.assertRaises(TclError,tcl.eval,'this is wrong')
35
36 def testCall(self):
37 tcl = self.interp
38 tcl.call('set','a','1')
39 self.assertEqual(tcl.call('set','a'),'1')
40
41 def testCallException(self):
42 tcl = self.interp
43 self.assertRaises(TclError,tcl.call,'set','a')
44
45 def testCallException2(self):
46 tcl = self.interp
47 self.assertRaises(TclError,tcl.call,'this','is','wrong')
48
49 def testSetVar(self):
50 tcl = self.interp
51 tcl.setvar('a','1')
52 self.assertEqual(tcl.eval('set a'),'1')
53
54 def testSetVarArray(self):
55 tcl = self.interp
56 tcl.setvar('a(1)','1')
57 self.assertEqual(tcl.eval('set a(1)'),'1')
58
59 def testGetVar(self):
60 tcl = self.interp
61 tcl.eval('set a 1')
62 self.assertEqual(tcl.getvar('a'),'1')
63
64 def testGetVarArray(self):
65 tcl = self.interp
66 tcl.eval('set a(1) 1')
67 self.assertEqual(tcl.getvar('a(1)'),'1')
68
69 def testGetVarException(self):
70 tcl = self.interp
71 self.assertRaises(TclError,tcl.getvar,'a')
72
73 def testGetVarArrayException(self):
74 tcl = self.interp
75 self.assertRaises(TclError,tcl.getvar,'a(1)')
76
77 def testUnsetVar(self):
78 tcl = self.interp
79 tcl.setvar('a',1)
80 self.assertEqual(tcl.eval('info exists a'),'1')
81 tcl.unsetvar('a')
82 self.assertEqual(tcl.eval('info exists a'),'0')
83
84 def testUnsetVarArray(self):
85 tcl = self.interp
86 tcl.setvar('a(1)',1)
87 tcl.setvar('a(2)',2)
88 self.assertEqual(tcl.eval('info exists a(1)'),'1')
89 self.assertEqual(tcl.eval('info exists a(2)'),'1')
90 tcl.unsetvar('a(1)')
91 self.assertEqual(tcl.eval('info exists a(1)'),'0')
92 self.assertEqual(tcl.eval('info exists a(2)'),'1')
93
94 def testUnsetVarException(self):
95 tcl = self.interp
96 self.assertRaises(TclError,tcl.unsetvar,'a')
Tim Peters27f88362004-07-08 04:22:35 +000097
David Aschere2b4b322004-02-18 05:59:53 +000098 def testEvalFile(self):
99 tcl = self.interp
100 filename = "testEvalFile.tcl"
101 fd = open(filename,'w')
102 script = """set a 1
103 set b 2
104 set c [ expr $a + $b ]
105 """
106 fd.write(script)
107 fd.close()
108 tcl.evalfile(filename)
Neal Norwitz9a8d55e2004-02-29 15:37:50 +0000109 os.remove(filename)
David Aschere2b4b322004-02-18 05:59:53 +0000110 self.assertEqual(tcl.eval('set a'),'1')
111 self.assertEqual(tcl.eval('set b'),'2')
112 self.assertEqual(tcl.eval('set c'),'3')
113
114 def testEvalFileException(self):
115 tcl = self.interp
116 filename = "doesnotexists"
117 try:
118 os.remove(filename)
119 except Exception,e:
120 pass
121 self.assertRaises(TclError,tcl.evalfile,filename)
122
David Aschere2b4b322004-02-18 05:59:53 +0000123 def testPackageRequireException(self):
124 tcl = self.interp
125 self.assertRaises(TclError,tcl.eval,'package require DNE')
126
127 def testLoadTk(self):
128 import os
129 if 'DISPLAY' not in os.environ:
130 # skipping test of clean upgradeability
131 return
132 tcl = Tcl()
133 self.assertRaises(TclError,tcl.winfo_geometry)
134 tcl.loadtk()
135 self.assertEqual('1x1+0+0', tcl.winfo_geometry())
Thomas Woutersa6c67b52006-04-24 11:37:13 +0000136 tcl.destroy()
David Aschere2b4b322004-02-18 05:59:53 +0000137
138 def testLoadTkFailure(self):
139 import os
140 old_display = None
141 import sys
Georg Brandlb2afe852006-06-09 20:43:48 +0000142 if sys.platform.startswith(('win', 'darwin', 'cygwin')):
143 return # no failure possible on windows?
David Aschere2b4b322004-02-18 05:59:53 +0000144 if 'DISPLAY' in os.environ:
145 old_display = os.environ['DISPLAY']
146 del os.environ['DISPLAY']
147 # on some platforms, deleting environment variables
148 # doesn't actually carry through to the process level
149 # because they don't support unsetenv
150 # If that's the case, abort.
151 display = os.popen('echo $DISPLAY').read().strip()
152 if display:
153 return
154 try:
155 tcl = Tcl()
156 self.assertRaises(TclError, tcl.winfo_geometry)
157 self.assertRaises(TclError, tcl.loadtk)
158 finally:
159 if old_display is not None:
160 os.environ['DISPLAY'] = old_display
Neal Norwitz63dfece2004-02-19 02:37:29 +0000161
162def test_main():
Benjamin Petersonb3619be2009-01-30 02:24:39 +0000163 test_support.run_unittest(TclTest, TkinterTest)
Neal Norwitz63dfece2004-02-19 02:37:29 +0000164
David Aschere2b4b322004-02-18 05:59:53 +0000165if __name__ == "__main__":
Neal Norwitz63dfece2004-02-19 02:37:29 +0000166 test_main()