asyncio.streams.StreamReader: Add 'at_eof()' method

This commit is contained in:
Yury Selivanov 2014-02-06 00:14:30 -05:00
parent e694c9745f
commit f0020f5d77
2 changed files with 19 additions and 0 deletions

View File

@ -293,6 +293,10 @@ class StreamReader:
if not waiter.cancelled():
waiter.set_result(True)
def at_eof(self):
"""Return True if the buffer is empty and 'feed_eof' was called."""
return self._eof and not self._buffer
def feed_data(self, data):
assert not self._eof, 'feed_data after feed_eof'

View File

@ -204,6 +204,21 @@ class StreamReaderTests(unittest.TestCase):
# expected to be empty now.
self.assertEqual(b'', stream._buffer)
def test_at_eof(self):
stream = asyncio.StreamReader(loop=self.loop)
self.assertFalse(stream.at_eof())
stream.feed_data(b'some data\n')
self.assertFalse(stream.at_eof())
self.loop.run_until_complete(stream.readline())
self.assertFalse(stream.at_eof())
stream.feed_data(b'some data\n')
stream.feed_eof()
self.loop.run_until_complete(stream.readline())
self.assertTrue(stream.at_eof())
def test_readline_limit(self):
# Read one line. StreamReaders are fed with data after
# their 'readline' methods are called.