173 lines
5.0 KiB
Python
173 lines
5.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
import unittest
|
|
import os
|
|
import _tkinter
|
|
from test import test_support
|
|
from Tkinter import Tk, Tcl
|
|
from _tkinter import TclError
|
|
|
|
# Restore Tkinter.Tk._loadtk that may have been overridden by ttk.
|
|
# If this is not done then this test may fail for reasons related
|
|
# to ttk only (like failing to load the tile package).
|
|
from ttk import __loadtk__
|
|
Tk._loadtk = __loadtk__
|
|
|
|
|
|
class TkinterTest(unittest.TestCase):
|
|
|
|
def testFlattenLen(self):
|
|
# flatten(<object with no length>)
|
|
self.assertRaises(TypeError, _tkinter._flatten, True)
|
|
|
|
|
|
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, TkinterTest)
|
|
|
|
if __name__ == "__main__":
|
|
test_main()
|