(page: Page, server: Server)
| 57 | |
| 58 | |
| 59 | async def test_should_emit_frame_events(page: Page, server: Server) -> None: |
| 60 | def _handle_ws_connection(ws: WebSocketProtocol) -> None: |
| 61 | def _onMessage(payload: bytes, isBinary: bool) -> None: |
| 62 | ws.sendMessage(b"incoming", False) |
| 63 | ws.sendClose() |
| 64 | |
| 65 | setattr(ws, "onMessage", _onMessage) |
| 66 | |
| 67 | server.once_web_socket_connection(_handle_ws_connection) |
| 68 | log = [] |
| 69 | socket_close_future: "asyncio.Future[None]" = asyncio.Future() |
| 70 | |
| 71 | def on_web_socket(ws: WebSocket) -> None: |
| 72 | log.append("open") |
| 73 | |
| 74 | def _on_framesent(payload: Union[bytes, str]) -> None: |
| 75 | assert isinstance(payload, str) |
| 76 | log.append(f"sent<{payload}>") |
| 77 | |
| 78 | ws.on("framesent", _on_framesent) |
| 79 | |
| 80 | def _on_framereceived(payload: Union[bytes, str]) -> None: |
| 81 | assert isinstance(payload, str) |
| 82 | log.append(f"received<{payload}>") |
| 83 | |
| 84 | ws.on("framereceived", _on_framereceived) |
| 85 | |
| 86 | def _handle_close(ws: WebSocket) -> None: |
| 87 | log.append("close") |
| 88 | socket_close_future.set_result(None) |
| 89 | |
| 90 | ws.on("close", _handle_close) |
| 91 | |
| 92 | page.on("websocket", on_web_socket) |
| 93 | async with page.expect_event("websocket"): |
| 94 | await page.evaluate( |
| 95 | """port => { |
| 96 | const ws = new WebSocket('ws://localhost:' + port + '/ws'); |
| 97 | ws.addEventListener('open', () => ws.send('outgoing')); |
| 98 | ws.addEventListener('message', () => ws.close()) |
| 99 | }""", |
| 100 | server.PORT, |
| 101 | ) |
| 102 | await socket_close_future |
| 103 | assert log[0] == "open" |
| 104 | assert log[3] == "close" |
| 105 | log.sort() |
| 106 | assert log == ["close", "open", "received<incoming>", "sent<outgoing>"] |
| 107 | |
| 108 | |
| 109 | async def test_should_emit_binary_frame_events(page: Page, server: Server) -> None: |
nothing calls this directly
no test coverage detected