|
3 | 3 | from reactpy import component, config, html |
4 | 4 | from reactpy.testing import DisplayFixture, poll |
5 | 5 | from reactpy.utils import Ref |
6 | | -from tests.tooling.hooks import use_counter, use_toggle |
7 | | - |
8 | | - |
9 | | -async def test_script_mount_unmount(display: DisplayFixture): |
10 | | - toggle_is_mounted = Ref() |
11 | | - |
12 | | - @component |
13 | | - def Root(): |
14 | | - is_mounted, toggle_is_mounted.current = use_toggle(True) |
15 | | - return html.div( |
16 | | - html.div({"id": "mount-state", "data_value": False}), |
17 | | - HasScript() if is_mounted else html.div(), |
18 | | - ) |
19 | | - |
20 | | - @component |
21 | | - def HasScript(): |
22 | | - return html.script( |
23 | | - """() => { |
24 | | - const mapping = {"false": false, "true": true}; |
25 | | - const mountStateEl = document.getElementById("mount-state"); |
26 | | - mountStateEl.setAttribute( |
27 | | - "data-value", !mapping[mountStateEl.getAttribute("data-value")]); |
28 | | - return () => mountStateEl.setAttribute( |
29 | | - "data-value", !mapping[mountStateEl.getAttribute("data-value")]); |
30 | | - }""" |
31 | | - ) |
32 | | - |
33 | | - await display.show(Root) |
34 | | - |
35 | | - mount_state = await display.page.wait_for_selector("#mount-state", state="attached") |
36 | | - poll_mount_state = poll(mount_state.get_attribute, "data-value") |
37 | | - |
38 | | - await poll_mount_state.until_equals("true") |
39 | | - |
40 | | - toggle_is_mounted.current() |
41 | | - |
42 | | - await poll_mount_state.until_equals("false") |
43 | | - |
44 | | - toggle_is_mounted.current() |
45 | | - |
46 | | - await poll_mount_state.until_equals("true") |
| 6 | +from tests.tooling.hooks import use_counter |
47 | 7 |
|
48 | 8 |
|
49 | 9 | async def test_script_re_run_on_content_change(display: DisplayFixture): |
|
0 commit comments