home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 July / maximum-cd-2011-07.iso / DiscContents / LibO_3.3.2_Win_x86_install_multi.exe / libreoffice1.cab / test_print.py < prev    next >
Encoding:
Python Source  |  2011-03-15  |  3.8 KB  |  120 lines

  1. """Test correct operation of the print function.
  2. """
  3.  
  4. # In 2.6, this gives us the behavior we want.  In 3.0, it has
  5. #  no function, but it still must parse correctly.
  6. from __future__ import print_function
  7.  
  8. import unittest
  9. from test import test_support
  10.  
  11. import sys
  12. if sys.version_info[0] == 3:
  13.     # 3.x
  14.     from io import StringIO
  15. else:
  16.     # 2.x
  17.     from StringIO import StringIO
  18.  
  19. NotDefined = object()
  20.  
  21. # A dispatch table all 8 combinations of providing
  22. #  sep, end, and file
  23. # I use this machinery so that I'm not just passing default
  24. #  values to print, I'm eiher passing or not passing in the
  25. #  arguments
  26. dispatch = {
  27.     (False, False, False):
  28.      lambda args, sep, end, file: print(*args),
  29.     (False, False, True):
  30.      lambda args, sep, end, file: print(file=file, *args),
  31.     (False, True,  False):
  32.      lambda args, sep, end, file: print(end=end, *args),
  33.     (False, True,  True):
  34.      lambda args, sep, end, file: print(end=end, file=file, *args),
  35.     (True,  False, False):
  36.      lambda args, sep, end, file: print(sep=sep, *args),
  37.     (True,  False, True):
  38.      lambda args, sep, end, file: print(sep=sep, file=file, *args),
  39.     (True,  True,  False):
  40.      lambda args, sep, end, file: print(sep=sep, end=end, *args),
  41.     (True,  True,  True):
  42.      lambda args, sep, end, file: print(sep=sep, end=end, file=file, *args),
  43.     }
  44.  
  45. # Class used to test __str__ and print
  46. class ClassWith__str__:
  47.     def __init__(self, x):
  48.         self.x = x
  49.     def __str__(self):
  50.         return self.x
  51.  
  52. class TestPrint(unittest.TestCase):
  53.     def check(self, expected, args,
  54.             sep=NotDefined, end=NotDefined, file=NotDefined):
  55.         # Capture sys.stdout in a StringIO.  Call print with args,
  56.         #  and with sep, end, and file, if they're defined.  Result
  57.         #  must match expected.
  58.  
  59.         # Look up the actual function to call, based on if sep, end, and file
  60.         #  are defined
  61.         fn = dispatch[(sep is not NotDefined,
  62.                        end is not NotDefined,
  63.                        file is not NotDefined)]
  64.  
  65.         with test_support.captured_stdout() as t:
  66.             fn(args, sep, end, file)
  67.  
  68.         self.assertEqual(t.getvalue(), expected)
  69.  
  70.     def test_print(self):
  71.         def x(expected, args, sep=NotDefined, end=NotDefined):
  72.             # Run the test 2 ways: not using file, and using
  73.             #  file directed to a StringIO
  74.  
  75.             self.check(expected, args, sep=sep, end=end)
  76.  
  77.             # When writing to a file, stdout is expected to be empty
  78.             o = StringIO()
  79.             self.check('', args, sep=sep, end=end, file=o)
  80.  
  81.             # And o will contain the expected output
  82.             self.assertEqual(o.getvalue(), expected)
  83.  
  84.         x('\n', ())
  85.         x('a\n', ('a',))
  86.         x('None\n', (None,))
  87.         x('1 2\n', (1, 2))
  88.         x('1   2\n', (1, ' ', 2))
  89.         x('1*2\n', (1, 2), sep='*')
  90.         x('1 s', (1, 's'), end='')
  91.         x('a\nb\n', ('a', 'b'), sep='\n')
  92.         x('1.01', (1.0, 1), sep='', end='')
  93.         x('1*a*1.3+', (1, 'a', 1.3), sep='*', end='+')
  94.         x('a\n\nb\n', ('a\n', 'b'), sep='\n')
  95.         x('\0+ +\0\n', ('\0', ' ', '\0'), sep='+')
  96.  
  97.         x('a\n b\n', ('a\n', 'b'))
  98.         x('a\n b\n', ('a\n', 'b'), sep=None)
  99.         x('a\n b\n', ('a\n', 'b'), end=None)
  100.         x('a\n b\n', ('a\n', 'b'), sep=None, end=None)
  101.  
  102.         x('*\n', (ClassWith__str__('*'),))
  103.         x('abc 1\n', (ClassWith__str__('abc'), 1))
  104.  
  105.         # 2.x unicode tests
  106.         x(u'1 2\n', ('1', u'2'))
  107.         x(u'u\1234\n', (u'u\1234',))
  108.         x(u'  abc 1\n', (' ', ClassWith__str__(u'abc'), 1))
  109.  
  110.         # errors
  111.         self.assertRaises(TypeError, print, '', sep=3)
  112.         self.assertRaises(TypeError, print, '', end=3)
  113.         self.assertRaises(AttributeError, print, '', file='')
  114.  
  115. def test_main():
  116.     test_support.run_unittest(TestPrint)
  117.  
  118. if __name__ == "__main__":
  119.     test_main()
  120.