5 assertions: equal-set (no diff), surface-superset (missing), doc- superset (stale). Sort-stable order verified. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
87 lines
3.2 KiB
Lua
87 lines
3.2 KiB
Lua
-- lib-core.api-discovery-test — Test-lib for lib-core.api-discovery
|
|
local api = require("lib-core.api-discovery")
|
|
|
|
local M = {}
|
|
|
|
function M.run_tests(ctx)
|
|
-- Assertions added in plan tasks 2-7.
|
|
|
|
-- ===== parse_lua_surface =====
|
|
do
|
|
local src = [[
|
|
local M = {}
|
|
M.foo = function(x) return x end
|
|
M.bar = function() end
|
|
M._private = function() end
|
|
local function not_in_M() end
|
|
return M
|
|
]]
|
|
local surface = api.parse_lua_surface(src)
|
|
engine.test.equals(#surface.public, 2, "parse_lua_surface: 2 public functions")
|
|
engine.test.equals(surface.public[1], "foo", "parse_lua_surface: first public is foo")
|
|
engine.test.equals(surface.public[2], "bar", "parse_lua_surface: second public is bar")
|
|
engine.test.equals(#surface.private, 1, "parse_lua_surface: 1 private function")
|
|
engine.test.equals(surface.private[1], "_private", "parse_lua_surface: private name = _private")
|
|
|
|
-- Edge: empty source
|
|
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")
|
|
end
|
|
|
|
-- ===== parse_readme_api =====
|
|
do
|
|
local md = [[
|
|
# lib-core.input
|
|
|
|
Some abstract.
|
|
|
|
## API
|
|
|
|
### `input.bind(action_name, keys)`
|
|
**Syntax:** `input.bind(action_name: string, keys: string[]) → void`
|
|
|
|
### `input.is_action_down(action) → bool`
|
|
Description.
|
|
|
|
## Conventions
|
|
Stuff.
|
|
]]
|
|
local doc = api.parse_readme_api(md)
|
|
engine.test.equals(#doc.documented, 2, "parse_readme_api: 2 documented functions")
|
|
engine.test.equals(doc.documented[1], "bind", "parse_readme_api: first = bind")
|
|
engine.test.equals(doc.documented[2], "is_action_down", "parse_readme_api: second = is_action_down")
|
|
|
|
-- Edge: no API section
|
|
local no_api = api.parse_readme_api("# Just abstract\nNothing else.")
|
|
engine.test.equals(#no_api.documented, 0, "parse_readme_api: no API-section = empty")
|
|
end
|
|
|
|
-- ===== diff_surface =====
|
|
do
|
|
-- Happy: surface == documented
|
|
local surface = { public = {"foo","bar"}, private = {"_x"} }
|
|
local readme = { documented = {"foo","bar"} }
|
|
local diff = api.diff_surface(surface, readme)
|
|
engine.test.equals(#diff.missing_docs, 0, "diff_surface: equal -> no missing")
|
|
engine.test.equals(#diff.stale_docs, 0, "diff_surface: equal -> no stale")
|
|
|
|
-- Surface > Doc -> missing
|
|
local surface2 = { public = {"foo","bar","baz"}, private = {} }
|
|
local readme2 = { documented = {"foo"} }
|
|
local diff2 = api.diff_surface(surface2, readme2)
|
|
engine.test.equals(#diff2.missing_docs, 2, "diff_surface: 2 missing docs")
|
|
engine.test.assert(diff2.missing_docs[1] == "bar" or diff2.missing_docs[1] == "baz", "diff_surface: missing contains bar/baz")
|
|
|
|
-- Doc > Surface -> stale
|
|
local surface3 = { public = {"foo"}, private = {} }
|
|
local readme3 = { documented = {"foo","gone","also_gone"} }
|
|
local diff3 = api.diff_surface(surface3, readme3)
|
|
engine.test.equals(#diff3.stale_docs, 2, "diff_surface: 2 stale docs")
|
|
end
|
|
|
|
engine.exit(engine.test.failures())
|
|
end
|
|
|
|
return M
|