blob: fa1727c81f2582d91fefd13da0bf89ff9339022f [file] [log] [blame]
David Aschere2b4b322004-02-18 05:59:53 +00001#!/usr/bin/env python
2
3import unittest
4import os
Benjamin Petersonc4bbc8d2009-01-30 03:39:35 +00005import _tkinter
Benjamin Petersonee8712c2008-05-20 21:35:26 +00006from test import support
Georg Brandl3b4b45b2008-05-25 11:53:14 +00007from tkinter import Tcl
David Aschere2b4b322004-02-18 05:59:53 +00008from _tkinter import TclError
9
Benjamin Petersonc4bbc8d2009-01-30 03:39:35 +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)
Guido van Rossumb940e112007-01-10 16:19:56 +0000119 except Exception as e:
David Aschere2b4b322004-02-18 05:59:53 +0000120 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 Wouters477c8d52006-05-27 19:21:47 +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
Thomas Wouters0e3f5912006-08-11 14:57:12 +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 Petersonc4bbc8d2009-01-30 03:39:35 +0000163 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()