/Lib/test/test_tcl.py

http://unladen-swallow.googlecode.com/ · Python · 157 lines · 126 code · 25 blank · 6 comment · 10 complexity · 370ce29cf1bdc15094ac32ba044754d3 MD5 · raw file

  1. #!/usr/bin/env python
  2. import unittest
  3. import os
  4. from test import test_support
  5. from Tkinter import Tcl
  6. from _tkinter import TclError
  7. class TclTest(unittest.TestCase):
  8. def setUp(self):
  9. self.interp = Tcl()
  10. def testEval(self):
  11. tcl = self.interp
  12. tcl.eval('set a 1')
  13. self.assertEqual(tcl.eval('set a'),'1')
  14. def testEvalException(self):
  15. tcl = self.interp
  16. self.assertRaises(TclError,tcl.eval,'set a')
  17. def testEvalException2(self):
  18. tcl = self.interp
  19. self.assertRaises(TclError,tcl.eval,'this is wrong')
  20. def testCall(self):
  21. tcl = self.interp
  22. tcl.call('set','a','1')
  23. self.assertEqual(tcl.call('set','a'),'1')
  24. def testCallException(self):
  25. tcl = self.interp
  26. self.assertRaises(TclError,tcl.call,'set','a')
  27. def testCallException2(self):
  28. tcl = self.interp
  29. self.assertRaises(TclError,tcl.call,'this','is','wrong')
  30. def testSetVar(self):
  31. tcl = self.interp
  32. tcl.setvar('a','1')
  33. self.assertEqual(tcl.eval('set a'),'1')
  34. def testSetVarArray(self):
  35. tcl = self.interp
  36. tcl.setvar('a(1)','1')
  37. self.assertEqual(tcl.eval('set a(1)'),'1')
  38. def testGetVar(self):
  39. tcl = self.interp
  40. tcl.eval('set a 1')
  41. self.assertEqual(tcl.getvar('a'),'1')
  42. def testGetVarArray(self):
  43. tcl = self.interp
  44. tcl.eval('set a(1) 1')
  45. self.assertEqual(tcl.getvar('a(1)'),'1')
  46. def testGetVarException(self):
  47. tcl = self.interp
  48. self.assertRaises(TclError,tcl.getvar,'a')
  49. def testGetVarArrayException(self):
  50. tcl = self.interp
  51. self.assertRaises(TclError,tcl.getvar,'a(1)')
  52. def testUnsetVar(self):
  53. tcl = self.interp
  54. tcl.setvar('a',1)
  55. self.assertEqual(tcl.eval('info exists a'),'1')
  56. tcl.unsetvar('a')
  57. self.assertEqual(tcl.eval('info exists a'),'0')
  58. def testUnsetVarArray(self):
  59. tcl = self.interp
  60. tcl.setvar('a(1)',1)
  61. tcl.setvar('a(2)',2)
  62. self.assertEqual(tcl.eval('info exists a(1)'),'1')
  63. self.assertEqual(tcl.eval('info exists a(2)'),'1')
  64. tcl.unsetvar('a(1)')
  65. self.assertEqual(tcl.eval('info exists a(1)'),'0')
  66. self.assertEqual(tcl.eval('info exists a(2)'),'1')
  67. def testUnsetVarException(self):
  68. tcl = self.interp
  69. self.assertRaises(TclError,tcl.unsetvar,'a')
  70. def testEvalFile(self):
  71. tcl = self.interp
  72. filename = "testEvalFile.tcl"
  73. fd = open(filename,'w')
  74. script = """set a 1
  75. set b 2
  76. set c [ expr $a + $b ]
  77. """
  78. fd.write(script)
  79. fd.close()
  80. tcl.evalfile(filename)
  81. os.remove(filename)
  82. self.assertEqual(tcl.eval('set a'),'1')
  83. self.assertEqual(tcl.eval('set b'),'2')
  84. self.assertEqual(tcl.eval('set c'),'3')
  85. def testEvalFileException(self):
  86. tcl = self.interp
  87. filename = "doesnotexists"
  88. try:
  89. os.remove(filename)
  90. except Exception,e:
  91. pass
  92. self.assertRaises(TclError,tcl.evalfile,filename)
  93. def testPackageRequireException(self):
  94. tcl = self.interp
  95. self.assertRaises(TclError,tcl.eval,'package require DNE')
  96. def testLoadTk(self):
  97. import os
  98. if 'DISPLAY' not in os.environ:
  99. # skipping test of clean upgradeability
  100. return
  101. tcl = Tcl()
  102. self.assertRaises(TclError,tcl.winfo_geometry)
  103. tcl.loadtk()
  104. self.assertEqual('1x1+0+0', tcl.winfo_geometry())
  105. tcl.destroy()
  106. def testLoadTkFailure(self):
  107. import os
  108. old_display = None
  109. import sys
  110. if sys.platform.startswith(('win', 'darwin', 'cygwin')):
  111. return # no failure possible on windows?
  112. if 'DISPLAY' in os.environ:
  113. old_display = os.environ['DISPLAY']
  114. del os.environ['DISPLAY']
  115. # on some platforms, deleting environment variables
  116. # doesn't actually carry through to the process level
  117. # because they don't support unsetenv
  118. # If that's the case, abort.
  119. display = os.popen('echo $DISPLAY').read().strip()
  120. if display:
  121. return
  122. try:
  123. tcl = Tcl()
  124. self.assertRaises(TclError, tcl.winfo_geometry)
  125. self.assertRaises(TclError, tcl.loadtk)
  126. finally:
  127. if old_display is not None:
  128. os.environ['DISPLAY'] = old_display
  129. def test_main():
  130. test_support.run_unittest(TclTest)
  131. if __name__ == "__main__":
  132. test_main()