summaryrefslogtreecommitdiff
path: root/graph/test_browser.py
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-09-25 15:00:00 -0700
committerCliff Click <cliffc@acm.org>2026-09-25 15:00:00 -0700
commita32e83c9d81cfdb3759a2961d8b192ca44d75935 (patch)
tree9898306adf1a2d2432f333a50db5576999fb82c8 /graph/test_browser.py
parente9e02b18ee3223f2cfe1990be00674f9868e1a26 (diff)
downloadSimple-a32e83c9d81cfdb3759a2961d8b192ca44d75935.tar.gz
Simple-a32e83c9d81cfdb3759a2961d8b192ca44d75935.zip
Bunch more animation work
Diffstat (limited to 'graph/test_browser.py')
-rw-r--r--graph/test_browser.py22
1 files changed, 16 insertions, 6 deletions
diff --git a/graph/test_browser.py b/graph/test_browser.py
index 52cb5fa6..aa1015e1 100644
--- a/graph/test_browser.py
+++ b/graph/test_browser.py
@@ -45,14 +45,23 @@ def check(chapter, browser_name):
page = browser.new_page(viewport={"width": 1400, "height": 1000})
errors = []
page.on("pageerror", lambda error: errors.append(str(error)))
+ def step(button):
+ # Structural edits have gather/rewrite/release stages;
+ # this smoke check visits the next stable snapshot.
+ for _ in range(3):
+ page.locator(button).click()
+ page.wait_for_function("!rendering && !stepping")
+ if page.evaluate("!peep"):
+ return
+ raise AssertionError("Peephole did not reach a stable frame")
page.goto(url)
page.wait_for_function("done && current === 0 && !rendering", timeout=15000)
assert page.locator("#graph svg g.node").count() > 0
assert page.locator("#doPrev").is_disabled()
if number > 1:
- page.locator("#doNext").click()
+ step("#doNext")
page.wait_for_function("current === 1 && !rendering")
- page.locator("#doPrev").click()
+ step("#doPrev")
page.wait_for_function("current === 0 && !rendering")
sources = (("return 1;", "return 2;") if number == 1 else
("return 1 + 2;", "return 3 * 4;") if number == 2 else
@@ -70,11 +79,12 @@ def check(chapter, browser_name):
# Later chapters also parse library code. Sample long histories.
steps = (range(1, total) if total <= 100 else
sorted({1, total // 4, total // 2, 3 * total // 4, total - 2, total - 1}))
+ steps = sorted(set(page.evaluate("xs => xs.map(stable)", list(steps))) - {0})
print(chapter, total, "frames captured; rendering", len(steps) + 1, flush=True)
prev = 0
for index in steps:
- if index == prev + 1:
- page.locator("#doNext").click()
+ if index == page.evaluate("i => nextFrame(i,1)", prev):
+ step("#doNext")
else:
page.evaluate("index => render(index)", index)
page.wait_for_function("index => current === index && !rendering", arg=index)
@@ -90,9 +100,9 @@ def check(chapter, browser_name):
renderer.select(pickId);
layout.run = () => { throw new Error('Cached frame was laid out again'); };
}""")
- page.locator("#doPrev").click()
+ step("#doPrev")
page.wait_for_function("index => current === index && !rendering", arg=total - 2)
- page.locator("#doNext").click()
+ step("#doNext")
page.wait_for_function("index => current === index && !rendering", arg=total - 1)
assert page.evaluate("frames[current].layout === lastLayout && renderer.pick === pickId")
page.evaluate("delete layout.run")