#!/usr/bin/env python | |
import unittest | |
import os | |
from test import test_support | |
# Skip this test if the _tkinter module wasn't built. | |
_tkinter = test_support.import_module('_tkinter') | |
from Tkinter import Tcl | |
from _tkinter import TclError | |
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 testLoadWithUNC(self): | |
import sys | |
if sys.platform != 'win32': | |
return | |
# Build a UNC path from the regular path. | |
# Something like | |
# \\%COMPUTERNAME%\c$\python27\python.exe | |
fullname = os.path.abspath(sys.executable) | |
if fullname[1] != ':': | |
return | |
unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'], | |
fullname[0], | |
fullname[3:]) | |
with test_support.EnvironmentVarGuard() as env: | |
env.unset("TCL_LIBRARY") | |
f = os.popen('%s -c "import Tkinter; print Tkinter"' % (unc_name,)) | |
self.assertTrue('Tkinter.py' in f.read()) | |
# exit code must be zero | |
self.assertEqual(f.close(), None) | |
def test_main(): | |
test_support.run_unittest(TclTest, TkinterTest) | |
if __name__ == "__main__": | |
test_main() |