def test_exception(self): stream = parsers.StreamBuffer() self.assertIsNone(stream.exception()) exc = ValueError() stream.set_exception(exc) self.assertIs(stream.exception(), exc)
def test_set_parser_exception(self): stream = parsers.StreamBuffer() exc = ValueError() stream.set_exception(exc) s = stream.set_parser(parsers.lines_parser()) self.assertIs(s.exception(), exc)
def test_set_parser_unset_prev(self): stream = parsers.StreamBuffer() stream.set_parser(parsers.lines_parser()) unset = stream.unset_parser = unittest.mock.Mock() stream.set_parser(parsers.lines_parser()) self.assertTrue(unset.called)
def test_exception_waiter(self): stream = parsers.StreamBuffer() stream._parser = parsers.lines_parser() buf = stream._parser_buffer = parsers.DataBuffer(loop=self.loop) exc = ValueError() stream.set_exception(exc) self.assertIs(buf.exception(), exc)
def test_set_parser_feed_existing_exc(self): def p(): yield # stream raise ValueError() stream = parsers.StreamBuffer() stream.feed_data(b'line1') s = stream.set_parser(p()) self.assertIsInstance(s.exception(), ValueError)
def test_set_parser_feed_existing_eof(self): stream = parsers.StreamBuffer() stream.feed_data(b'line1') stream.feed_data(b'\r\nline2\r\ndata') stream.feed_eof() s = stream.set_parser(parsers.lines_parser()) self.assertEqual([bytearray(b'line1\r\n'), bytearray(b'line2\r\n')], list(s._buffer)) self.assertEqual(b'data', bytes(stream._buffer)) self.assertIsNone(stream._parser)
def test_feed_parser2(self): stream = parsers.StreamBuffer() s = stream.set_parser(parsers.lines_parser()) stream.feed_data(b'line1\r\nline2\r\n') stream.feed_eof() self.assertEqual( [bytearray(b'line1\r\n'), bytearray(b'line2\r\n')], list(s._buffer)) self.assertEqual(b'', bytes(stream._buffer)) self.assertTrue(s._eof)
def test_feed_parser_stop(self): def p(): yield # stream yield # chunk stream = parsers.StreamBuffer() stream.set_parser(p()) stream.feed_data(b'line1') self.assertIsNone(stream._parser) self.assertEqual(b'', bytes(stream._buffer))
def test_feed_parser_exc(self): def p(): yield # stream yield # read chunk raise ValueError() stream = parsers.StreamBuffer() s = stream.set_parser(p()) stream.feed_data(b'line1') self.assertIsInstance(s.exception(), ValueError) self.assertEqual(b'', bytes(stream._buffer))
def test_unset_parser_eof_unhandled_eof(self): def p(): yield # stream while True: yield # read chunk stream = parsers.StreamBuffer() s = stream.set_parser(p()) stream.feed_data(b'line1') stream.unset_parser() self.assertIsNone(s.exception(), ValueError) self.assertTrue(s._eof)
def test_unset_parser_stop(self): def p(): out, buf = yield # stream try: while True: yield # read chunk except parsers.EofStream: out.feed_eof() stream = parsers.StreamBuffer() s = stream.set_parser(p()) stream.feed_data(b'line1') stream.unset_parser() self.assertTrue(s._eof)
def test_set_parser_feed_existing_eof_exc(self): def p(): yield # stream try: while True: yield # read chunk except parsers.EofStream: raise ValueError() stream = parsers.StreamBuffer() stream.feed_data(b'line1') stream.feed_eof() s = stream.set_parser(p()) self.assertIsInstance(s.exception(), ValueError)
def test_set_parser_feed_existing_stop(self): def lines_parser(): out, buf = yield try: out.feed_data((yield from buf.readuntil(b'\n'))) out.feed_data((yield from buf.readuntil(b'\n'))) finally: out.feed_eof() stream = parsers.StreamBuffer() stream.feed_data(b'line1') stream.feed_data(b'\r\nline2\r\ndata') s = stream.set_parser(lines_parser()) self.assertEqual(b'line1\r\nline2\r\n', b''.join(s._buffer)) self.assertEqual(b'data', bytes(stream._buffer)) self.assertIsNone(stream._parser) self.assertTrue(s._eof)
def test_feed_empty_data(self): stream = parsers.StreamBuffer() stream.feed_data(b'') self.assertEqual(b'', bytes(stream._buffer))
def test_feed_data(self): stream = parsers.StreamBuffer() stream.feed_data(self.DATA) self.assertEqual(self.DATA, bytes(stream._buffer))