1 # Tests StringIO and cStringIO
7 from test
import test_support
10 class TestGenericStringIO(unittest
.TestCase
):
11 # use a class variable MODULE to define which module is being tested
13 # Line of data to test as string
14 _line
= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!'
16 # Constructor to use for the test data (._line is passed to this
21 self
._line
= self
.constructor(self
._line
)
22 self
._lines
= self
.constructor((self
._line
+ '\n') * 5)
23 self
._fp
= self
.MODULE
.StringIO(self
._lines
)
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)
31 def test_writes(self
):
32 f
= self
.MODULE
.StringIO()
33 f
.write(self
._line
[:6])
35 f
.write(self
._line
[20:26])
36 f
.write(self
._line
[52])
37 self
.assertEqual(f
.getvalue(), 'abcuvwxyz!')
39 def test_writelines(self
):
40 f
= self
.MODULE
.StringIO()
41 f
.writelines([self
._line
[0], self
._line
[1], self
._line
[2]])
43 self
.assertEqual(f
.getvalue(), 'abc')
45 def test_truncate(self
):
47 f
= self
.MODULE
.StringIO()
51 eq(f
.getvalue(), 'abcdefghij')
54 eq(f
.getvalue(), 'abcde')
56 self
.assertRaises(ValueError, f
.write
, 'frobnitz')
58 def test_iterator(self
):
60 unless
= self
.failUnless
61 eq(iter(self
._fp
), self
._fp
)
62 # Does this object support the iteration protocol?
63 unless(hasattr(self
._fp
, '__iter__'))
64 unless(hasattr(self
._fp
, 'next'))
67 eq(line
, self
._line
+ '\n')
71 class TestStringIO(TestGenericStringIO
):
74 def test_unicode(self
):
76 if not test_support
.have_unicode
: return
78 # The StringIO module also supports concatenating Unicode
79 # snippets to larger Unicode strings. This is tested by this
80 # method. Note that cStringIO does not support this extension.
82 f
= self
.MODULE
.StringIO()
83 f
.write(self
._line
[:6])
85 f
.write(unicode(self
._line
[20:26]))
86 f
.write(unicode(self
._line
[52]))
88 self
.assertEqual(s
, unicode('abcuvwxyz!'))
89 self
.assertEqual(type(s
), types
.UnicodeType
)
91 class TestcStringIO(TestGenericStringIO
):
95 if sys
.platform
.startswith('java'):
96 # Jython doesn't have a buffer object, so we just do a useless
97 # fake of the buffer tests.
100 class TestBufferStringIO(TestStringIO
):
103 class TestBuffercStringIO(TestcStringIO
):
108 test_support
.run_unittest(TestStringIO
)
109 test_support
.run_unittest(TestcStringIO
)
110 test_support
.run_unittest(TestBufferStringIO
)
111 test_support
.run_unittest(TestBuffercStringIO
)
113 if __name__
== '__main__':