diff --git a/README.md b/README.md index 8f73eec..2f7b1a0 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,13 @@ Per Fault-Injection-Audit-Convention (2026-05-16): | Function | Assertion-Count | Coverage | |---|---|---| -| `parse_lua_surface` | 7 | Happy-path (2 public + 1 private), empty-source edge | +| `parse_lua_surface` | 15 | Happy-path (2 public + 1 private), empty-source edge, sugar-form (`function M.foo`), mixed-form (sugar + explicit) | | `parse_readme_api` | 4 | Standard H3-pattern, no-API-section edge | | `diff_surface` | 5 | Equal (no diff), surface-superset (missing), doc-superset (stale) | | `grep_engine_calls` | 5 | 3 unique calls, no-calls edge | | `generate_topology_block` | 6 | Lib-with-deps+engine, asset-lib (no deps, no engine) | | `validate_readme_structure` | 8 | Complete core, missing-API core, missing-Topology, missing-Badges, community-tier-no-enforcement | -| **TOTAL** | **35** | | +| **TOTAL** | **43** | | ### Tested-Surface - All 6 public functions of `lib-core.api-discovery` v0.1.0. diff --git a/init.lua b/init.lua index 3009dae..1265317 100644 --- a/init.lua +++ b/init.lua @@ -27,6 +27,37 @@ return M local empty = api.parse_lua_surface("local M = {}\nreturn M") engine.test.equals(#empty.public, 0, "parse_lua_surface: empty source = no public") engine.test.equals(#empty.private, 0, "parse_lua_surface: empty source = no private") + + -- Sugar-form: function M.foo(...) end + local sugar_src = [[ +local M = {} +function M.alpha(x) return x end +function M.beta() end +function M._sugar_private() end +function not_in_M() end +return M +]] + local sugar_surface = api.parse_lua_surface(sugar_src) + engine.test.equals(#sugar_surface.public, 2, "parse_lua_surface: sugar-form 2 public") + engine.test.equals(sugar_surface.public[1], "alpha", "parse_lua_surface: sugar-form first = alpha") + engine.test.equals(sugar_surface.public[2], "beta", "parse_lua_surface: sugar-form second = beta") + engine.test.equals(#sugar_surface.private, 1, "parse_lua_surface: sugar-form 1 private") + engine.test.equals(sugar_surface.private[1], "_sugar_private", "parse_lua_surface: sugar-form private = _sugar_private") + + -- Mixed form (sugar + explicit in same source) + local mixed_src = [[ +local M = {} +function M.gamma() end +M.delta = function() end +return M +]] + local mixed_surface = api.parse_lua_surface(mixed_src) + engine.test.equals(#mixed_surface.public, 2, "parse_lua_surface: mixed-form 2 public") + -- Order: sugar-form parsed before explicit (per impl order)? Either is acceptable; use set-check: + local mixed_set = {} + for _, n in ipairs(mixed_surface.public) do mixed_set[n] = true end + engine.test.assert(mixed_set["gamma"], "parse_lua_surface: mixed-form gamma present") + engine.test.assert(mixed_set["delta"], "parse_lua_surface: mixed-form delta present") end -- ===== parse_readme_api =====