2.3 KiB
24 — Test against major Lua projects
Status: open
Problem
Lush modifies the Lua core (parser, lexer, runtime). We need to verify that these changes don't break compatibility with real-world Lua code.
Projects to test against
Language compliance (start here)
- Lua 5.4 test suite (
testes/) — the gold standard; tests edge cases of the language spec directly - LuaJIT test suite — good for catching subtle semantic differences; also runs the official Lua tests
Embedded / scripting (real-world stress tests)
- Neovim — uses Lua extensively for config and plugins; large test suite using
busted - OpenResty / nginx-lua (
lua-nginx-module) — huget/test directory using Test::Nginx - Kong — API gateway built on OpenResty; thousands of test cases, stresses coroutines, metatables, and C API
Game engines
- Minetest (Luanti) — open source voxel engine, massive Lua modding API with tests
- LÖVE (love2d) — 2D game framework; community test suites
Lua tooling / frameworks
- Luacheck — linter with a large Lua test suite
- busted — BDD test framework with good self-coverage
- lua-TestMore — port of Perl's Test::More to Lua
Recommended priority
testes/from official Lua 5.4 source — most authoritative- Neovim's test suite — real-world, large scale
- Kong's test suite — stresses coroutines, metatables, and C API
- LuaJIT test suite — catches subtle semantic differences
Goal
Confirm that standard Lua programs run correctly on Lush without modification. Any failures should be triaged as either acceptable (due to intentional syntax changes) or bugs to fix.
Implementation
Add a new dir to the gitignore which will be used to clone projects. Clone/pull a set of projects that use lua and have a test suite. Make a shallow clone Each project will have different dependencies. We need to audit each one and investigate how feasible it is to integrate them into the script. Lush forks from lua, check which version we forked from and clone compatible tags/versions of each project. Run their tests using our language.
Many projects use busted/luacheck, we may be able to use a system installed version via luarocks or brew, we should investigate the compatiblility of this.