home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 June / PCWorld_2005-06_cd.bin / software / vyzkuste / firewally / firewally.exe / framework-2.3.exe / test_StringIO.py < prev    next >
Text File  |  2003-12-30  |  4KB  |  127 lines

  1. # Tests StringIO and cStringIO
  2.  
  3. import unittest
  4. import StringIO
  5. import cStringIO
  6. import types
  7. from test import test_support
  8.  
  9.  
  10. class TestGenericStringIO(unittest.TestCase):
  11.     # use a class variable MODULE to define which module is being tested
  12.  
  13.     # Line of data to test as string
  14.     _line = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'
  15.  
  16.     # Constructor to use for the test data (._line is passed to this
  17.     # constructor)
  18.     constructor = str
  19.  
  20.     def setUp(self):
  21.         self._line = self.constructor(self._line)
  22.         self._lines = self.constructor((self._line + '\n') * 5)
  23.         self._fp = self.MODULE.StringIO(self._lines)
  24.  
  25.     def test_reads(self):
  26.         eq = self.assertEqual
  27.         eq(self._fp.read(10), self._line[:10])
  28.         eq(self._fp.readline(), self._line[10:] + '\n')
  29.         eq(len(self._fp.readlines(60)), 2)
  30.  
  31.     def test_writes(self):
  32.         f = self.MODULE.StringIO()
  33.         f.write(self._line[:6])
  34.         f.seek(3)
  35.         f.write(self._line[20:26])
  36.         f.write(self._line[52])
  37.         self.assertEqual(f.getvalue(), 'abcuvwxyz!')
  38.  
  39.     def test_writelines(self):
  40.         f = self.MODULE.StringIO()
  41.         f.writelines([self._line[0], self._line[1], self._line[2]])
  42.         f.seek(0)
  43.         self.assertEqual(f.getvalue(), 'abc')
  44.  
  45.     def test_truncate(self):
  46.         eq = self.assertEqual
  47.         f = self.MODULE.StringIO()
  48.         f.write(self._lines)
  49.         f.seek(10)
  50.         f.truncate()
  51.         eq(f.getvalue(), 'abcdefghij')
  52.         f.seek(0)
  53.         f.truncate(5)
  54.         eq(f.getvalue(), 'abcde')
  55.         f.close()
  56.         self.assertRaises(ValueError, f.write, 'frobnitz')
  57.  
  58.     def test_closed_flag(self):
  59.         f = self.MODULE.StringIO()
  60.         self.assertEqual(f.closed, False)
  61.         f.close()
  62.         self.assertEqual(f.closed, True)
  63.         f = self.MODULE.StringIO("abc")
  64.         self.assertEqual(f.closed, False)
  65.         f.close()
  66.         self.assertEqual(f.closed, True)
  67.  
  68.     def test_iterator(self):
  69.         eq = self.assertEqual
  70.         unless = self.failUnless
  71.         eq(iter(self._fp), self._fp)
  72.         # Does this object support the iteration protocol?
  73.         unless(hasattr(self._fp, '__iter__'))
  74.         unless(hasattr(self._fp, 'next'))
  75.         i = 0
  76.         for line in self._fp:
  77.             eq(line, self._line + '\n')
  78.             i += 1
  79.         eq(i, 5)
  80.  
  81. class TestStringIO(TestGenericStringIO):
  82.     MODULE = StringIO
  83.  
  84.     def test_unicode(self):
  85.  
  86.         if not test_support.have_unicode: return
  87.  
  88.         # The StringIO module also supports concatenating Unicode
  89.         # snippets to larger Unicode strings. This is tested by this
  90.         # method. Note that cStringIO does not support this extension.
  91.  
  92.         f = self.MODULE.StringIO()
  93.         f.write(self._line[:6])
  94.         f.seek(3)
  95.         f.write(unicode(self._line[20:26]))
  96.         f.write(unicode(self._line[52]))
  97.         s = f.getvalue()
  98.         self.assertEqual(s, unicode('abcuvwxyz!'))
  99.         self.assertEqual(type(s), types.UnicodeType)
  100.  
  101. class TestcStringIO(TestGenericStringIO):
  102.     MODULE = cStringIO
  103.  
  104. import sys
  105. if sys.platform.startswith('java'):
  106.     # Jython doesn't have a buffer object, so we just do a useless
  107.     # fake of the buffer tests.
  108.     buffer = str
  109.  
  110. class TestBufferStringIO(TestStringIO):
  111.     constructor = buffer
  112.  
  113. class TestBuffercStringIO(TestcStringIO):
  114.     constructor = buffer
  115.  
  116.  
  117. def test_main():
  118.     test_support.run_unittest(
  119.         TestStringIO,
  120.         TestcStringIO,
  121.         TestBufferStringIO,
  122.         TestBuffercStringIO
  123.     )
  124.  
  125. if __name__ == '__main__':
  126.     test_main()
  127.