All docs
Engine Docs Synced doc Engine source of truth

Testing Splitframe

Boundary checks, import smoke coverage, and standalone engine verification.

Generated from slicecore/splitframe View source doc

Note: This page is generated from the slicecore/splitframe engine repository. Edit the source document there and let automation sync it into splitframe-io.

Unit Tests

pytest -q

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
  • engine-owned native startup-manifest coverage
  • engine-owned native startup override precedence coverage
  • headless examples/simple_game scene-flow coverage on a cook-pipeline-generated runtime manifest

Content Validation

python scripts/maturity/content_validate.py --root data --strict

Native Smoke

python scripts/native/native_backend_smoke.py --allow-missing-extension --json

The supported host-path proof is the GameEngine lane:

python scripts/native/native_game_engine_runtime_smoke.py --allow-missing-extension --json
python scripts/native/native_simple_game_smoke.py --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 scripts/native/native_backend_smoke.py --module-dir native/build-ci-smoke-lowlevel --json
python scripts/native/native_renderer_runtime_smoke.py --module-dir native/build-ci-smoke-lowlevel --json
python scripts/native/native_runtime_env_alias_smoke.py --module-dir native/build-ci-smoke-lowlevel --json
python scripts/native/native_feature_tier_smoke.py --module-dir native/build-ci-smoke-lowlevel --json
python scripts/native/native_renderer_config_smoke.py --module-dir native/build-ci-smoke-lowlevel --json
python scripts/native/native_renderer_submission_smoke.py --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 scripts/native/native_engine_bridge_smoke.py --module-dir native/build-ci-smoke-host --json
python scripts/native/native_game_engine_runtime_smoke.py --module-dir native/build-ci-smoke-host --json
python scripts/native/native_simple_game_smoke.py --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"