# Copyright 2009 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) # EOFError was raised in Python <2.6.6 and <2.7.1. except (EOFError, IOError): # python-3.0 lost data here eof = True if not a: eof = True else: data.append(_unicode_decode(a.tostring(), encoding='utf_8', errors='strict')) f.close() self.assertEqual(input_data, ''.join(data))