Note: This page is generated from the
slicecore/splitframeengine repository. Edit the source document there and let automation sync it intosplitframe-io.
Unit Tests
pytest -q -n auto
-n auto (pytest-xdist) runs the suite on all cores and cuts the full-suite
wall time by more than half. Drop it (plain pytest -q tests/test_foo.py)
when debugging a single file — worker startup costs about a second, and
-s/--pdb only work without xdist.
The unit test suite now includes:
- runtime profile policy coverage
- cooked-content bundle loading and hash validation
- cook-pipeline deterministic no-op and dependency-rebuild coverage
- headless cooked gameplay-content integration coverage across strings, themes, biome metadata, and particle presets
- script plugin lifecycle and failure propagation
- headless engine startup, scene lifecycle, resize, and quit integration
- native tooling smoke and artifact-manifest coverage
- bounded real renderer validation JSON/Markdown/PNG review artifact coverage in CI
- engine-owned native startup-manifest coverage
- engine-owned native startup override precedence coverage
- headless
examples/simple_gamescene-flow coverage on a cook-pipeline-generated runtime manifest
Content Validation
python -m splitframe.content.validation --root data --strict
Native Smoke
python -m scripts.native.native_backend_smoke --allow-missing-extension --json
The supported host-path proof is the GameEngine lane:
python -m scripts.native.native_game_engine_runtime_smoke --allow-missing-extension --json
python -m scripts.native.native_simple_game_smoke --allow-missing-extension --json
Lower-level native facade and backend-selection smokes remain important, but
they are contract coverage underneath the preferred GameEngine startup flow.
To validate a compiled native module instead of only the facade contract, use two distinct build lanes rather than treating every compiled module as equivalent.
Low-level facade/runtime contract lane:
cmake -S native -B native/build-ci-smoke-lowlevel \
-DCMAKE_BUILD_TYPE=Release \
-DSPLITFRAME_NATIVE_ENABLE_IMGUI=OFF \
-DSPLITFRAME_NATIVE_USE_GLFW=OFF \
-DSPLITFRAME_NATIVE_USE_VULKAN_BOOTSTRAP=OFF
cmake --build native/build-ci-smoke-lowlevel --config Release -j2
python -m scripts.native.native_backend_smoke --module-dir native/build-ci-smoke-lowlevel --json
python -m scripts.native.native_renderer_runtime_smoke --module-dir native/build-ci-smoke-lowlevel --json
python -m scripts.native.native_runtime_env_smoke --module-dir native/build-ci-smoke-lowlevel --json
python -m scripts.native.native_feature_tier_smoke --module-dir native/build-ci-smoke-lowlevel --json
python -m scripts.native.native_renderer_config_smoke --module-dir native/build-ci-smoke-lowlevel --json
python -m scripts.native.native_renderer_submission_smoke --module-dir native/build-ci-smoke-lowlevel --json
Host-path GameEngine / RenderContext lane:
cmake -S native -B native/build-ci-smoke-host \
-DCMAKE_BUILD_TYPE=Release \
-DSPLITFRAME_NATIVE_ENABLE_IMGUI=ON \
-DSPLITFRAME_NATIVE_USE_GLFW=ON \
-DSPLITFRAME_NATIVE_USE_VULKAN_BOOTSTRAP=ON
cmake --build native/build-ci-smoke-host --config Release -j2
python -m scripts.native.native_engine_bridge_smoke --module-dir native/build-ci-smoke-host --json
python -m scripts.native.native_game_engine_runtime_smoke --module-dir native/build-ci-smoke-host --json
python -m scripts.native.native_simple_game_smoke --module-dir native/build-ci-smoke-host --json
On headless Linux, wrap the host-path smoke commands with xvfb-run -a so the
bootstrap-capable native frontend has a display server to bind against.
Boundary Audit
bash scripts/audit_splitframe_boundaries.sh .
Import Smoke
python -c "import splitframe, splitframe_api, splitframe_native_renderer"