mirror of
https://github.com/python/cpython.git
synced 2025-07-25 20:24:11 +00:00

version of Tcl other than ActiveTcl is installed (ActiveTcl included TclX, other Tcl distros didn't). I'm removing the package loading test because it's hard to come up with a package that is guaranteed to be in any Tcl installation. Special-casing darwin and windows is ok since that leaves the only Tk platform (X) which the test was trying to address.
156 lines
4.5 KiB
Python
156 lines
4.5 KiB
Python
#!/usr/bin/env python
|
|
|
|
import unittest
|
|
import os
|
|
from test import test_support
|
|
from Tkinter import Tcl
|
|
from _tkinter import TclError
|
|
|
|
class TclTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.interp = Tcl()
|
|
|
|
def testEval(self):
|
|
tcl = self.interp
|
|
tcl.eval('set a 1')
|
|
self.assertEqual(tcl.eval('set a'),'1')
|
|
|
|
def testEvalException(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.eval,'set a')
|
|
|
|
def testEvalException2(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.eval,'this is wrong')
|
|
|
|
def testCall(self):
|
|
tcl = self.interp
|
|
tcl.call('set','a','1')
|
|
self.assertEqual(tcl.call('set','a'),'1')
|
|
|
|
def testCallException(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.call,'set','a')
|
|
|
|
def testCallException2(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.call,'this','is','wrong')
|
|
|
|
def testSetVar(self):
|
|
tcl = self.interp
|
|
tcl.setvar('a','1')
|
|
self.assertEqual(tcl.eval('set a'),'1')
|
|
|
|
def testSetVarArray(self):
|
|
tcl = self.interp
|
|
tcl.setvar('a(1)','1')
|
|
self.assertEqual(tcl.eval('set a(1)'),'1')
|
|
|
|
def testGetVar(self):
|
|
tcl = self.interp
|
|
tcl.eval('set a 1')
|
|
self.assertEqual(tcl.getvar('a'),'1')
|
|
|
|
def testGetVarArray(self):
|
|
tcl = self.interp
|
|
tcl.eval('set a(1) 1')
|
|
self.assertEqual(tcl.getvar('a(1)'),'1')
|
|
|
|
def testGetVarException(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.getvar,'a')
|
|
|
|
def testGetVarArrayException(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.getvar,'a(1)')
|
|
|
|
def testUnsetVar(self):
|
|
tcl = self.interp
|
|
tcl.setvar('a',1)
|
|
self.assertEqual(tcl.eval('info exists a'),'1')
|
|
tcl.unsetvar('a')
|
|
self.assertEqual(tcl.eval('info exists a'),'0')
|
|
|
|
def testUnsetVarArray(self):
|
|
tcl = self.interp
|
|
tcl.setvar('a(1)',1)
|
|
tcl.setvar('a(2)',2)
|
|
self.assertEqual(tcl.eval('info exists a(1)'),'1')
|
|
self.assertEqual(tcl.eval('info exists a(2)'),'1')
|
|
tcl.unsetvar('a(1)')
|
|
self.assertEqual(tcl.eval('info exists a(1)'),'0')
|
|
self.assertEqual(tcl.eval('info exists a(2)'),'1')
|
|
|
|
def testUnsetVarException(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.unsetvar,'a')
|
|
|
|
def testEvalFile(self):
|
|
tcl = self.interp
|
|
filename = "testEvalFile.tcl"
|
|
fd = open(filename,'w')
|
|
script = """set a 1
|
|
set b 2
|
|
set c [ expr $a + $b ]
|
|
"""
|
|
fd.write(script)
|
|
fd.close()
|
|
tcl.evalfile(filename)
|
|
os.remove(filename)
|
|
self.assertEqual(tcl.eval('set a'),'1')
|
|
self.assertEqual(tcl.eval('set b'),'2')
|
|
self.assertEqual(tcl.eval('set c'),'3')
|
|
|
|
def testEvalFileException(self):
|
|
tcl = self.interp
|
|
filename = "doesnotexists"
|
|
try:
|
|
os.remove(filename)
|
|
except Exception,e:
|
|
pass
|
|
self.assertRaises(TclError,tcl.evalfile,filename)
|
|
|
|
def testPackageRequireException(self):
|
|
tcl = self.interp
|
|
self.assertRaises(TclError,tcl.eval,'package require DNE')
|
|
|
|
def testLoadTk(self):
|
|
import os
|
|
if 'DISPLAY' not in os.environ:
|
|
# skipping test of clean upgradeability
|
|
return
|
|
tcl = Tcl()
|
|
self.assertRaises(TclError,tcl.winfo_geometry)
|
|
tcl.loadtk()
|
|
self.assertEqual('1x1+0+0', tcl.winfo_geometry())
|
|
|
|
def testLoadTkFailure(self):
|
|
import os
|
|
old_display = None
|
|
import sys
|
|
if sys.platform.startswith('win') or sys.platform.startswith('darwin'):
|
|
return # no failure possible on windows?
|
|
if 'DISPLAY' in os.environ:
|
|
old_display = os.environ['DISPLAY']
|
|
del os.environ['DISPLAY']
|
|
# on some platforms, deleting environment variables
|
|
# doesn't actually carry through to the process level
|
|
# because they don't support unsetenv
|
|
# If that's the case, abort.
|
|
display = os.popen('echo $DISPLAY').read().strip()
|
|
if display:
|
|
return
|
|
try:
|
|
tcl = Tcl()
|
|
self.assertRaises(TclError, tcl.winfo_geometry)
|
|
self.assertRaises(TclError, tcl.loadtk)
|
|
finally:
|
|
if old_display is not None:
|
|
os.environ['DISPLAY'] = old_display
|
|
|
|
def test_main():
|
|
test_support.run_unittest(TclTest)
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|