Home | History | Annotate | Download | only in test
      1 #!/usr/bin/env python
      2 
      3 import unittest
      4 import sys
      5 import os
      6 from test import test_support
      7 from subprocess import Popen, PIPE
      8 
      9 # Skip this test if the _tkinter module wasn't built.
     10 _tkinter = test_support.import_module('_tkinter')
     11 
     12 from Tkinter import Tcl
     13 from _tkinter import TclError
     14 
     15 
     16 class TkinterTest(unittest.TestCase):
     17 
     18     def testFlattenLen(self):
     19         # flatten(<object with no length>)
     20         self.assertRaises(TypeError, _tkinter._flatten, True)
     21 
     22 
     23 class TclTest(unittest.TestCase):
     24 
     25     def setUp(self):
     26         self.interp = Tcl()
     27 
     28     def testEval(self):
     29         tcl = self.interp
     30         tcl.eval('set a 1')
     31         self.assertEqual(tcl.eval('set a'),'1')
     32 
     33     def testEvalException(self):
     34         tcl = self.interp
     35         self.assertRaises(TclError,tcl.eval,'set a')
     36 
     37     def testEvalException2(self):
     38         tcl = self.interp
     39         self.assertRaises(TclError,tcl.eval,'this is wrong')
     40 
     41     def testCall(self):
     42         tcl = self.interp
     43         tcl.call('set','a','1')
     44         self.assertEqual(tcl.call('set','a'),'1')
     45 
     46     def testCallException(self):
     47         tcl = self.interp
     48         self.assertRaises(TclError,tcl.call,'set','a')
     49 
     50     def testCallException2(self):
     51         tcl = self.interp
     52         self.assertRaises(TclError,tcl.call,'this','is','wrong')
     53 
     54     def testSetVar(self):
     55         tcl = self.interp
     56         tcl.setvar('a','1')
     57         self.assertEqual(tcl.eval('set a'),'1')
     58 
     59     def testSetVarArray(self):
     60         tcl = self.interp
     61         tcl.setvar('a(1)','1')
     62         self.assertEqual(tcl.eval('set a(1)'),'1')
     63 
     64     def testGetVar(self):
     65         tcl = self.interp
     66         tcl.eval('set a 1')
     67         self.assertEqual(tcl.getvar('a'),'1')
     68 
     69     def testGetVarArray(self):
     70         tcl = self.interp
     71         tcl.eval('set a(1) 1')
     72         self.assertEqual(tcl.getvar('a(1)'),'1')
     73 
     74     def testGetVarException(self):
     75         tcl = self.interp
     76         self.assertRaises(TclError,tcl.getvar,'a')
     77 
     78     def testGetVarArrayException(self):
     79         tcl = self.interp
     80         self.assertRaises(TclError,tcl.getvar,'a(1)')
     81 
     82     def testUnsetVar(self):
     83         tcl = self.interp
     84         tcl.setvar('a',1)
     85         self.assertEqual(tcl.eval('info exists a'),'1')
     86         tcl.unsetvar('a')
     87         self.assertEqual(tcl.eval('info exists a'),'0')
     88 
     89     def testUnsetVarArray(self):
     90         tcl = self.interp
     91         tcl.setvar('a(1)',1)
     92         tcl.setvar('a(2)',2)
     93         self.assertEqual(tcl.eval('info exists a(1)'),'1')
     94         self.assertEqual(tcl.eval('info exists a(2)'),'1')
     95         tcl.unsetvar('a(1)')
     96         self.assertEqual(tcl.eval('info exists a(1)'),'0')
     97         self.assertEqual(tcl.eval('info exists a(2)'),'1')
     98 
     99     def testUnsetVarException(self):
    100         tcl = self.interp
    101         self.assertRaises(TclError,tcl.unsetvar,'a')
    102 
    103     def testEvalFile(self):
    104         tcl = self.interp
    105         filename = "testEvalFile.tcl"
    106         fd = open(filename,'w')
    107         script = """set a 1
    108         set b 2
    109         set c [ expr $a + $b ]
    110         """
    111         fd.write(script)
    112         fd.close()
    113         tcl.evalfile(filename)
    114         os.remove(filename)
    115         self.assertEqual(tcl.eval('set a'),'1')
    116         self.assertEqual(tcl.eval('set b'),'2')
    117         self.assertEqual(tcl.eval('set c'),'3')
    118 
    119     def testEvalFileException(self):
    120         tcl = self.interp
    121         filename = "doesnotexists"
    122         try:
    123             os.remove(filename)
    124         except Exception,e:
    125             pass
    126         self.assertRaises(TclError,tcl.evalfile,filename)
    127 
    128     def testPackageRequireException(self):
    129         tcl = self.interp
    130         self.assertRaises(TclError,tcl.eval,'package require DNE')
    131 
    132     def testLoadWithUNC(self):
    133         import sys
    134         if sys.platform != 'win32':
    135             return
    136 
    137         # Build a UNC path from the regular path.
    138         # Something like
    139         #   \\%COMPUTERNAME%\c$\python27\python.exe
    140 
    141         fullname = os.path.abspath(sys.executable)
    142         if fullname[1] != ':':
    143             return
    144         unc_name = r'\\%s\%s$\%s' % (os.environ['COMPUTERNAME'],
    145                                     fullname[0],
    146                                     fullname[3:])
    147 
    148         with test_support.EnvironmentVarGuard() as env:
    149             env.unset("TCL_LIBRARY")
    150             cmd = '%s -c "import Tkinter; print Tkinter"' % (unc_name,)
    151 
    152             p = Popen(cmd, stdout=PIPE, stderr=PIPE)
    153             out_data, err_data = p.communicate()
    154 
    155             msg = '\n\n'.join(['"Tkinter.py" not in output',
    156                                'Command:', cmd,
    157                                'stdout:', out_data,
    158                                'stderr:', err_data])
    159 
    160             self.assertIn('Tkinter.py', out_data, msg)
    161 
    162             self.assertEqual(p.wait(), 0, 'Non-zero exit code')
    163 
    164 
    165     def test_passing_values(self):
    166         def passValue(value):
    167             return self.interp.call('set', '_', value)
    168         self.assertEqual(passValue(True), True)
    169         self.assertEqual(passValue(False), False)
    170         self.assertEqual(passValue('string'), 'string')
    171         self.assertEqual(passValue('string\u20ac'), 'string\u20ac')
    172         self.assertEqual(passValue(u'string'), u'string')
    173         self.assertEqual(passValue(u'string\u20ac'), u'string\u20ac')
    174         for i in (0, 1, -1, int(2**31-1), int(-2**31)):
    175             self.assertEqual(passValue(i), i)
    176         for f in (0.0, 1.0, -1.0, 1//3, 1/3.0,
    177                   sys.float_info.min, sys.float_info.max,
    178                   -sys.float_info.min, -sys.float_info.max):
    179             self.assertEqual(passValue(f), f)
    180         for f in float('nan'), float('inf'), -float('inf'):
    181             if f != f: # NaN
    182                 self.assertNotEqual(passValue(f), f)
    183             else:
    184                 self.assertEqual(passValue(f), f)
    185         self.assertEqual(passValue((1, '2', (3.4,))), (1, '2', (3.4,)))
    186 
    187 
    188 def test_main():
    189     test_support.run_unittest(TclTest, TkinterTest)
    190 
    191 if __name__ == "__main__":
    192     test_main()
    193