| # Copyright 2009-2011 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| import array |
| import tempfile |
| |
| from portage import _unicode_decode |
| from portage import _unicode_encode |
| from portage.tests import TestCase |
| |
| class ArrayFromfileEofTestCase(TestCase): |
| |
| def testArrayFromfileEof(self): |
| # This tests if the following python issue is fixed |
| # in the currently running version of python: |
| # http://bugs.python.org/issue5334 |
| |
| input_data = "an arbitrary string" |
| input_bytes = _unicode_encode(input_data, |
| encoding='utf_8', errors='strict') |
| f = tempfile.TemporaryFile() |
| f.write(input_bytes) |
| |
| f.seek(0) |
| data = [] |
| eof = False |
| while not eof: |
| a = array.array('B') |
| try: |
| a.fromfile(f, len(input_bytes) + 1) |
| except (EOFError, IOError): |
| # python-3.0 lost data here |
| eof = True |
| |
| if not a: |
| eof = True |
| else: |
| try: |
| # Python >=3.2 |
| data.append(a.tobytes()) |
| except AttributeError: |
| data.append(a.tostring()) |
| |
| f.close() |
| |
| self.assertEqual(input_data, _unicode_decode(b''.join(data), |
| encoding='utf_8', errors='strict')) |