Verification¶
SKINT ships 81 EditMode tests. Run them from Window ▸ General ▸ Test Runner, or verify everything — tests and a player build — with one command:
powershell -ExecutionPolicy Bypass -File tools\verify.ps1
It exits 0 only if the suite is green, the player build succeeds, and no SKINT assembly reached the player. Logs and the results XML land in Build/VerifyArtifacts/. Use -SkipBuild or -SkipTests to run half of it.
The script finds Unity from ProjectSettings/ProjectVersion.txt, so it follows the project rather than needing a path.
Two traps it exists to avoid¶
If you script this yourself, know that Unity will lie to you twice:
-runTests returns exit code 0 even when tests fail
Parse the results XML; never trust the exit code. A baseline run here returned 0 with five failures.
BuildSummary.totalErrors is non-zero on a perfectly good build
A build from a cold Library/ reports dozens of TypeDB index messages about Unity's own assemblies while still producing a valid player. Key on BuildResult.
Verification on every push¶
powershell -ExecutionPolicy Bypass -File tools\install-hooks.ps1
Installs a pre-push hook that runs the suite and a player build before anything leaves the machine, and refuses the push if either fails. Skip it for one push with git push --no-verify; remove it with -Uninstall.
This is how SKINT gets continuous verification, and it is a deliberate choice rather than a fallback — see below.
Why not GitHub Actions¶
.github/workflows/verify.yml exists and is correct, but it cannot run on a Personal Unity licence. game-ci supports three activation strategies only: a Pro/Plus serial, a .ulf licence file, or a floating licence server. Unity 6 Personal uses entitlement licensing and produces no .ulf, so none of the three is available — UNITY_EMAIL and UNITY_PASSWORD on their own yield "License activation strategy could not be determined".
The workflow is kept for either of two futures: a Pro/Plus licence (add UNITY_SERIAL), or a self-hosted runner, which uses the already-activated desktop editor and needs no secrets at all.
What the tests actually cover¶
Persistence and coalescing, editor-skin changes, style cache invalidation, preset schema completeness, preset path safety, undo durability across a domain reload, file IO failure handling, WCAG contrast across all ten presets, install-path resolution, geometry token derivation, and the boundary around another product's EditorPrefs keys.
What they cannot cover is IMGUI rendering — EditMode tests cannot call a style getter at all, because those build from EditorStyles and throw "You can only call GUI functions from inside OnGUI" outside a GUI callback. Layout behaviour, the designer's column reflow and the status messages are verified by hand.
If you move the project¶
Unity's Library/ caches absolute paths, so after moving the project folder the player build fails with Could not find a part of the path "<old location>..." even though the tests pass and nothing is wrong with the code. Clear the caches that hold paths and let Unity regenerate them:
Remove-Item -Recurse -Force Library\Bee, Library\PlayerDataCache, `
Library\BurstCache, Library\ShaderCache, `
Library\ShaderCache.db, Library\LastBuild.buildreport
Library/ is gitignored, so this is always safe. Keeping the rest of it avoids a full asset reimport.