def test_websocket_scope_interface(): """ A WebSocket can be instantiated with a scope, and presents a `Mapping` interface. """ async def mock_receive() -> Message: ... # pragma: no cover async def mock_send(message: Message) -> None: ... # pragma: no cover websocket = WebSocket( { "type": "websocket", "path": "/abc/", "headers": [] }, receive=mock_receive, send=mock_send, ) assert websocket["type"] == "websocket" assert dict(websocket) == { "type": "websocket", "path": "/abc/", "headers": [] } assert len(websocket) == 3
async def app_after_close(scope, receive, send): websocket = WebSocket(scope, receive=receive, send=send) await websocket.accept() await websocket.close() with pytest.raises(RuntimeError): await websocket.send_text("after close")
async def app_close(scope, receive, send): websocket = WebSocket(scope, receive=receive, send=send) await websocket.accept() await websocket.close(1001)
async def reader(websocket: WebSocket, queue: "asyncio.Queue[str]") -> None: async for data in websocket.iter_text(): await queue.put(data)
async def app(websocket: WebSocket) -> None: await websocket.accept() async for data in websocket.iter_bytes(): await websocket.send_bytes(b"Message was: " + data)