| #!/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 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() |