diff -r e0f84f668a19 Lib/test/test_os_jy.py --- a/Lib/test/test_os_jy.py Thu Mar 19 17:06:53 2015 -0700 +++ b/Lib/test/test_os_jy.py Fri Mar 20 16:43:54 2015 -0700 @@ -4,13 +4,15 @@ Made for Jython. """ +import os +import sys +import glob import array import errno -import glob -import os +import struct +import unittest import subprocess -import sys -import unittest + from test import test_support from java.io import File @@ -74,6 +76,55 @@ content = f.read() self.assertEqual(content, 2 * b'onetwothree') + def test_issue1011(self): + # prepare the input file containing 256 bytes of sorted byte-sized numbers + fd = file(test_support.TESTFN, 'wb') + try: + for x in range(256): + fd.write(chr(x)) + finally: + fd.close() + + # reopen in read/append mode + fd = file(test_support.TESTFN, 'rb+') + + try: + # read forward from the beginning + for x in range(256): + pos = fd.tell() + self.assertEqual(pos, x, + '[forward] before read: pos should be %d but is %d' % (x, pos)) + + # read just one byte + c = struct.unpack('B', fd.read(1))[0] + + pos = fd.tell() + self.assertEqual(pos, x + 1, + '[forward] after read: pos should be %d but is %d' % (x + 1, pos)) + + self.assertEqual(c, x) + + # read backward from the end + fd.seek(-1, 2) # seek from the end + for x in range(255, -1, -1): + pos = fd.tell() + self.assertEqual(pos, x, + '[backward] before read: pos should be %d but is %d' % (x, pos)) + + # read just one byte + c = ord(fd.read(1)) + + pos = fd.tell() + self.assertEqual(pos, x + 1, + '[backward] after read: pos should be %d but is %d' % (x + 1, pos)) + + self.assertEqual(c, x) + + if x > 0: + fd.seek(-2, 1) # seek backwards two bytes from current position + finally: + fd.close() + class OSDirTestCase(unittest.TestCase):