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 self
.assertRaises(TypeError, self
._fp
.seek
)
28 eq(self
._fp
.read(10), self
._line
[:10])
29 eq(self
._fp
.readline(), self
._line
[10:] + '\n')
30 eq(len(self
._fp
.readlines(60)), 2)
32 def test_writes(self
):
33 f
= self
.MODULE
.StringIO()
34 self
.assertRaises(TypeError, f
.seek
)
35 f
.write(self
._line
[:6])
37 f
.write(self
._line
[20:26])
38 f
.write(self
._line
[52])
39 self
.assertEqual(f
.getvalue(), 'abcuvwxyz!')
41 def test_writelines(self
):
42 f
= self
.MODULE
.StringIO()
43 f
.writelines([self
._line
[0], self
._line
[1], self
._line
[2]])
45 self
.assertEqual(f
.getvalue(), 'abc')
47 def test_writelines_error(self
):
50 raise KeyboardInterrupt()
51 f
= self
.MODULE
.StringIO()
52 self
.assertRaises(KeyboardInterrupt, f
.writelines
, errorGen())
54 def test_truncate(self
):
56 f
= self
.MODULE
.StringIO()
60 eq(f
.getvalue(), 'abcdefghij')
62 eq(f
.getvalue(), 'abcde')
64 eq(f
.getvalue(), 'abcdexyz')
65 self
.assertRaises(IOError, f
.truncate
, -1)
67 self
.assertRaises(ValueError, f
.write
, 'frobnitz')
69 def test_closed_flag(self
):
70 f
= self
.MODULE
.StringIO()
71 self
.assertEqual(f
.closed
, False)
73 self
.assertEqual(f
.closed
, True)
74 f
= self
.MODULE
.StringIO("abc")
75 self
.assertEqual(f
.closed
, False)
77 self
.assertEqual(f
.closed
, True)
79 def test_isatty(self
):
80 f
= self
.MODULE
.StringIO()
81 self
.assertRaises(TypeError, f
.isatty
, None)
82 self
.assertEqual(f
.isatty(), False)
84 self
.assertRaises(ValueError, f
.isatty
)
86 def test_iterator(self
):
88 unless
= self
.assertTrue
89 eq(iter(self
._fp
), self
._fp
)
90 # Does this object support the iteration protocol?
91 unless(hasattr(self
._fp
, '__iter__'))
92 unless(hasattr(self
._fp
, 'next'))
95 eq(line
, self
._line
+ '\n')
99 self
.assertRaises(ValueError, self
._fp
.next
)
101 class TestStringIO(TestGenericStringIO
):
104 def test_unicode(self
):
106 if not test_support
.have_unicode
: return
108 # The StringIO module also supports concatenating Unicode
109 # snippets to larger Unicode strings. This is tested by this
110 # method. Note that cStringIO does not support this extension.
112 f
= self
.MODULE
.StringIO()
113 f
.write(self
._line
[:6])
115 f
.write(unicode(self
._line
[20:26]))
116 f
.write(unicode(self
._line
[52]))
118 self
.assertEqual(s
, unicode('abcuvwxyz!'))
119 self
.assertEqual(type(s
), types
.UnicodeType
)
121 class TestcStringIO(TestGenericStringIO
):
125 if sys
.platform
.startswith('java'):
126 # Jython doesn't have a buffer object, so we just do a useless
127 # fake of the buffer tests.
130 class TestBufferStringIO(TestStringIO
):
133 class TestBuffercStringIO(TestcStringIO
):
138 test_support
.run_unittest(
145 if __name__
== '__main__':