summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-01-09 15:41:50 +0100
committerVictor Stinner <victor.stinner@gmail.com>2015-01-09 15:41:50 +0100
commit0fefcb7261413bc4656676378030f6161592e4d1 (patch)
treef1dc74ba5f8043383e98747faabe247c9ec39e79
parentaef31b1a43f6632ef37689c41d96a6edf9e62724 (diff)
downloadtrollius-git-0fefcb7261413bc4656676378030f6161592e4d1.tar.gz
Tulip issue #184: FlowControlMixin constructor now get the event loop if the
loop parameter is not set Add unit tests to ensure that constructor of StreamReader and StreamReaderProtocol classes get the event loop.
-rw-r--r--asyncio/streams.py10
-rw-r--r--tests/test_streams.py19
2 files changed, 26 insertions, 3 deletions
diff --git a/asyncio/streams.py b/asyncio/streams.py
index c77eb60..5a96b24 100644
--- a/asyncio/streams.py
+++ b/asyncio/streams.py
@@ -145,7 +145,10 @@ class FlowControlMixin(protocols.Protocol):
"""
def __init__(self, loop=None):
- self._loop = loop # May be None; we may never need it.
+ if loop is None:
+ self._loop = events.get_event_loop()
+ else:
+ self._loop = loop
self._paused = False
self._drain_waiter = None
self._connection_lost = False
@@ -306,8 +309,9 @@ class StreamReader:
# it also doubles as half the buffer limit.
self._limit = limit
if loop is None:
- loop = events.get_event_loop()
- self._loop = loop
+ self._loop = events.get_event_loop()
+ else:
+ self._loop = loop
self._buffer = bytearray()
self._eof = False # Whether we're done.
self._waiter = None # A future.
diff --git a/tests/test_streams.py b/tests/test_streams.py
index 05963cf..a18603a 100644
--- a/tests/test_streams.py
+++ b/tests/test_streams.py
@@ -625,6 +625,25 @@ os.close(fd)
data = self.loop.run_until_complete(reader.read(-1))
self.assertEqual(data, b'data')
+ def test_streamreader_constructor(self):
+ self.addCleanup(asyncio.set_event_loop, None)
+ asyncio.set_event_loop(self.loop)
+
+ # Tulip issue #184: Ensure that StreamReaderProtocol constructor
+ # retrieves the current loop if the loop parameter is not set
+ reader = asyncio.StreamReader()
+ self.assertIs(reader._loop, self.loop)
+
+ def test_streamreaderprotocol_constructor(self):
+ self.addCleanup(asyncio.set_event_loop, None)
+ asyncio.set_event_loop(self.loop)
+
+ # Tulip issue #184: Ensure that StreamReaderProtocol constructor
+ # retrieves the current loop if the loop parameter is not set
+ reader = mock.Mock()
+ protocol = asyncio.StreamReaderProtocol(reader)
+ self.assertIs(protocol._loop, self.loop)
+
if __name__ == '__main__':
unittest.main()