158 lines
4.5 KiB
Python
158 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())
|
||
|
tcl.destroy()
|
||
|
|
||
|
def testLoadTkFailure(self):
|
||
|
import os
|
||
|
old_display = None
|
||
|
import sys
|
||
|
if sys.platform.startswith(('win', 'darwin', 'cygwin')):
|
||
|
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()
|