lune/tests/roblox/reflection/class.luau
2023-07-22 14:45:18 +02:00

41 lines
1.4 KiB
Lua

local roblox = require("@lune/roblox")
local db = roblox.getReflectionDatabase()
-- Make sure database classes exist + fields / properties are correct types
for _, className in db:GetClassNames() do
local class = db:GetClass(className)
assert(class ~= nil, "Missing " .. className .. " class in database")
assert(type(class.Name) == "string", "Name property must be a string")
assert(
class.Superclass == nil or type(class.Superclass) == "string",
"Superclass property must be nil or a string"
)
assert(type(class.Properties) == "table", "Properties property must be a table")
assert(type(class.DefaultProperties) == "table", "DefaultProperties property must be a table")
assert(type(class.Tags) == "table", "Tags property must be a table")
end
-- Any property present in default properties must also
-- be in properties *or* the properties of a superclass
for _, className in db:GetClassNames() do
local class = db:GetClass(className)
assert(class ~= nil)
for name, value in class.DefaultProperties do
local found = false
local current: roblox.DatabaseClass? = class
while current ~= nil do
if current.Properties[name] ~= nil then
found = true
break
elseif current.Superclass ~= nil then
current = db:GetClass(current.Superclass)
else
break
end
end
assert(found, "Missing default property " .. name .. " in properties table")
end
end