diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml new file mode 100644 index 00000000..6af805c8 --- /dev/null +++ b/.github/workflows/playwright.yml @@ -0,0 +1,44 @@ +name: Playwright Tests +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] +permissions: + contents: read +jobs: + test: + timeout-minutes: 60 + runs-on: ubuntu-latest + defaults: + run: + working-directory: test/screenshot-based + steps: + - uses: actions/checkout@v6 + with: + persist-credentials: false + + - name: Use OCaml 4.14.x + uses: ocaml/setup-ocaml@v3 + with: + ocaml-compiler: 4.14.x + + - name: Install OCaml dependencies + working-directory: . + run: opam install --deps-only -y . + + - name: Generate the HTML files + working-directory: . + run: opam exec -- dune build --profile release + + # In Playwright's Docker image, so that the rendering is the same as when + # the screenshots were generated + - name: Run Playwright tests + run: ./playwright-docker.sh + + - uses: actions/upload-artifact@v4 + if: ${{ !cancelled() }} + with: + name: playwright-report + path: test/screenshot-based/playwright-report/ + retention-days: 30 diff --git a/.gitignore b/.gitignore index fdaeff8f..405658a5 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,13 @@ docs/extra_html docs/doc-repl/main.js docs/_ext/__pycache__/ docs/_static/main.js + + +# Playwright +test/screenshot-based/node_modules/ +test/screenshot-based/test-results/ +test/screenshot-based/playwright-report/ +test/screenshot-based/blob-report/ +test/screenshot-based/playwright/.cache/ +test/screenshot-based/playwright/.auth/ +test/screenshot-based/**/*.html diff --git a/CHANGELOG.md b/CHANGELOG.md index e115ea7c..30331856 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,14 @@ ## unreleased +## Added + +- Screenshot-based regression tests (#286) + ## Fixed - Precompiled binaries for macOS no longer rely on Homebrew libraries (#146) +- Fixed some blurriness in Chrome related to zooming (#286) ## [v0.13.0] Juraslip Park (Satursday, the 5th of September, 2026) diff --git a/src/engine/runtime/universe/universe.css b/src/engine/runtime/universe/universe.css index 6c981692..d0d0e470 100644 --- a/src/engine/runtime/universe/universe.css +++ b/src/engine/runtime/universe/universe.css @@ -14,5 +14,5 @@ body { .slipshow-scale-container { /* contain: paint layout; */ - will-change: transform + /* will-change: transform is only set during zooms, see window.ml */ } diff --git a/src/engine/runtime/universe/window.ml b/src/engine/runtime/universe/window.ml index 0815f9d6..54ed5e63 100644 --- a/src/engine/runtime/universe/window.ml +++ b/src/engine/runtime/universe/window.ml @@ -73,6 +73,30 @@ let setup el = ~at:[ At.class' (Jstr.v "slipshow-rotate-container") ] [ scale_container ] in + (* [will-change: transform] makes Chrome keep the scale container rasterized + at the scale it had when the property was set, so the content is blurry + after a zoom. We only set it while a zoom is in progress (see + [move_pure]), and remove it once the transition is over so that the + content is rasterized again at the final scale. *) + let () = + let stop_will_change ev = + if + Jv.strict_equal + (Ev.target_to_jv (Ev.target ev)) + (El.to_jv scale_container) + then El.remove_inline_style (Jstr.v "will-change") scale_container + in + List.iter + (fun ev -> + let _listener : Ev.listener = + Ev.listen + (Ev.Type.create (Jstr.v ev)) + stop_will_change + (El.as_target scale_container) + in + ()) + [ "transitionend"; "transitioncancel" ] + in Brr.El.insert_siblings `Replace el [ rotate_container ]; Brr.El.append_children universe [ el ]; let+ () = @@ -143,6 +167,10 @@ let move_pure mode window ({ x; y; scale } as target : Coordinates.window) ( (TransitionTiming "", TransitionDelay 0.), (TransitionTiming "", TransitionDelay 0.) ) in + (* Only during a transition, see [setup] *) + if duration > 0. && scale <> (State.get_coord ()).scale then + El.set_inline_style (Jstr.v "will-change") (Jstr.v "transform") + window.scale_container; State.set_coord target; let x = -.x +. (width () /. 2.) in let y = -.y +. (height () /. 2.) in diff --git a/test/README.md b/test/README.md new file mode 100644 index 00000000..f085efb2 --- /dev/null +++ b/test/README.md @@ -0,0 +1,64 @@ +# Tests + +There are two kinds of tests + +## CLI tests + +CLI tests take the form of [cram tests](https://dune.readthedocs.io/en/stable/tests.html#cram-tests) + +Run them with: + +```shell +dune test +``` + +## Browser tests + +Browser tests take the form of screenshot tests, implemented using [playwright visual tests](https://playwright.dev/docs/test-snapshots). + +Running the tests is done in two steps, from the `screenshot-based` folder. + +First, generate the HTML files of all tests with dune: + +```shell +dune build --profile release +``` + +Each test folder has a `dune` file that compiles its `.slp` and `.md` entries +to HTML files next to them, with the same base name. When adding an entry to a +`run.json`, add the corresponding rule. + +Then, run the tests in [Playwright's Docker image](https://playwright.dev/docs/docker). +Browser rendering depends on the fonts and libraries of the host, so using the +same image everywhere ensures that the screenshots are the same locally and in +the CI. This only requires Docker, not OCaml nor the Playwright browsers: + +```shell +./playwright-docker.sh +``` + +The arguments of `playwright-docker.sh` are passed to `playwright test`. For +instance, to run only some tests, use `-g` with a regular expression matching +the test titles, which have the form `/ › step `, and +optionally `--project` to select a browser: + +```shell +# One test folder +./playwright-docker.sh -g 'math/' + +# One step of one entry, in one browser +./playwright-docker.sh -g 'bobkonf.html.*step 5$' --project=chromium +``` + +Use `.*` rather than the `›` separator, and end with `$` so that `step 5` does +not also match `step 50`. Add `--list` to see the selected tests without +running them, and `--update-snapshots` to accept the current rendering of the +selected tests. Screenshots generated outside of the Docker image may differ +slightly from the ones of the CI. + +To see the screenshots of failed tests, including the ones of the CI (download +the `playwright-report` artifact of the workflow run), use: + +```shell +npx playwright show-report +``` diff --git a/test/compiler/carousel.t/run.t b/test/compiler/carousel.t/run.t deleted file mode 100644 index 453c08fd..00000000 --- a/test/compiler/carousel.t/run.t +++ /dev/null @@ -1,3 +0,0 @@ - $ slipshow compile carousel.md - -$ cp carousel.html /tmp/ diff --git a/test/compiler/highlight-js.t/run.t b/test/compiler/highlight-js.t/run.t deleted file mode 100644 index 1f3c17f4..00000000 --- a/test/compiler/highlight-js.t/run.t +++ /dev/null @@ -1,4 +0,0 @@ - $ slipshow compile hljs.md - -$ cp hljs.html /tmp/ -$ firefox /tmp/hljs.html diff --git a/test/compiler/normal-slides.t/run.t b/test/compiler/normal-slides.t/run.t deleted file mode 100644 index 58f1e8f6..00000000 --- a/test/compiler/normal-slides.t/run.t +++ /dev/null @@ -1,5 +0,0 @@ -We can compile the file using the slip_of_mark binary - - $ slipshow compile slides.md - -$ cp slides.html /tmp/slides2.html diff --git a/test/compiler/svg.t/run.t b/test/compiler/svg.t/run.t deleted file mode 100644 index b737395a..00000000 --- a/test/compiler/svg.t/run.t +++ /dev/null @@ -1,3 +0,0 @@ - $ slipshow compile svg.md - -$ cp svg.html /tmp/ diff --git a/test/engine/action-arguments.t/run.t b/test/engine/action-arguments.t/run.t deleted file mode 100644 index 30b2b557..00000000 --- a/test/engine/action-arguments.t/run.t +++ /dev/null @@ -1,5 +0,0 @@ - - - $ slipshow compile actions.md -$ cp actions.html /tmp/ - diff --git a/test/engine/basic.t/new_engine.md b/test/engine/basic.t/new_engine.md deleted file mode 100644 index bd5f639f..00000000 --- a/test/engine/basic.t/new_engine.md +++ /dev/null @@ -1,256 +0,0 @@ -{#first-salut} -Salut ! - - - -{pause scroll .theorem title="Hello"} -AAAAAAAAAAAAAA A - -{pause scroll .definition} -AAAAAAAAAAAAAA A - -{pause scroll .definition title="Yoyo"} -AAAAAAAAAAAAAA A - -{pause scroll .corollary} -AAAAAAAAAAAAAA A - -{pause scroll .corollary title="Coco"} -AAAAAAAAAAAAAA A - -{pause scroll .remark} -AAAAAAAAAAAAAA A - -{pause scroll .remark title="Rere"} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - -{pause scroll} -AAAAAAAAAAAAAA A - - -{pause scroll=first-salut} - - - - - - -{pause exec} -```slip-script -log = function (slip, x) { // slip needs to be passed - console.log(x) - slip.onUndo(() => {console.log(x)}) -} -log(slip, slip.state.x); -slip.setProp(slip.state, "x", 1); -log(slip, slip.state.x); -``` - -{pause exec} -```slip-script -log(slip, slip.state.x); // 1 -``` - - -{pause exec} -```slip-script -let i = 0 -let incr = () => { - slip.onUndo(() => { console.log(--i)}) - console.log(i++); -} -incr(); -incr(); -incr(); -``` - - -{#a .unstatic} -[a]{#box1 .boxes} - -{#b .unstatic} -b - -{#c .unstatic} -c - -{pause static="a b c"} - -{pause up} -One - -{step up} -Two - -{pause up} -Three - - - -## Title 1 - -{pause #lehaut} -Lorem ipsum [dolor]{#box2 .boxes} sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - -{pause exec} -```slip-script -let x = document.querySelector("#lehaut"); -x.classList.add("red"); -let undo = {undo : () => {x.classList.remove("red")}}; -return undo; -``` - -- liste à points -- deuxième {pause} point -- troisième - -{pause focus="box1 box2"} - -{pause unfocus} -Hello - -{pause exec} -```slip-script -let elems = document.querySelectorAll(".boxes"); -slip.focus(elems); -``` - -{pause exec} -```slip-script -slip.onUndo(() => { console.log("Undoing") }) -``` - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - -## Title 3 - -{pause unfocus up} -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - -{pause} -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - -{pause up="lehaut"} -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - -{pause} -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - -{#myid} -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - -Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus. Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor. Nullam tristique diam non turpis. Cras placerat accumsan nulla. Nullam rutrum. Nam vestibulum accumsan nisl. - - diff --git a/test/engine/basic.t/run.t b/test/engine/basic.t/run.t deleted file mode 100644 index aaf4b7a4..00000000 --- a/test/engine/basic.t/run.t +++ /dev/null @@ -1,5 +0,0 @@ - - - $ slipshow compile new_engine.md -$ cp new_engine.html /tmp/ - diff --git a/test/engine/action-arguments.t/actions.md b/test/screenshot-based/action-arguments/actions.md similarity index 100% rename from test/engine/action-arguments.t/actions.md rename to test/screenshot-based/action-arguments/actions.md diff --git a/test/screenshot-based/action-arguments/dune b/test/screenshot-based/action-arguments/dune new file mode 100644 index 00000000..12f02154 --- /dev/null +++ b/test/screenshot-based/action-arguments/dune @@ -0,0 +1,5 @@ +(rule + (target actions.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:actions.md} -o %{target}))) diff --git a/test/screenshot-based/action-arguments/run.json b/test/screenshot-based/action-arguments/run.json new file mode 100644 index 00000000..de1d2ee3 --- /dev/null +++ b/test/screenshot-based/action-arguments/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "actions.md", "steps": [0, 1] } +] diff --git a/test/screenshot-based/action-arguments/screenshots/actions-step-00-chromium-linux.png b/test/screenshot-based/action-arguments/screenshots/actions-step-00-chromium-linux.png new file mode 100644 index 00000000..a0b98339 Binary files /dev/null and b/test/screenshot-based/action-arguments/screenshots/actions-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/action-arguments/screenshots/actions-step-00-firefox-linux.png b/test/screenshot-based/action-arguments/screenshots/actions-step-00-firefox-linux.png new file mode 100644 index 00000000..a7a9d98c Binary files /dev/null and b/test/screenshot-based/action-arguments/screenshots/actions-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/action-arguments/screenshots/actions-step-01-chromium-linux.png b/test/screenshot-based/action-arguments/screenshots/actions-step-01-chromium-linux.png new file mode 100644 index 00000000..a5389ca1 Binary files /dev/null and b/test/screenshot-based/action-arguments/screenshots/actions-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/action-arguments/screenshots/actions-step-01-firefox-linux.png b/test/screenshot-based/action-arguments/screenshots/actions-step-01-firefox-linux.png new file mode 100644 index 00000000..b9c790a4 Binary files /dev/null and b/test/screenshot-based/action-arguments/screenshots/actions-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/auto-next/auto-next.slp b/test/screenshot-based/auto-next/auto-next.slp new file mode 100644 index 00000000..50913803 --- /dev/null +++ b/test/screenshot-based/auto-next/auto-next.slp @@ -0,0 +1,13 @@ +a + +{pause} + +b + +{pause auto-continue} + +c + +{pause} + +d diff --git a/test/screenshot-based/auto-next/dune b/test/screenshot-based/auto-next/dune new file mode 100644 index 00000000..ebc4f65b --- /dev/null +++ b/test/screenshot-based/auto-next/dune @@ -0,0 +1,5 @@ +(rule + (target auto-next.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:auto-next.slp} -o %{target}))) diff --git a/test/screenshot-based/auto-next/run.json b/test/screenshot-based/auto-next/run.json new file mode 100644 index 00000000..6b496a9d --- /dev/null +++ b/test/screenshot-based/auto-next/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "auto-next.slp", "steps": [0, 1, 2] } +] diff --git a/test/screenshot-based/auto-next/screenshots/auto-next-step-00-chromium-linux.png b/test/screenshot-based/auto-next/screenshots/auto-next-step-00-chromium-linux.png new file mode 100644 index 00000000..eaa9a310 Binary files /dev/null and b/test/screenshot-based/auto-next/screenshots/auto-next-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/auto-next/screenshots/auto-next-step-00-firefox-linux.png b/test/screenshot-based/auto-next/screenshots/auto-next-step-00-firefox-linux.png new file mode 100644 index 00000000..9c4d58ae Binary files /dev/null and b/test/screenshot-based/auto-next/screenshots/auto-next-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/auto-next/screenshots/auto-next-step-01-chromium-linux.png b/test/screenshot-based/auto-next/screenshots/auto-next-step-01-chromium-linux.png new file mode 100644 index 00000000..2936b607 Binary files /dev/null and b/test/screenshot-based/auto-next/screenshots/auto-next-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/auto-next/screenshots/auto-next-step-01-firefox-linux.png b/test/screenshot-based/auto-next/screenshots/auto-next-step-01-firefox-linux.png new file mode 100644 index 00000000..9846bf63 Binary files /dev/null and b/test/screenshot-based/auto-next/screenshots/auto-next-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/auto-next/screenshots/auto-next-step-02-chromium-linux.png b/test/screenshot-based/auto-next/screenshots/auto-next-step-02-chromium-linux.png new file mode 100644 index 00000000..ca02a3b9 Binary files /dev/null and b/test/screenshot-based/auto-next/screenshots/auto-next-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/auto-next/screenshots/auto-next-step-02-firefox-linux.png b/test/screenshot-based/auto-next/screenshots/auto-next-step-02-firefox-linux.png new file mode 100644 index 00000000..d0f427ef Binary files /dev/null and b/test/screenshot-based/auto-next/screenshots/auto-next-step-02-firefox-linux.png differ diff --git a/test/compiler/carousel.t/carousel.md b/test/screenshot-based/carousel/carousel.md similarity index 100% rename from test/compiler/carousel.t/carousel.md rename to test/screenshot-based/carousel/carousel.md diff --git a/test/screenshot-based/carousel/dune b/test/screenshot-based/carousel/dune new file mode 100644 index 00000000..fcf63b09 --- /dev/null +++ b/test/screenshot-based/carousel/dune @@ -0,0 +1,5 @@ +(rule + (target carousel.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:carousel.md} -o %{target}))) diff --git a/test/screenshot-based/carousel/run.json b/test/screenshot-based/carousel/run.json new file mode 100644 index 00000000..80d8fbfa --- /dev/null +++ b/test/screenshot-based/carousel/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "carousel.md", "steps": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] } +] diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-00-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-00-chromium-linux.png new file mode 100644 index 00000000..582da2a8 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-00-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-00-firefox-linux.png new file mode 100644 index 00000000..b18be7f8 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-01-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-01-chromium-linux.png new file mode 100644 index 00000000..bdd33a41 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-01-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-01-firefox-linux.png new file mode 100644 index 00000000..c422b67c Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-02-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-02-chromium-linux.png new file mode 100644 index 00000000..c379f720 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-02-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-02-firefox-linux.png new file mode 100644 index 00000000..4a2bc45f Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-03-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-03-chromium-linux.png new file mode 100644 index 00000000..b26a1be1 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-03-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-03-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-03-firefox-linux.png new file mode 100644 index 00000000..7195e675 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-03-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-04-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-04-chromium-linux.png new file mode 100644 index 00000000..21c7a539 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-04-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-04-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-04-firefox-linux.png new file mode 100644 index 00000000..254cf465 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-04-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-05-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-05-chromium-linux.png new file mode 100644 index 00000000..fc8adb4d Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-05-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-05-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-05-firefox-linux.png new file mode 100644 index 00000000..ecf7a7a8 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-05-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-06-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-06-chromium-linux.png new file mode 100644 index 00000000..b215f27b Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-06-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-06-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-06-firefox-linux.png new file mode 100644 index 00000000..20a91693 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-06-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-07-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-07-chromium-linux.png new file mode 100644 index 00000000..dad61b83 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-07-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-07-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-07-firefox-linux.png new file mode 100644 index 00000000..10b3b694 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-07-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-08-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-08-chromium-linux.png new file mode 100644 index 00000000..78fc1154 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-08-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-08-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-08-firefox-linux.png new file mode 100644 index 00000000..4c370635 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-08-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-09-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-09-chromium-linux.png new file mode 100644 index 00000000..13a5437e Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-09-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-09-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-09-firefox-linux.png new file mode 100644 index 00000000..13c6088f Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-09-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-10-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-10-chromium-linux.png new file mode 100644 index 00000000..7079b4ac Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-10-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-10-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-10-firefox-linux.png new file mode 100644 index 00000000..7e9594d4 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-10-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-11-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-11-chromium-linux.png new file mode 100644 index 00000000..e1642bd5 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-11-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-11-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-11-firefox-linux.png new file mode 100644 index 00000000..cbc258ae Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-11-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-12-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-12-chromium-linux.png new file mode 100644 index 00000000..c5ba6d3f Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-12-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-12-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-12-firefox-linux.png new file mode 100644 index 00000000..920fd8ce Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-12-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-13-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-13-chromium-linux.png new file mode 100644 index 00000000..3b6afbd4 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-13-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-13-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-13-firefox-linux.png new file mode 100644 index 00000000..eb0e4b76 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-13-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-14-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-14-chromium-linux.png new file mode 100644 index 00000000..57604aec Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-14-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-14-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-14-firefox-linux.png new file mode 100644 index 00000000..d194fb43 Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-14-firefox-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-15-chromium-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-15-chromium-linux.png new file mode 100644 index 00000000..f58d3b5c Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-15-chromium-linux.png differ diff --git a/test/screenshot-based/carousel/screenshots/carousel-step-15-firefox-linux.png b/test/screenshot-based/carousel/screenshots/carousel-step-15-firefox-linux.png new file mode 100644 index 00000000..0d20567b Binary files /dev/null and b/test/screenshot-based/carousel/screenshots/carousel-step-15-firefox-linux.png differ diff --git a/test/screenshot-based/cram.spec.js b/test/screenshot-based/cram.spec.js new file mode 100644 index 00000000..06929158 --- /dev/null +++ b/test/screenshot-based/cram.spec.js @@ -0,0 +1,56 @@ +import { test, expect } from '@playwright/test'; +import fs from 'fs'; +import { pathToFileURL } from 'url'; +import { findTests } from './tests.js'; + +// See tests.js for the format of the tests. The HTML files must have been +// generated first, with `dune build`. + +for (const { relDir, entry, name, html, steps } of findTests()) { + test.describe(`${relDir}/${entry}`, () => { + // The presentation is loaded once, and each test moves it to its step. + // If a test fails, the next one runs in a new worker, which loads the + // presentation again. + let page; + + test.beforeAll(async ({ browser }) => { + if (!fs.existsSync(html)) + throw new Error(`${html} does not exist, did you run \`dune build\`?`); + page = await browser.newPage(); + // The presentation runs in an iframe, which posts a "Ready" + // message to its parent once it is initialized. + await page.addInitScript(() => { + if (window !== window.top) return; + window.addEventListener('message', e => { + if (typeof e.data === 'string' && e.data.includes('(payload Ready)')) + window.slipshowReady = true; + }); + }); + await page.goto(pathToFileURL(html).href); + await page.waitForFunction(() => window.slipshowReady, null, { timeout: 60_000 }); + }); + + test.afterAll(async () => { + await page?.close(); + }); + + for (const step of steps) { + test(`step ${step}`, async () => { + // Same message as the one sent by the parent to the iframe + // to set its initial state + await page.evaluate(step => { + document.getElementById('slipshow__internal_iframe').contentWindow + .postMessage(`((payload(State ${step} Fast))(id test))`, '*'); + }, step); + // The counter shows "from→to" during a transition, and the + // step once it is reached. + await expect(page.frameLocator('#slipshow__internal_iframe').locator('#slipshow-counter')) + .toHaveText(String(step), { timeout: 30_000 }); + await page.mouse.move(-1, -1); + await expect.soft(page).toHaveScreenshot( + [relDir, 'screenshots', `${name}-step-${String(step).padStart(2, '0')}.png`], + { timeout: 15_000 }); + }); + } + }); +} diff --git a/test/screenshot-based/dimension/custom.slp b/test/screenshot-based/dimension/custom.slp new file mode 100644 index 00000000..592ba6ea --- /dev/null +++ b/test/screenshot-based/dimension/custom.slp @@ -0,0 +1,5 @@ +--- +dimension: 1000x1000 +--- + +Hello diff --git a/test/screenshot-based/dimension/dune b/test/screenshot-based/dimension/dune new file mode 100644 index 00000000..c85b9a3c --- /dev/null +++ b/test/screenshot-based/dimension/dune @@ -0,0 +1,17 @@ +(rule + (target seize-neuvieme.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:seize-neuvieme.slp} -o %{target}))) + +(rule + (target quatre-tiers.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:quatre-tiers.slp} -o %{target}))) + +(rule + (target custom.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:custom.slp} -o %{target}))) diff --git a/test/screenshot-based/dimension/quatre-tiers.slp b/test/screenshot-based/dimension/quatre-tiers.slp new file mode 100644 index 00000000..24b5d994 --- /dev/null +++ b/test/screenshot-based/dimension/quatre-tiers.slp @@ -0,0 +1,5 @@ +--- +dimension: 4:3 +--- + +Hello diff --git a/test/screenshot-based/dimension/run.json b/test/screenshot-based/dimension/run.json new file mode 100644 index 00000000..21c29207 --- /dev/null +++ b/test/screenshot-based/dimension/run.json @@ -0,0 +1,5 @@ +[ + { "entry": "seize-neuvieme.slp", "steps": [0] }, + { "entry": "quatre-tiers.slp", "steps": [0] }, + { "entry": "custom.slp", "steps": [0] } +] diff --git a/test/screenshot-based/dimension/screenshots/custom-step-00-chromium-linux.png b/test/screenshot-based/dimension/screenshots/custom-step-00-chromium-linux.png new file mode 100644 index 00000000..7b1cf6ca Binary files /dev/null and b/test/screenshot-based/dimension/screenshots/custom-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/dimension/screenshots/custom-step-00-firefox-linux.png b/test/screenshot-based/dimension/screenshots/custom-step-00-firefox-linux.png new file mode 100644 index 00000000..ad39d39f Binary files /dev/null and b/test/screenshot-based/dimension/screenshots/custom-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/dimension/screenshots/quatre-tiers-step-00-chromium-linux.png b/test/screenshot-based/dimension/screenshots/quatre-tiers-step-00-chromium-linux.png new file mode 100644 index 00000000..789b9b98 Binary files /dev/null and b/test/screenshot-based/dimension/screenshots/quatre-tiers-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/dimension/screenshots/quatre-tiers-step-00-firefox-linux.png b/test/screenshot-based/dimension/screenshots/quatre-tiers-step-00-firefox-linux.png new file mode 100644 index 00000000..394ee516 Binary files /dev/null and b/test/screenshot-based/dimension/screenshots/quatre-tiers-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/dimension/screenshots/seize-neuvieme-step-00-chromium-linux.png b/test/screenshot-based/dimension/screenshots/seize-neuvieme-step-00-chromium-linux.png new file mode 100644 index 00000000..0d493d21 Binary files /dev/null and b/test/screenshot-based/dimension/screenshots/seize-neuvieme-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/dimension/screenshots/seize-neuvieme-step-00-firefox-linux.png b/test/screenshot-based/dimension/screenshots/seize-neuvieme-step-00-firefox-linux.png new file mode 100644 index 00000000..3fce22ef Binary files /dev/null and b/test/screenshot-based/dimension/screenshots/seize-neuvieme-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/dimension/seize-neuvieme.slp b/test/screenshot-based/dimension/seize-neuvieme.slp new file mode 100644 index 00000000..18c761ee --- /dev/null +++ b/test/screenshot-based/dimension/seize-neuvieme.slp @@ -0,0 +1,5 @@ +--- +dimension: 16:9 +--- + +Hello diff --git a/test/screenshot-based/drawings/dune b/test/screenshot-based/drawings/dune new file mode 100644 index 00000000..16a1edb9 --- /dev/null +++ b/test/screenshot-based/drawings/dune @@ -0,0 +1,12 @@ +(rule + (target drawings.html) + (mode promote) + (deps + (source_tree ../../compiler/drawings.t)) + (action + (run + %{bin:slipshow} + compile + %{dep:../../compiler/drawings.t/drawings.md} + -o + %{target}))) diff --git a/test/screenshot-based/drawings/run.json b/test/screenshot-based/drawings/run.json new file mode 100644 index 00000000..970658ff --- /dev/null +++ b/test/screenshot-based/drawings/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "../../compiler/drawings.t/drawings.md", "steps": [0, 1, 2] } +] diff --git a/test/screenshot-based/drawings/screenshots/drawings-step-00-chromium-linux.png b/test/screenshot-based/drawings/screenshots/drawings-step-00-chromium-linux.png new file mode 100644 index 00000000..ce6e37bb Binary files /dev/null and b/test/screenshot-based/drawings/screenshots/drawings-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/drawings/screenshots/drawings-step-00-firefox-linux.png b/test/screenshot-based/drawings/screenshots/drawings-step-00-firefox-linux.png new file mode 100644 index 00000000..6d200b58 Binary files /dev/null and b/test/screenshot-based/drawings/screenshots/drawings-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/drawings/screenshots/drawings-step-01-chromium-linux.png b/test/screenshot-based/drawings/screenshots/drawings-step-01-chromium-linux.png new file mode 100644 index 00000000..a4f78d24 Binary files /dev/null and b/test/screenshot-based/drawings/screenshots/drawings-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/drawings/screenshots/drawings-step-01-firefox-linux.png b/test/screenshot-based/drawings/screenshots/drawings-step-01-firefox-linux.png new file mode 100644 index 00000000..6dbe531c Binary files /dev/null and b/test/screenshot-based/drawings/screenshots/drawings-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/drawings/screenshots/drawings-step-02-chromium-linux.png b/test/screenshot-based/drawings/screenshots/drawings-step-02-chromium-linux.png new file mode 100644 index 00000000..0a4661b2 Binary files /dev/null and b/test/screenshot-based/drawings/screenshots/drawings-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/drawings/screenshots/drawings-step-02-firefox-linux.png b/test/screenshot-based/drawings/screenshots/drawings-step-02-firefox-linux.png new file mode 100644 index 00000000..f671e085 Binary files /dev/null and b/test/screenshot-based/drawings/screenshots/drawings-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/dune b/test/screenshot-based/dune new file mode 100644 index 00000000..60d5a70f --- /dev/null +++ b/test/screenshot-based/dune @@ -0,0 +1 @@ +(dirs :standard \ node_modules test-results playwright-report blob-report) diff --git a/test/screenshot-based/examples/dune b/test/screenshot-based/examples/dune new file mode 100644 index 00000000..f4c66ec9 --- /dev/null +++ b/test/screenshot-based/examples/dune @@ -0,0 +1,14 @@ +; Copy the compiled examples here, so they can be screenshot-tested like the +; other test folders. + +(rule + (target bobkonf.html) + (mode promote) + (action + (copy %{dep:../../../example/BOBKonf/pres.html} %{target}))) + +(rule + (target campus-du-libre.html) + (mode promote) + (action + (copy %{dep:../../../example/campus-du-libre/cdl.html} %{target}))) diff --git a/test/screenshot-based/examples/run.json b/test/screenshot-based/examples/run.json new file mode 100644 index 00000000..caab486a --- /dev/null +++ b/test/screenshot-based/examples/run.json @@ -0,0 +1,4 @@ +[ + { "entry": "bobkonf.html", "steps": [0, 1, 2, 3, 4, 5, 80] }, + { "entry": "campus-du-libre.html", "steps": [0, 1, 2, 3, 4, 5] } +] diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-00-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-00-chromium-linux.png new file mode 100644 index 00000000..3d4bd30a Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-00-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-00-firefox-linux.png new file mode 100644 index 00000000..b3114795 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-01-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-01-chromium-linux.png new file mode 100644 index 00000000..65d459eb Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-01-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-01-firefox-linux.png new file mode 100644 index 00000000..0212aab8 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-02-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-02-chromium-linux.png new file mode 100644 index 00000000..abc45504 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-02-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-02-firefox-linux.png new file mode 100644 index 00000000..f3012dd3 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-03-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-03-chromium-linux.png new file mode 100644 index 00000000..b77ba38c Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-03-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-03-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-03-firefox-linux.png new file mode 100644 index 00000000..2eb5a15f Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-03-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-04-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-04-chromium-linux.png new file mode 100644 index 00000000..1afdd3b0 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-04-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-04-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-04-firefox-linux.png new file mode 100644 index 00000000..875bdd75 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-04-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-05-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-05-chromium-linux.png new file mode 100644 index 00000000..d56d3754 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-05-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-05-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-05-firefox-linux.png new file mode 100644 index 00000000..cfe88556 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-05-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-80-chromium-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-80-chromium-linux.png new file mode 100644 index 00000000..d1bd75d6 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-80-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/bobkonf-step-80-firefox-linux.png b/test/screenshot-based/examples/screenshots/bobkonf-step-80-firefox-linux.png new file mode 100644 index 00000000..0b140538 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/bobkonf-step-80-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-00-chromium-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-00-chromium-linux.png new file mode 100644 index 00000000..529858e8 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-00-firefox-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-00-firefox-linux.png new file mode 100644 index 00000000..7e86d1a8 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-01-chromium-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-01-chromium-linux.png new file mode 100644 index 00000000..3b8f0239 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-01-firefox-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-01-firefox-linux.png new file mode 100644 index 00000000..30605a0f Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-02-chromium-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-02-chromium-linux.png new file mode 100644 index 00000000..b92ca4a0 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-02-firefox-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-02-firefox-linux.png new file mode 100644 index 00000000..91890520 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-03-chromium-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-03-chromium-linux.png new file mode 100644 index 00000000..0745c7ed Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-03-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-03-firefox-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-03-firefox-linux.png new file mode 100644 index 00000000..95c51d27 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-03-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-04-chromium-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-04-chromium-linux.png new file mode 100644 index 00000000..19ed4177 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-04-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-04-firefox-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-04-firefox-linux.png new file mode 100644 index 00000000..17d1c952 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-04-firefox-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-05-chromium-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-05-chromium-linux.png new file mode 100644 index 00000000..c68c5ef6 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-05-chromium-linux.png differ diff --git a/test/screenshot-based/examples/screenshots/campus-du-libre-step-05-firefox-linux.png b/test/screenshot-based/examples/screenshots/campus-du-libre-step-05-firefox-linux.png new file mode 100644 index 00000000..cc0978b1 Binary files /dev/null and b/test/screenshot-based/examples/screenshots/campus-du-libre-step-05-firefox-linux.png differ diff --git a/test/screenshot-based/highlight-js/dune b/test/screenshot-based/highlight-js/dune new file mode 100644 index 00000000..ce4ff224 --- /dev/null +++ b/test/screenshot-based/highlight-js/dune @@ -0,0 +1,5 @@ +(rule + (target hljs.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:hljs.md} -o %{target}))) diff --git a/test/compiler/highlight-js.t/hljs.md b/test/screenshot-based/highlight-js/hljs.md similarity index 100% rename from test/compiler/highlight-js.t/hljs.md rename to test/screenshot-based/highlight-js/hljs.md diff --git a/test/screenshot-based/highlight-js/run.json b/test/screenshot-based/highlight-js/run.json new file mode 100644 index 00000000..41d75424 --- /dev/null +++ b/test/screenshot-based/highlight-js/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "hljs.md", "steps": [0] } +] diff --git a/test/screenshot-based/highlight-js/screenshots/hljs-step-00-chromium-linux.png b/test/screenshot-based/highlight-js/screenshots/hljs-step-00-chromium-linux.png new file mode 100644 index 00000000..b2c80f74 Binary files /dev/null and b/test/screenshot-based/highlight-js/screenshots/hljs-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/highlight-js/screenshots/hljs-step-00-firefox-linux.png b/test/screenshot-based/highlight-js/screenshots/hljs-step-00-firefox-linux.png new file mode 100644 index 00000000..d1030633 Binary files /dev/null and b/test/screenshot-based/highlight-js/screenshots/hljs-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/math/dune b/test/screenshot-based/math/dune new file mode 100644 index 00000000..a917aae6 --- /dev/null +++ b/test/screenshot-based/math/dune @@ -0,0 +1,11 @@ +(rule + (target mathjax.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:mathjax.slp} -o %{target}))) + +(rule + (target katex.html) + (mode promote) + (action + (run %{bin:slipshow} compile %{dep:katex.slp} -o %{target}))) diff --git a/test/screenshot-based/math/katex.slp b/test/screenshot-based/math/katex.slp new file mode 100644 index 00000000..cbe2e8bc --- /dev/null +++ b/test/screenshot-based/math/katex.slp @@ -0,0 +1,11 @@ +--- +math-mode: katex +--- + +$\sqrt 2$ + +$$\sqrt 2$$ + +```math +\sqrt 2 +``` diff --git a/test/screenshot-based/math/mathjax.slp b/test/screenshot-based/math/mathjax.slp new file mode 100644 index 00000000..5b9712e8 --- /dev/null +++ b/test/screenshot-based/math/mathjax.slp @@ -0,0 +1,7 @@ +$\sqrt 2$ + +$$\sqrt 2$$ + +```math +\sqrt 2 +``` diff --git a/test/screenshot-based/math/run.json b/test/screenshot-based/math/run.json new file mode 100644 index 00000000..662141bb --- /dev/null +++ b/test/screenshot-based/math/run.json @@ -0,0 +1,4 @@ +[ + { "entry": "mathjax.slp", "steps": [0] }, + { "entry": "katex.slp", "steps": [0] } +] diff --git a/test/screenshot-based/math/screenshots/katex-step-00-chromium-linux.png b/test/screenshot-based/math/screenshots/katex-step-00-chromium-linux.png new file mode 100644 index 00000000..2d8ef775 Binary files /dev/null and b/test/screenshot-based/math/screenshots/katex-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/math/screenshots/katex-step-00-firefox-linux.png b/test/screenshot-based/math/screenshots/katex-step-00-firefox-linux.png new file mode 100644 index 00000000..e52fe540 Binary files /dev/null and b/test/screenshot-based/math/screenshots/katex-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/math/screenshots/mathjax-step-00-chromium-linux.png b/test/screenshot-based/math/screenshots/mathjax-step-00-chromium-linux.png new file mode 100644 index 00000000..93aabd97 Binary files /dev/null and b/test/screenshot-based/math/screenshots/mathjax-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/math/screenshots/mathjax-step-00-firefox-linux.png b/test/screenshot-based/math/screenshots/mathjax-step-00-firefox-linux.png new file mode 100644 index 00000000..d1dff915 Binary files /dev/null and b/test/screenshot-based/math/screenshots/mathjax-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/multi-file/dune b/test/screenshot-based/multi-file/dune new file mode 100644 index 00000000..9b4b1b3d --- /dev/null +++ b/test/screenshot-based/multi-file/dune @@ -0,0 +1,12 @@ +(rule + (target main.html) + (mode promote) + (deps + (source_tree ../../compiler/multi-file.t)) + (action + (run + %{bin:slipshow} + compile + %{dep:../../compiler/multi-file.t/main.md} + -o + %{target}))) diff --git a/test/screenshot-based/multi-file/run.json b/test/screenshot-based/multi-file/run.json new file mode 100644 index 00000000..28d3d3f4 --- /dev/null +++ b/test/screenshot-based/multi-file/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "../../compiler/multi-file.t/main.md", "steps": [0, 1, 2, 3] } +] diff --git a/test/screenshot-based/multi-file/screenshots/main-step-00-chromium-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-00-chromium-linux.png new file mode 100644 index 00000000..97711c1b Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-00-firefox-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-00-firefox-linux.png new file mode 100644 index 00000000..ce18d62d Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-01-chromium-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-01-chromium-linux.png new file mode 100644 index 00000000..4dc7340a Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-01-firefox-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-01-firefox-linux.png new file mode 100644 index 00000000..d31809eb Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-02-chromium-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-02-chromium-linux.png new file mode 100644 index 00000000..b175a7af Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-02-firefox-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-02-firefox-linux.png new file mode 100644 index 00000000..cd565c02 Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-03-chromium-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-03-chromium-linux.png new file mode 100644 index 00000000..0e2b8e3e Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-03-chromium-linux.png differ diff --git a/test/screenshot-based/multi-file/screenshots/main-step-03-firefox-linux.png b/test/screenshot-based/multi-file/screenshots/main-step-03-firefox-linux.png new file mode 100644 index 00000000..7e28e248 Binary files /dev/null and b/test/screenshot-based/multi-file/screenshots/main-step-03-firefox-linux.png differ diff --git a/test/screenshot-based/normal-slides/dune b/test/screenshot-based/normal-slides/dune new file mode 100644 index 00000000..714aaca5 --- /dev/null +++ b/test/screenshot-based/normal-slides/dune @@ -0,0 +1,6 @@ +(rule + (target slides.html) + (mode promote) + (deps happy.svg) + (action + (run %{bin:slipshow} compile %{dep:slides.md} -o %{target}))) diff --git a/test/compiler/normal-slides.t/happy.svg b/test/screenshot-based/normal-slides/happy.svg similarity index 100% rename from test/compiler/normal-slides.t/happy.svg rename to test/screenshot-based/normal-slides/happy.svg diff --git a/test/screenshot-based/normal-slides/run.json b/test/screenshot-based/normal-slides/run.json new file mode 100644 index 00000000..13002ba4 --- /dev/null +++ b/test/screenshot-based/normal-slides/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "slides.md", "steps": [0, 1, 2, 3, 4, 5] } +] diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-00-chromium-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-00-chromium-linux.png new file mode 100644 index 00000000..ccd05886 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-00-firefox-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-00-firefox-linux.png new file mode 100644 index 00000000..5fe579d7 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-01-chromium-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-01-chromium-linux.png new file mode 100644 index 00000000..9d1968d6 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-01-firefox-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-01-firefox-linux.png new file mode 100644 index 00000000..b8945533 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-02-chromium-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-02-chromium-linux.png new file mode 100644 index 00000000..ee2b5265 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-02-firefox-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-02-firefox-linux.png new file mode 100644 index 00000000..311a9b63 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-03-chromium-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-03-chromium-linux.png new file mode 100644 index 00000000..45790eb2 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-03-chromium-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-03-firefox-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-03-firefox-linux.png new file mode 100644 index 00000000..9bbe18dc Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-03-firefox-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-04-chromium-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-04-chromium-linux.png new file mode 100644 index 00000000..3dabceeb Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-04-chromium-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-04-firefox-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-04-firefox-linux.png new file mode 100644 index 00000000..05aa1808 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-04-firefox-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-05-chromium-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-05-chromium-linux.png new file mode 100644 index 00000000..ab54dde0 Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-05-chromium-linux.png differ diff --git a/test/screenshot-based/normal-slides/screenshots/slides-step-05-firefox-linux.png b/test/screenshot-based/normal-slides/screenshots/slides-step-05-firefox-linux.png new file mode 100644 index 00000000..a8ecb67a Binary files /dev/null and b/test/screenshot-based/normal-slides/screenshots/slides-step-05-firefox-linux.png differ diff --git a/test/compiler/normal-slides.t/slides.md b/test/screenshot-based/normal-slides/slides.md similarity index 100% rename from test/compiler/normal-slides.t/slides.md rename to test/screenshot-based/normal-slides/slides.md diff --git a/test/screenshot-based/package-lock.json b/test/screenshot-based/package-lock.json new file mode 100644 index 00000000..a7fc6ebc --- /dev/null +++ b/test/screenshot-based/package-lock.json @@ -0,0 +1,78 @@ +{ + "name": "test", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "test", + "version": "1.0.0", + "devDependencies": { + "@playwright/test": "^1.64.1", + "@types/node": "^26.6.5" + } + }, + "node_modules/@playwright/test": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.64.1.tgz", + "integrity": "sha512-IaYGml/nSOiZWROfPtuIL7neuu9qDOZ3TNvNljUIrhDMxiGTgPjzj/g9p9RxpS2tSepPDRY+UwAaEeiKtUvIAg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.64.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@types/node": { + "version": "26.6.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz", + "integrity": "sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~8.9.0" + } + }, + "node_modules/playwright": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.64.1.tgz", + "integrity": "sha512-HCrVhHr5QQuwYoswEUGTb7gGp522yflbv/ST8nF4sFWGuLjQCt17Q/EubpGGSNKYn1tsTCPZxqHhHCfVURu7UA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.64.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/playwright-core": { + "version": "1.64.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.1.tgz", + "integrity": "sha512-BC4s8y6SEVA6Q1rSxZTto8hI1KUI3xXlHGZgvGqP4IqPdI/a6FX9H29IDNz7vKo9l21b6LfYosScPL6M3xxyDQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/undici-types": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz", + "integrity": "sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==", + "dev": true, + "license": "MIT" + } + } +} diff --git a/test/screenshot-based/package.json b/test/screenshot-based/package.json new file mode 100644 index 00000000..a9d098e8 --- /dev/null +++ b/test/screenshot-based/package.json @@ -0,0 +1,13 @@ +{ + "name": "test", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": {}, + "keywords": [], + "type": "commonjs", + "devDependencies": { + "@playwright/test": "^1.64.1", + "@types/node": "^26.6.5" + } +} diff --git a/test/screenshot-based/pdf/dune b/test/screenshot-based/pdf/dune new file mode 100644 index 00000000..efb43147 --- /dev/null +++ b/test/screenshot-based/pdf/dune @@ -0,0 +1,12 @@ +(rule + (target pdf.html) + (mode promote) + (deps + (source_tree ../../compiler/pdf.t)) + (action + (run + %{bin:slipshow} + compile + %{dep:../../compiler/pdf.t/pdf.md} + -o + %{target}))) diff --git a/test/screenshot-based/pdf/run.json b/test/screenshot-based/pdf/run.json new file mode 100644 index 00000000..b45aac0d --- /dev/null +++ b/test/screenshot-based/pdf/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "../../compiler/pdf.t/pdf.md", "steps": [0, 1, 2, 9, 15, 19, 21, 95] } +] diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-00-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-00-chromium-linux.png new file mode 100644 index 00000000..d71325ce Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-00-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-00-firefox-linux.png new file mode 100644 index 00000000..2023139a Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-01-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-01-chromium-linux.png new file mode 100644 index 00000000..a024b471 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-01-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-01-firefox-linux.png new file mode 100644 index 00000000..ba35eec4 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-02-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-02-chromium-linux.png new file mode 100644 index 00000000..cbfbdd7a Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-02-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-02-firefox-linux.png new file mode 100644 index 00000000..c2e3990c Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-09-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-09-chromium-linux.png new file mode 100644 index 00000000..ffcbd3ef Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-09-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-09-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-09-firefox-linux.png new file mode 100644 index 00000000..d851ec3e Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-09-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-15-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-15-chromium-linux.png new file mode 100644 index 00000000..55176fc3 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-15-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-15-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-15-firefox-linux.png new file mode 100644 index 00000000..ead65ce8 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-15-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-19-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-19-chromium-linux.png new file mode 100644 index 00000000..e9053d11 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-19-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-19-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-19-firefox-linux.png new file mode 100644 index 00000000..f1586c3a Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-19-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-21-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-21-chromium-linux.png new file mode 100644 index 00000000..48ebc770 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-21-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-21-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-21-firefox-linux.png new file mode 100644 index 00000000..19aaf7fe Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-21-firefox-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-95-chromium-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-95-chromium-linux.png new file mode 100644 index 00000000..f800cb8a Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-95-chromium-linux.png differ diff --git a/test/screenshot-based/pdf/screenshots/pdf-step-95-firefox-linux.png b/test/screenshot-based/pdf/screenshots/pdf-step-95-firefox-linux.png new file mode 100644 index 00000000..98980260 Binary files /dev/null and b/test/screenshot-based/pdf/screenshots/pdf-step-95-firefox-linux.png differ diff --git a/test/screenshot-based/playwright-docker.sh b/test/screenshot-based/playwright-docker.sh new file mode 100755 index 00000000..2914d92b --- /dev/null +++ b/test/screenshot-based/playwright-docker.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# Runs the screenshot tests in Playwright's Docker image, so that the rendering +# does not depend on the fonts and libraries of the host. The HTML files must +# have been generated first, with `dune build`. The arguments are passed to +# `playwright test`. + +set -e +cd "$(dirname "$0")" + +# The image must have the same version of Playwright as the one installed by +# `npm ci`, otherwise it does not contain the right browsers. +VERSION=$(grep -A1 '"node_modules/@playwright/test"' package-lock.json | + sed -n 's/.*"version": "\(.*\)".*/\1/p') +if [ -z "$VERSION" ]; then + echo "Cannot find the version of @playwright/test in package-lock.json" >&2 + exit 1 +fi + +# The image runs as root by default: use the current user instead, so that the +# files written in the test folder (node_modules, screenshots, reports) are +# owned by them. +exec docker run --rm --init --ipc=host \ + --user "$(id -u):$(id -g)" -e HOME=/tmp -e CI \ + -v "$PWD:/tests" -w /tests \ + "mcr.microsoft.com/playwright:v$VERSION-noble" \ + sh -c 'npm ci --no-audit --no-fund && npx playwright test "$@"' sh "$@" diff --git a/test/screenshot-based/playwright.config.js b/test/screenshot-based/playwright.config.js new file mode 100644 index 00000000..8438098b --- /dev/null +++ b/test/screenshot-based/playwright.config.js @@ -0,0 +1,87 @@ +// @ts-check +import { defineConfig, devices } from '@playwright/test'; + +/** + * Read environment variables from file. + * https://github.com/motdotla/dotenv + */ +// import dotenv from 'dotenv'; +// import path from 'path'; +// dotenv.config({ path: path.resolve(__dirname, '.env') }); + +/** + * @see https://playwright.dev/docs/test-configuration + */ +export default defineConfig({ + testDir: './', + /* Snapshots are stored at the path given to toHaveScreenshot, relative to testDir. */ + snapshotPathTemplate: '{testDir}/{arg}{-projectName}{-snapshotSuffix}{ext}', + /* Covers the waits of cram.spec.js (loading, reaching the step, screenshot). */ + timeout: 120_000, + /* Run tests in files in parallel */ + fullyParallel: true, + /* Fail the build on CI if you accidentally left test.only in the source code. */ + forbidOnly: !!process.env.CI, + /* Retry on CI only */ + retries: process.env.CI ? 2 : 0, + /* Running several browsers at once can exhaust memory. */ + workers: 1, + /* Reporter to use. See https://playwright.dev/docs/test-reporters */ + reporter: 'html', + /* Shared settings for all the projects below. See https://playwright.dev/docs/api/class-testoptions. */ + use: { + /* Base URL to use in actions like `await page.goto('')`. */ + // baseURL: 'http://localhost:3000', + + /* Collect trace when retrying the failed test. See https://playwright.dev/docs/trace-viewer */ + // trace: 'on-first-retry', + screenshot: 'on', // attaches a screenshot taken at the END of each test, pass or fail + trace: 'on', // trace viewer has a filmstrip of every step, incl. the toHaveScreenshot moment + }, + + /* Configure projects for major browsers */ + projects: [ + { + name: 'chromium', + use: { ...devices['Desktop Chrome'] }, + }, + + { + name: 'firefox', + use: { ...devices['Desktop Firefox'] }, + }, + + // { + // name: 'webkit', + // use: { ...devices['Desktop Safari'] }, + // }, + + /* Test against mobile viewports. */ + // { + // name: 'Mobile Chrome', + // use: { ...devices['Pixel 5'] }, + // }, + // { + // name: 'Mobile Safari', + // use: { ...devices['iPhone 12'] }, + // }, + + /* Test against branded browsers. */ + // { + // name: 'Microsoft Edge', + // use: { ...devices['Desktop Edge'], channel: 'msedge' }, + // }, + // { + // name: 'Google Chrome', + // use: { ...devices['Desktop Chrome'], channel: 'chrome' }, + // }, + ], + + /* Run your local dev server before starting the tests */ + // webServer: { + // command: 'npm run start', + // url: 'http://localhost:3000', + // reuseExistingServer: !process.env.CI, + // }, +}); + diff --git a/test/screenshot-based/slides/dune b/test/screenshot-based/slides/dune new file mode 100644 index 00000000..3803eb9e --- /dev/null +++ b/test/screenshot-based/slides/dune @@ -0,0 +1,12 @@ +(rule + (target slides.html) + (mode promote) + (deps + (source_tree ../../compiler/slides.t)) + (action + (run + %{bin:slipshow} + compile + %{dep:../../compiler/slides.t/slides.md} + -o + %{target}))) diff --git a/test/screenshot-based/slides/run.json b/test/screenshot-based/slides/run.json new file mode 100644 index 00000000..62875237 --- /dev/null +++ b/test/screenshot-based/slides/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "../../compiler/slides.t/slides.md", "steps": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16] } +] diff --git a/test/screenshot-based/slides/screenshots/slides-step-00-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-00-chromium-linux.png new file mode 100644 index 00000000..56e7fb81 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-00-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-00-firefox-linux.png new file mode 100644 index 00000000..d3aa84d9 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-00-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-01-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-01-chromium-linux.png new file mode 100644 index 00000000..1dc7cbd4 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-01-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-01-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-01-firefox-linux.png new file mode 100644 index 00000000..01dbbb8d Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-01-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-02-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-02-chromium-linux.png new file mode 100644 index 00000000..cef93b0d Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-02-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-02-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-02-firefox-linux.png new file mode 100644 index 00000000..8f7ccdaf Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-02-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-03-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-03-chromium-linux.png new file mode 100644 index 00000000..7fa9564c Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-03-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-03-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-03-firefox-linux.png new file mode 100644 index 00000000..dc9ab442 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-03-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-04-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-04-chromium-linux.png new file mode 100644 index 00000000..c8175f70 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-04-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-04-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-04-firefox-linux.png new file mode 100644 index 00000000..923d2843 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-04-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-05-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-05-chromium-linux.png new file mode 100644 index 00000000..d2bcc896 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-05-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-05-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-05-firefox-linux.png new file mode 100644 index 00000000..96deec80 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-05-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-06-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-06-chromium-linux.png new file mode 100644 index 00000000..4108ab8e Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-06-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-06-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-06-firefox-linux.png new file mode 100644 index 00000000..22a3bd92 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-06-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-07-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-07-chromium-linux.png new file mode 100644 index 00000000..3b184a4d Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-07-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-07-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-07-firefox-linux.png new file mode 100644 index 00000000..d334afcc Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-07-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-08-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-08-chromium-linux.png new file mode 100644 index 00000000..1e12b34f Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-08-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-08-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-08-firefox-linux.png new file mode 100644 index 00000000..4b700aee Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-08-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-09-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-09-chromium-linux.png new file mode 100644 index 00000000..66af079f Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-09-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-09-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-09-firefox-linux.png new file mode 100644 index 00000000..78481150 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-09-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-10-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-10-chromium-linux.png new file mode 100644 index 00000000..f06ce5ff Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-10-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-10-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-10-firefox-linux.png new file mode 100644 index 00000000..f636dbae Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-10-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-11-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-11-chromium-linux.png new file mode 100644 index 00000000..883b585e Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-11-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-11-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-11-firefox-linux.png new file mode 100644 index 00000000..39dd33fd Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-11-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-12-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-12-chromium-linux.png new file mode 100644 index 00000000..9934f8a1 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-12-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-12-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-12-firefox-linux.png new file mode 100644 index 00000000..f8112ca3 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-12-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-13-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-13-chromium-linux.png new file mode 100644 index 00000000..d9deccdb Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-13-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-13-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-13-firefox-linux.png new file mode 100644 index 00000000..a9ea929c Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-13-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-14-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-14-chromium-linux.png new file mode 100644 index 00000000..0f0c72c7 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-14-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-14-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-14-firefox-linux.png new file mode 100644 index 00000000..e64c655a Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-14-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-15-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-15-chromium-linux.png new file mode 100644 index 00000000..150a4782 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-15-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-15-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-15-firefox-linux.png new file mode 100644 index 00000000..2856944a Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-15-firefox-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-16-chromium-linux.png b/test/screenshot-based/slides/screenshots/slides-step-16-chromium-linux.png new file mode 100644 index 00000000..ba0ec926 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-16-chromium-linux.png differ diff --git a/test/screenshot-based/slides/screenshots/slides-step-16-firefox-linux.png b/test/screenshot-based/slides/screenshots/slides-step-16-firefox-linux.png new file mode 100644 index 00000000..9e4b4610 Binary files /dev/null and b/test/screenshot-based/slides/screenshots/slides-step-16-firefox-linux.png differ diff --git a/test/screenshot-based/svg/dune b/test/screenshot-based/svg/dune new file mode 100644 index 00000000..b11cf670 --- /dev/null +++ b/test/screenshot-based/svg/dune @@ -0,0 +1,6 @@ +(rule + (target svg.html) + (mode promote) + (deps square.svg) + (action + (run %{bin:slipshow} compile %{dep:svg.md} -o %{target}))) diff --git a/test/screenshot-based/svg/run.json b/test/screenshot-based/svg/run.json new file mode 100644 index 00000000..d31d5630 --- /dev/null +++ b/test/screenshot-based/svg/run.json @@ -0,0 +1,3 @@ +[ + { "entry": "svg.md", "steps": [0] } +] diff --git a/test/screenshot-based/svg/screenshots/svg-step-00-chromium-linux.png b/test/screenshot-based/svg/screenshots/svg-step-00-chromium-linux.png new file mode 100644 index 00000000..ebc3df29 Binary files /dev/null and b/test/screenshot-based/svg/screenshots/svg-step-00-chromium-linux.png differ diff --git a/test/screenshot-based/svg/screenshots/svg-step-00-firefox-linux.png b/test/screenshot-based/svg/screenshots/svg-step-00-firefox-linux.png new file mode 100644 index 00000000..be1b639a Binary files /dev/null and b/test/screenshot-based/svg/screenshots/svg-step-00-firefox-linux.png differ diff --git a/test/compiler/svg.t/square.svg b/test/screenshot-based/svg/square.svg similarity index 100% rename from test/compiler/svg.t/square.svg rename to test/screenshot-based/svg/square.svg diff --git a/test/compiler/svg.t/svg.md b/test/screenshot-based/svg/svg.md similarity index 100% rename from test/compiler/svg.t/svg.md rename to test/screenshot-based/svg/svg.md diff --git a/test/screenshot-based/tests.js b/test/screenshot-based/tests.js new file mode 100644 index 00000000..f9a30028 --- /dev/null +++ b/test/screenshot-based/tests.js @@ -0,0 +1,45 @@ +// Cram-like screenshot tests: every folder containing a run.json is a test +// folder. run.json is a list of entries of the form +// { "entry": "foo.slp", "steps": [0, 1, 2] } +// A .html entry is used as is. Any other entry must be compiled to an HTML +// file next to run.json, with the same base name, by a rule of the dune file +// of the test folder. Each step is then screenshotted, in the screenshots/ +// subfolder of the test folder. + +const fs = require('fs'); +const path = require('path'); + +const ignoredDirs = new Set(['node_modules', 'test-results', 'playwright-report', 'blob-report']); + +function findTestDirs(dir) { + const shouldVisit = e => + e.isDirectory() && !ignoredDirs.has(e.name) && !e.name.startsWith('.'); + const entries = fs.readdirSync(dir, { withFileTypes: true }); + const subdirs = entries + .filter(shouldVisit) + .flatMap(e => findTestDirs(path.join(dir, e.name))); + return entries.some(e => e.isFile() && e.name === 'run.json') ? [dir, ...subdirs] : subdirs; +} + +// Returns the list of entries of all test folders, as objects +// { dir, relDir, entry, name, html, steps } +// where html is the file to screenshot. +function findTests() { + return findTestDirs(__dirname).flatMap(dir => { + const relDir = path.relative(__dirname, dir); + const runFile = path.join(dir, 'run.json'); + const config = JSON.parse(fs.readFileSync(runFile, 'utf8')); + if (!Array.isArray(config)) + throw new Error(`${runFile}: expected a list of { entry, steps } objects`); + return config.map(({ entry, steps = [0] }) => { + if (typeof entry !== 'string') + throw new Error(`${runFile}: missing "entry" field`); + const name = path.parse(entry).name; + const isHtml = path.extname(entry) === '.html'; + const html = path.join(dir, isHtml ? entry : `${name}.html`); + return { dir, relDir, entry, name, html, steps }; + }); + }); +} + +module.exports = { findTests };