mirror of
https://github.com/johndoe6345789/metabuilder.git
synced 2026-04-25 06:14:59 +00:00
147 lines
5.5 KiB
Lua
147 lines
5.5 KiB
Lua
-- Tests for Lua editor utilities
|
|
-- Tests render, validate, and run_sandbox functions
|
|
|
|
local M = {}
|
|
|
|
---@param framework TestFramework
|
|
---@param assertions AssertionsModule
|
|
---@param mocks MocksModule
|
|
function M.defineTests(framework, assertions, mocks)
|
|
local describe = framework.describe
|
|
local it = framework.it
|
|
local it_each = framework.it_each
|
|
local expect = assertions.expect
|
|
|
|
-- Import lua module
|
|
local lua = require("lua")
|
|
|
|
describe("lua editor", function()
|
|
|
|
describe("render", function()
|
|
it_each({
|
|
{ value = nil, desc = "nil value", expectedValue = "" },
|
|
{ value = "", desc = "empty string", expectedValue = "" },
|
|
{ value = "print('hello')", desc = "simple print", expectedValue = "print('hello')" },
|
|
{ value = "local x = 1", desc = "variable declaration", expectedValue = "local x = 1" },
|
|
{ value = "function test()\n return true\nend", desc = "function definition", expectedValue = "function test()\n return true\nend" }
|
|
})("should render editor with $desc", function(tc)
|
|
local result = lua.render(tc.value)
|
|
expect(result.type).toBe("code_editor")
|
|
expect(result.props.language).toBe("lua")
|
|
expect(result.props.value).toBe(tc.expectedValue)
|
|
expect(result.props.line_numbers).toBe(true)
|
|
expect(result.props.show_snippets).toBe(true)
|
|
end)
|
|
|
|
it_each({
|
|
{ readOnly = true, expected = true, desc = "read-only mode" },
|
|
{ readOnly = false, expected = false, desc = "editable mode" },
|
|
{ readOnly = nil, expected = false, desc = "default mode" }
|
|
})("should handle $desc", function(tc)
|
|
local options = tc.readOnly ~= nil and { read_only = tc.readOnly } or nil
|
|
local result = lua.render("", options)
|
|
expect(result.props.read_only).toBe(tc.expected)
|
|
end)
|
|
|
|
it("should return correct component type", function()
|
|
local result = lua.render("")
|
|
expect(result.type).toBe("code_editor")
|
|
expect(result.props).toBeTruthy()
|
|
end)
|
|
|
|
it("should have correct default properties", function()
|
|
local result = lua.render()
|
|
expect(result.props.language).toBe("lua")
|
|
expect(result.props.line_numbers).toBe(true)
|
|
expect(result.props.show_snippets).toBe(true)
|
|
expect(result.props.read_only).toBe(false)
|
|
end)
|
|
|
|
it("should include snippet support", function()
|
|
local result = lua.render("local x = 1")
|
|
expect(result.props.show_snippets).toBe(true)
|
|
end)
|
|
end)
|
|
|
|
describe("validate", function()
|
|
it_each({
|
|
{ input = "local x = 1", desc = "variable declaration" },
|
|
{ input = "function test() end", desc = "empty function" },
|
|
{ input = "return true", desc = "return statement" },
|
|
{ input = "for i = 1, 10 do end", desc = "for loop" },
|
|
{ input = "if true then end", desc = "if statement" }
|
|
})("should validate $desc as valid", function(tc)
|
|
local result = lua.validate(tc.input)
|
|
expect(result.valid).toBe(true)
|
|
expect(result.errors).toBeTruthy()
|
|
expect(#result.errors).toBe(0)
|
|
end)
|
|
|
|
it("should return validation result structure", function()
|
|
local result = lua.validate("local x = 1")
|
|
expect(result.valid).toBeType("boolean")
|
|
expect(result.errors).toBeType("table")
|
|
end)
|
|
|
|
it("should handle empty string input", function()
|
|
local result = lua.validate("")
|
|
expect(result).toBeTruthy()
|
|
expect(result.valid).toBeType("boolean")
|
|
end)
|
|
|
|
it("should handle multiline code", function()
|
|
local code = [[
|
|
local function test()
|
|
local x = 1
|
|
return x + 1
|
|
end
|
|
]]
|
|
local result = lua.validate(code)
|
|
expect(result).toBeTruthy()
|
|
expect(result.valid).toBeType("boolean")
|
|
end)
|
|
end)
|
|
|
|
describe("run_sandbox", function()
|
|
it_each({
|
|
{ code = "return 1", context = nil, desc = "simple return" },
|
|
{ code = "local x = 1; return x", context = nil, desc = "variable and return" },
|
|
{ code = "return ctx.value", context = { value = 42 }, desc = "context access" }
|
|
})("should create sandbox action for $desc", function(tc)
|
|
local result = lua.run_sandbox(tc.code, tc.context)
|
|
expect(result.action).toBe("execute")
|
|
expect(result.sandbox).toBe(true)
|
|
end)
|
|
|
|
it("should always set sandbox to true", function()
|
|
local result = lua.run_sandbox("print('hello')")
|
|
expect(result.sandbox).toBe(true)
|
|
end)
|
|
|
|
it("should use empty context when none provided", function()
|
|
local result = lua.run_sandbox("return 1")
|
|
expect(result.context).toBeTruthy()
|
|
expect(result.context).toBeType("table")
|
|
end)
|
|
|
|
it("should preserve provided context", function()
|
|
local ctx = { user = "test", value = 123 }
|
|
local result = lua.run_sandbox("return ctx.value", ctx)
|
|
expect(result.context).toBeTruthy()
|
|
expect(result.context.user).toBe("test")
|
|
expect(result.context.value).toBe(123)
|
|
end)
|
|
|
|
it("should return correct action structure", function()
|
|
local result = lua.run_sandbox("local x = 1")
|
|
expect(result.action).toBe("execute")
|
|
expect(result.sandbox).toBe(true)
|
|
expect(result.context).toBeType("table")
|
|
end)
|
|
end)
|
|
|
|
end)
|
|
end
|
|
|
|
return M
|