blob: d86246cbfb74a59efc9312efc640a2a0f9a45ed9 [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
Guilherme Polofa8fba92009-02-07 02:33:47 +000011from tkinter import Tcl
David Aschere2b4b322004-02-18 05:59:53 +000012from _tkinter import TclError
13
Benjamin Petersonc4bbc8d2009-01-30 03:39:35 +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)
Guido van Rossumb940e112007-01-10 16:19:56 +0000123 except Exception as e:
David Aschere2b4b322004-02-18 05:59:53 +0000124 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
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +0000131 @unittest.skipUnless(sys.platform == 'win32', 'Requires Windows')
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000132 def testLoadWithUNC(self):
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000133 # Build a UNC path from the regular path.
134 # Something like
135 # \\%COMPUTERNAME%\c$\python27\python.exe
136
137 fullname = os.path.abspath(sys.executable)
138 if fullname[1] != ':':
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +0000139 raise unittest.SkipTest('Absolute path should have drive part')
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000140 unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'],
141 fullname[0],
142 fullname[3:])
Hirokazu Yamamotodda7fdf2010-09-23 15:28:35 +0000143 if not os.path.exists(unc_name):
144 raise unittest.SkipTest('Cannot connect to UNC Path')
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000145
Georg Brandlec5ae3b2010-07-31 19:17:11 +0000146 with support.EnvironmentVarGuard() as env:
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000147 env.unset("TCL_LIBRARY")
Hirokazu Yamamotof2dec8d2010-09-18 04:42:41 +0000148 f = os.popen('%s -c "import tkinter; print(tkinter)"' % (unc_name,))
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000149
Hirokazu Yamamotof2dec8d2010-09-18 04:42:41 +0000150 self.assertIn('tkinter', f.read())
Martin v. Löwis2d5157e2010-06-04 19:50:26 +0000151 # exit code must be zero
152 self.assertEqual(f.close(), None)
153
154
Neal Norwitz63dfece2004-02-19 02:37:29 +0000155
156def test_main():
Benjamin Petersonc4bbc8d2009-01-30 03:39:35 +0000157 support.run_unittest(TclTest, TkinterTest)
Neal Norwitz63dfece2004-02-19 02:37:29 +0000158
David Aschere2b4b322004-02-18 05:59:53 +0000159if __name__ == "__main__":
Neal Norwitz63dfece2004-02-19 02:37:29 +0000160 test_main()