You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
test: adopt Scriptorium (Quill + Nib) for the cross-target suite (#35)
* test: adopt Scriptorium (Quill + Nib) for the cross-target suite
Replace the hand-rolled runner in test/Program.fs with Scriptorium.Quill and the
shouldEqual/shouldBeTrue helpers with Scriptorium.Nib, laid out the way Fable.Giraffe
does it: one shared suite plus a small runner project per target.
test/shared/ Helpers.fs, ActorTests.fs, SupervisionTests.fs, BuilderTests.fs
test/dotnet/ dotnet run
test/python/ Fable -> Python
test/js/ Fable -> JS/Node
test/beam/ Fable -> Erlang
All 28 tests were ported, not rewritten — only the assertions and the runner changed.
Quill speaks Async and the library speaks ActorOp, so Helpers.toAsync bridges the two:
the identity on Python/JS/.NET (where ActorOp = Async) and a Run of the CPS chain on
BEAM (where Async is erased to synchronous callbacks anyway).
Upgrade Fable 5.11 -> 5.13: 5.11 emits Fable package sub-namespaces into nested
Sinks/src/ directories that rebar3 never compiles, leaving
scriptorium_parchment_sinks_universal undefined and crashing the BEAM run after the
tests had passed. 5.13 emits it flat. Verified the src BEAM build and all three
timeflies examples still build.
Add a JS runner, and make test-native a real behavioral run rather than a compile
smoke test — the non-BEAM Actor is MailboxProcessor-based, so the suite genuinely
exercises it on .NET.
The BEAM run is now self-contained in build/tests-beam (Fable pulls the Fable.Actor
sources into the same outDir and generates the rebar.config), so it no longer shares
apps/ with the library build, where two competing main.erl modules had to coexist.
Delete test/test_runner.erl — dead code listing AsyncRx-era modules that no longer
exist.
28/28 on .NET, Python, JS and BEAM.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* refactor: collapse the per-target test projects into one
The four runner projects were ceremony copied from Fable.Giraffe without re-deriving
whether its cause applies here. It does not: Giraffe has a src project per target that
each test project must reference (plus BEAM-only deps like Fable.Beam.Cowboy and a rebar
cowboy dep), whereas Fable.Actor has one library project with #if FABLE_COMPILER_BEAM
inside. Fable.Beam arrives transitively through the project reference, so even the BEAM
runner needed no package of its own.
The four Main.fs files were byte-identical apart from comments, and the four fsproj files
differed only by that one redundant Fable.Beam reference.
One project compiles to all four targets from a shared obj/, back to back, with no
--noCache — 28/28 on .NET, Python, JS and BEAM. The per-target runner comments are
consolidated into test/Main.fs, and test/shared/ is gone: it only meant something when
there was a non-shared counterpart.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
* chore: fix the dev=true Fable path in the justfile
fable_repo pointed at ../fable/beam-improvements-17 and ../fable/main. The branch name
is long dead, and the parent path is wrong too — ../fable does not exist on a
case-sensitive filesystem, so every dev=true recipe was broken, not just the BEAM one.
Point it at ../Fable/src/Fable.Cli, the same convention Fable.Giraffe uses, and let
whatever branch that checkout has out be the one used. That collapses fable/fable_beam
back into a single variable: the split only encoded "the BEAM backend lives on its own
branch", which stopped being true once every backend landed in one repo.
Also route build-timeflies-js through {{fable}} — it hardcoded `dotnet fable`, so
dev=true silently skipped it.
Verified dev=true now expands to an existing Fable.Cli.fsproj, and the default
dev=false path still runs 28/28 on all four targets.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
0 commit comments