(async_rendering)
| 1253 | |
| 1254 | |
| 1255 | async def test_async_renders(async_rendering): |
| 1256 | if not async_rendering: |
| 1257 | raise pytest.skip("Async rendering not enabled") |
| 1258 | |
| 1259 | child_1_hook = HookCatcher() |
| 1260 | child_2_hook = HookCatcher() |
| 1261 | child_1_rendered = Event() |
| 1262 | child_2_rendered = Event() |
| 1263 | child_1_render_count = Ref(0) |
| 1264 | child_2_render_count = Ref(0) |
| 1265 | |
| 1266 | @component |
| 1267 | def outer(): |
| 1268 | return html._(child_1(), child_2()) |
| 1269 | |
| 1270 | @component |
| 1271 | @child_1_hook.capture |
| 1272 | def child_1(): |
| 1273 | child_1_rendered.set() |
| 1274 | child_1_render_count.current += 1 |
| 1275 | |
| 1276 | @component |
| 1277 | @child_2_hook.capture |
| 1278 | def child_2(): |
| 1279 | child_2_rendered.set() |
| 1280 | child_2_render_count.current += 1 |
| 1281 | |
| 1282 | async with Layout(outer()) as layout: |
| 1283 | await layout.render() |
| 1284 | |
| 1285 | # clear render events and counts |
| 1286 | child_1_rendered.clear() |
| 1287 | child_2_rendered.clear() |
| 1288 | child_1_render_count.current = 0 |
| 1289 | child_2_render_count.current = 0 |
| 1290 | |
| 1291 | # we schedule two renders but expect only one |
| 1292 | child_1_hook.latest.schedule_render() |
| 1293 | child_1_hook.latest.schedule_render() |
| 1294 | child_2_hook.latest.schedule_render() |
| 1295 | child_2_hook.latest.schedule_render() |
| 1296 | |
| 1297 | await child_1_rendered.wait() |
| 1298 | await child_2_rendered.wait() |
| 1299 | |
| 1300 | assert child_1_render_count.current == 1 |
| 1301 | assert child_2_render_count.current == 1 |
| 1302 | |
| 1303 | |
| 1304 | async def test_none_does_not_render(): |
nothing calls this directly
no test coverage detected