Ignore:
Timestamp:
Mar 19, 2014, 11:31:01 PM (11 years ago)
Author:
dmik
Message:

python: Merge vendor 2.7.6 to trunk.

Location:
python/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • python/trunk

  • python/trunk/Lib/test/test_StringIO.py

    r2 r391  
    55import cStringIO
    66import types
     7import array
     8import sys
    79from test import test_support
    810
     
    1921
    2022    def setUp(self):
    21         self._line = self.constructor(self._line)
    2223        self._lines = self.constructor((self._line + '\n') * 5)
    2324        self._fp = self.MODULE.StringIO(self._lines)
     
    2728        self.assertRaises(TypeError, self._fp.seek)
    2829        eq(self._fp.read(10), self._line[:10])
     30        eq(self._fp.read(0), '')
     31        eq(self._fp.readline(0), '')
    2932        eq(self._fp.readline(), self._line[10:] + '\n')
    3033        eq(len(self._fp.readlines(60)), 2)
     
    8891    def test_iterator(self):
    8992        eq = self.assertEqual
    90         unless = self.failUnless
     93        unless = self.assertTrue
    9194        eq(iter(self._fp), self._fp)
    9295        # Does this object support the iteration protocol?
     
    101104        self.assertRaises(ValueError, self._fp.next)
    102105
     106    def test_getvalue(self):
     107        self._fp.close()
     108        self.assertRaises(ValueError, self._fp.getvalue)
     109
     110    @test_support.bigmemtest(test_support._2G + 2**26, memuse=2.001)
     111    def test_reads_from_large_stream(self, size):
     112        linesize = 2**26 # 64 MiB
     113        lines = ['x' * (linesize - 1) + '\n'] * (size // linesize) + \
     114                ['y' * (size % linesize)]
     115        f = self.MODULE.StringIO(''.join(lines))
     116        for i, expected in enumerate(lines):
     117            line = f.read(len(expected))
     118            self.assertEqual(len(line), len(expected))
     119            self.assertEqual(line, expected)
     120        self.assertEqual(f.read(), '')
     121        f.seek(0)
     122        for i, expected in enumerate(lines):
     123            line = f.readline()
     124            self.assertEqual(len(line), len(expected))
     125            self.assertEqual(line, expected)
     126        self.assertEqual(f.readline(), '')
     127        f.seek(0)
     128        self.assertEqual(f.readlines(), lines)
     129        self.assertEqual(f.readlines(), [])
     130        f.seek(0)
     131        self.assertEqual(f.readlines(size), lines)
     132        self.assertEqual(f.readlines(), [])
     133
     134    # In worst case cStringIO requires 2 + 1 + 1/2 + 1/2**2 + ... = 4
     135    # bytes per input character.
     136    @test_support.bigmemtest(test_support._2G, memuse=4)
     137    def test_writes_to_large_stream(self, size):
     138        s = 'x' * 2**26 # 64 MiB
     139        f = self.MODULE.StringIO()
     140        n = size
     141        while n > len(s):
     142            f.write(s)
     143            n -= len(s)
     144        s = None
     145        f.write('x' * n)
     146        self.assertEqual(len(f.getvalue()), size)
     147
     148
    103149class TestStringIO(TestGenericStringIO):
    104150    MODULE = StringIO
     
    124170    MODULE = cStringIO
    125171
     172    def test_array_support(self):
     173        # Issue #1730114: cStringIO should accept array objects
     174        a = array.array('B', [0,1,2])
     175        f = self.MODULE.StringIO(a)
     176        self.assertEqual(f.getvalue(), '\x00\x01\x02')
     177
     178    def test_unicode(self):
     179
     180        if not test_support.have_unicode: return
     181
     182        # The cStringIO module converts Unicode strings to character
     183        # strings when writing them to cStringIO objects.
     184        # Check that this works.
     185
     186        f = self.MODULE.StringIO()
     187        f.write(u'abcde')
     188        s = f.getvalue()
     189        self.assertEqual(s, 'abcde')
     190        self.assertEqual(type(s), str)
     191
     192        f = self.MODULE.StringIO(u'abcde')
     193        s = f.getvalue()
     194        self.assertEqual(s, 'abcde')
     195        self.assertEqual(type(s), str)
     196
     197        self.assertRaises(UnicodeEncodeError, self.MODULE.StringIO, u'\xf4')
     198
     199
    126200import sys
    127201if sys.platform.startswith('java'):
     
    136210    constructor = buffer
    137211
     212class TestMemoryviewcStringIO(TestcStringIO):
     213    constructor = memoryview
     214
    138215
    139216def test_main():
    140     test_support.run_unittest(
    141         TestStringIO,
    142         TestcStringIO,
    143         TestBufferStringIO,
    144         TestBuffercStringIO
    145     )
     217    test_support.run_unittest(TestStringIO, TestcStringIO)
     218    with test_support.check_py3k_warnings(("buffer.. not supported",
     219                                             DeprecationWarning)):
     220        test_support.run_unittest(TestBufferStringIO, TestBuffercStringIO)
     221    test_support.run_unittest(TestMemoryviewcStringIO)
    146222
    147223if __name__ == '__main__':
Note: See TracChangeset for help on using the changeset viewer.