Files
kong--kong/spec/01-unit/02-rockspec_meta_spec.lua
2026-07-13 12:32:21 +08:00

100 lines
2.9 KiB
Lua

local pl_utils = require "pl.utils"
local pl_path = require "pl.path"
local pl_dir = require "pl.dir"
local meta = require "kong.meta"
describe("rockspec/meta", function()
local rock, lua_srcs = {}
local rock_filename
lazy_setup(function()
lua_srcs = pl_dir.getallfiles("./kong", "*.lua")
assert.True(#lua_srcs > 0)
local res = pl_dir.getfiles(".", "*.rockspec")
assert(#res == 1, "more than 1 rockspec file")
rock_filename = res[1]
local f = assert(loadfile(res[1]))
setfenv(f, rock)
f()
end)
describe("meta", function()
it("has a _NAME field", function()
assert.is_string(meta._NAME)
end)
it("has a _VERSION field", function()
assert.is_string(meta._VERSION)
assert.matches("%d+%.%d+%.%d+", meta._VERSION)
end)
it("has a _VERSION_TABLE field", function()
assert.is_table(meta._VERSION_TABLE)
assert.is_number(meta._VERSION_TABLE.major)
assert.is_number(meta._VERSION_TABLE.minor)
assert.is_number(meta._VERSION_TABLE.patch)
-- suffix optional
end)
it("has a _SERVER_TOKENS field", function()
assert.is_string(meta._SERVER_TOKENS)
end)
it("has a _SERVER_TOKENS field that equals to _NAME/_VERSION", function()
assert.equal(meta._NAME .. "/" .. meta._VERSION, meta._SERVER_TOKENS)
end)
it("has a _DEPENDENCIES field", function()
assert.is_table(meta._DEPENDENCIES)
assert.is_table(meta._DEPENDENCIES.nginx)
end)
end)
it("has same name as meta", function()
assert.equal(meta._NAME, rock.package)
end)
describe("modules", function()
it("all modules named as their path", function()
for mod_name, mod_path in pairs(rock.build.modules) do
if mod_name ~= "kong" then
mod_path = mod_path:gsub("%.lua", ""):gsub("/", '.'):gsub("%.init", "")
assert(mod_name == mod_path,
mod_path .. " has different name (" .. mod_name .. ")")
end
end
end)
it("all rockspec files do exist", function()
for mod_name, mod_path in pairs(rock.build.modules) do
assert(pl_path.exists(mod_path),
mod_path .. " does not exist (" .. mod_name .. ")")
end
end)
end)
describe("requires", function()
it("requires in the codebase are defined modules in the rockspec", function()
for _, src in ipairs(lua_srcs) do
local str = pl_utils.readfile(src)
-- PCRE: require\s*\(?\s*(["''])(kong\.[\w_.-]+[\w_.-])(["''])
for _, mod in string.gmatch(str, "require%s*%(?%s*([\"'])(kong%.[%w_.-]+[%w_-])%1") do
if not rock.build.modules[mod] then
assert(rock.build.modules[mod] ~= nil,
"Invalid module require: \n" ..
"requiring module '" .. mod .. "' in Lua source " ..
"'" .. src .. "' that is not declared in " ..
rock_filename)
end
end
end
end)
end)
end)