mirror of
https://github.com/chenasraf/text-transform.nvim.git
synced 2026-05-18 01:48:57 +00:00
171 lines
5.0 KiB
Lua
171 lines
5.0 KiB
Lua
-- partially imported from https://github.com/echasnovski/mini.nvim
|
|
local Helpers = {}
|
|
|
|
-- Add extra expectations
|
|
Helpers.expect = vim.deepcopy(MiniTest.expect)
|
|
|
|
-- The error message returned when a test fails.
|
|
local function errorMessage(str, pattern)
|
|
return string.format("Pattern: %s\nObserved string: %s", vim.inspect(pattern), str)
|
|
end
|
|
|
|
-- Check equality of a global `field` against `value` in the given `child` process.
|
|
-- @usage global_equality(child, "_G.TextTransformLoaded", true)
|
|
Helpers.expect.global_equality = MiniTest.new_expectation(
|
|
"variable in child process matches",
|
|
function(child, field, value)
|
|
return Helpers.expect.equality(child.lua_get(field), value)
|
|
end,
|
|
errorMessage
|
|
)
|
|
|
|
-- Check type equality of a global `field` against `value` in the given `child` process.
|
|
-- @usage global_type_equality(child, "_G.TextTransformLoaded", "boolean")
|
|
Helpers.expect.global_type_equality = MiniTest.new_expectation(
|
|
"variable type in child process matches",
|
|
function(child, field, value)
|
|
return Helpers.expect.global_equality(child, "type(" .. field .. ")", value)
|
|
end,
|
|
errorMessage
|
|
)
|
|
|
|
-- Check equality of a config `field` against `value` in the given `child` process.
|
|
-- @usage option_equality(child, "debug", true)
|
|
Helpers.expect.config_equality = MiniTest.new_expectation(
|
|
"config option matches",
|
|
function(child, field, value)
|
|
return Helpers.expect.global_equality(child, "_G.TextTransform.config." .. field, value)
|
|
end,
|
|
errorMessage
|
|
)
|
|
|
|
-- Check type equality of a config `field` against `value` in the given `child` process.
|
|
-- @usage config_type_equality(child, "debug", "boolean")
|
|
Helpers.expect.config_type_equality = MiniTest.new_expectation(
|
|
"config option type matches",
|
|
function(child, field, value)
|
|
return Helpers.expect.global_equality(
|
|
child,
|
|
"type(_G.TextTransform.config." .. field .. ")",
|
|
value
|
|
)
|
|
end,
|
|
errorMessage
|
|
)
|
|
|
|
-- Check equality of a state `field` against `value` in the given `child` process.
|
|
-- @usage state_equality(child, "enabled", true)
|
|
Helpers.expect.state_equality = MiniTest.new_expectation(
|
|
"state matches",
|
|
function(child, field, value)
|
|
return Helpers.expect.global_equality(child, "_G.TextTransform.enabled." .. field, value)
|
|
end,
|
|
errorMessage
|
|
)
|
|
|
|
-- Check type equality of a state `field` against `value` in the given `child` process.
|
|
-- @usage state_type_equality(child, "enabled", "boolean")
|
|
Helpers.expect.state_type_equality = MiniTest.new_expectation(
|
|
"state type matches",
|
|
function(child, field, value)
|
|
return Helpers.expect.global_equality(
|
|
child,
|
|
"type(_G.TextTransform.state." .. field .. ")",
|
|
value
|
|
)
|
|
end,
|
|
errorMessage
|
|
)
|
|
|
|
Helpers.expect.match = MiniTest.new_expectation("string matching", function(str, pattern)
|
|
return str:find(pattern) ~= nil
|
|
end, errorMessage)
|
|
|
|
Helpers.expect.no_match = MiniTest.new_expectation("no string matching", function(str, pattern)
|
|
return str:find(pattern) == nil
|
|
end, errorMessage)
|
|
|
|
-- Monkey-patch `MiniTest.new_child_neovim` with helpful wrappers
|
|
Helpers.new_child_neovim = function()
|
|
local child = MiniTest.new_child_neovim()
|
|
|
|
local prevent_hanging = function(method)
|
|
-- stylua: ignore
|
|
if not child.is_blocked() then return end
|
|
|
|
local msg = string.format("Can not use `child.%s` because child process is blocked.", method)
|
|
error(msg)
|
|
end
|
|
|
|
child.setup = function()
|
|
child.restart({ "-u", "scripts/minimal_init.lua" })
|
|
|
|
-- Change initial buffer to be readonly. This not only increases execution
|
|
-- speed, but more closely resembles manually opened Neovim.
|
|
child.bo.readonly = false
|
|
end
|
|
|
|
child.set_lines = function(arr, start, finish)
|
|
prevent_hanging("set_lines")
|
|
|
|
if type(arr) == "string" then
|
|
arr = vim.split(arr, "\n")
|
|
end
|
|
|
|
child.api.nvim_buf_set_lines(0, start or 0, finish or -1, false, arr)
|
|
end
|
|
|
|
child.get_lines = function(start, finish)
|
|
prevent_hanging("get_lines")
|
|
|
|
return child.api.nvim_buf_get_lines(0, start or 0, finish or -1, false)
|
|
end
|
|
|
|
child.set_cursor = function(line, column, win_id)
|
|
prevent_hanging("set_cursor")
|
|
|
|
child.api.nvim_win_set_cursor(win_id or 0, { line, column })
|
|
end
|
|
|
|
child.get_cursor = function(win_id)
|
|
prevent_hanging("get_cursor")
|
|
|
|
return child.api.nvim_win_get_cursor(win_id or 0)
|
|
end
|
|
|
|
child.set_size = function(lines, columns)
|
|
prevent_hanging("set_size")
|
|
|
|
if type(lines) == "number" then
|
|
child.o.lines = lines
|
|
end
|
|
|
|
if type(columns) == "number" then
|
|
child.o.columns = columns
|
|
end
|
|
end
|
|
|
|
child.get_size = function()
|
|
prevent_hanging("get_size")
|
|
|
|
return { child.o.lines, child.o.columns }
|
|
end
|
|
|
|
child.expect_screenshot = function(opts, path, screenshot_opts)
|
|
if child.fn.has("nvim-0.8") == 0 then
|
|
MiniTest.skip("Screenshots are tested for Neovim>=0.8 (for simplicity).")
|
|
end
|
|
|
|
MiniTest.expect.reference_screenshot(child.get_screenshot(screenshot_opts), path, opts)
|
|
end
|
|
|
|
return child
|
|
end
|
|
|
|
function Helpers.init_plugin(child, config)
|
|
config = config or ""
|
|
child.lua([[require('text-transform').setup(]] .. config .. [[)]])
|
|
end
|
|
|
|
return Helpers
|