test: add simple window unit test
This commit is contained in:
parent
b27bc4ed26
commit
987e1a3341
@ -53,6 +53,7 @@ function M.get_str(mode)
|
|||||||
end,
|
end,
|
||||||
V = function()
|
V = function()
|
||||||
print 'TODO'
|
print 'TODO'
|
||||||
|
return ''
|
||||||
end,
|
end,
|
||||||
})[mode]():match '^%s*(.-)%s*$'
|
})[mode]():match '^%s*(.-)%s*$'
|
||||||
end
|
end
|
||||||
@ -174,7 +175,7 @@ end
|
|||||||
---@param str string
|
---@param str string
|
||||||
---@return boolean
|
---@return boolean
|
||||||
function M.is_word(str)
|
function M.is_word(str)
|
||||||
return str:match '%w+' == str
|
return str:find('%W') == nil
|
||||||
end
|
end
|
||||||
|
|
||||||
---@param list any[]
|
---@param list any[]
|
||||||
|
@ -161,21 +161,9 @@ window.__index = window
|
|||||||
|
|
||||||
|
|
||||||
---@alias WindowOpts
|
---@alias WindowOpts
|
||||||
---|{style: string, border: string, focusable: boolean, noautocmd?: boolean, relative: string, width: integer, height: integer, col: integer, row: integer, zindex?: integer, title?: table | string}
|
---|{style: string, border: string, focusable: boolean, noautocmd?: boolean, relative: 'mouse'|'cursor'|'editor'|'win', width: integer, height: integer, col: integer, row: integer, zindex?: integer, title?: table | string}
|
||||||
|
|
||||||
|
|
||||||
---@class TransWindowOpts
|
|
||||||
local default_opts = {
|
|
||||||
enter = false,
|
|
||||||
winid = -1,
|
|
||||||
---@type WindowOpts
|
|
||||||
win_opts = {
|
|
||||||
style = 'minimal',
|
|
||||||
border = 'rounded',
|
|
||||||
focusable = false,
|
|
||||||
noautocmd = true,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
---@class TransWindow
|
---@class TransWindow
|
||||||
@ -197,11 +185,37 @@ local default_opts = {
|
|||||||
-- relative = relative,
|
-- relative = relative,
|
||||||
-- }
|
-- }
|
||||||
|
|
||||||
|
local default_opts = {
|
||||||
|
enter = false,
|
||||||
|
winid = -1,
|
||||||
|
---@type WindowOpts
|
||||||
|
win_opts = {
|
||||||
|
-- INFO : ensured options
|
||||||
|
-- col
|
||||||
|
-- row
|
||||||
|
-- width
|
||||||
|
-- height
|
||||||
|
-- relative
|
||||||
|
-- zindex
|
||||||
|
style = 'minimal',
|
||||||
|
border = 'rounded',
|
||||||
|
focusable = false,
|
||||||
|
noautocmd = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
---@class TransWindowOpts
|
||||||
|
---@field buffer TransBuffer attached buffer object
|
||||||
|
---@field enter? boolean cursor should [enter] window when open,default: false
|
||||||
|
---@field win_opts WindowOpts window config [**When open**]
|
||||||
|
---@field animation? table? Hover Window Animation
|
||||||
|
|
||||||
---Create new window
|
---Create new window
|
||||||
---@param opts TransWindowOpts window config
|
---@param opts TransWindowOpts window config
|
||||||
---@return TransWindow
|
---@return TransWindow
|
||||||
function window.new(opts)
|
function window.new(opts)
|
||||||
opts = vim.tbl_deep_extend('keep', opts, default_opts)
|
opts = vim.tbl_deep_extend('keep', opts, default_opts)
|
||||||
|
opts.animation = opts.animation or { interval = 12 }
|
||||||
|
|
||||||
local win = setmetatable(opts, window)
|
local win = setmetatable(opts, window)
|
||||||
---@cast win TransWindow
|
---@cast win TransWindow
|
||||||
|
@ -92,13 +92,13 @@ function M:init_window(opts)
|
|||||||
buffer = self.buffer,
|
buffer = self.buffer,
|
||||||
animation = m_opts.animation,
|
animation = m_opts.animation,
|
||||||
win_opts = {
|
win_opts = {
|
||||||
|
relative = opts.relative or 'cursor',
|
||||||
col = opts.col or 1,
|
col = opts.col or 1,
|
||||||
row = opts.row or 1,
|
row = opts.row or 1,
|
||||||
width = opts.width or m_opts.width,
|
width = opts.width or m_opts.width,
|
||||||
height = opts.height or m_opts.height,
|
height = opts.height or m_opts.height,
|
||||||
relative = opts.relative or 'cursor',
|
|
||||||
title = m_opts.title,
|
title = m_opts.title,
|
||||||
title_pos = m_opts.title and 'center' or nil,
|
title_pos = m_opts.title and 'center',
|
||||||
zindex = 100,
|
zindex = 100,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,10 @@ describe('util.display_height', function()
|
|||||||
|
|
||||||
-- Unicode width test
|
-- Unicode width test
|
||||||
local u_lines = {
|
local u_lines = {
|
||||||
'12345678👍', -- 10
|
'12345678👍', -- 10
|
||||||
'あうえお', -- 8
|
'あうえお', -- 8
|
||||||
'𠮷野い𠮷家野家家', -- 16
|
'𠮷野い𠮷家野家家', -- 16
|
||||||
'👍👍👍お家', -- 10
|
'👍👍👍お家', -- 10
|
||||||
}
|
}
|
||||||
|
|
||||||
assert.are.equal(4, util.display_height(u_lines, 20))
|
assert.are.equal(4, util.display_height(u_lines, 20))
|
||||||
@ -76,3 +76,17 @@ describe('util.center', function()
|
|||||||
assert.are.same(i { (' '):rep(2) .. '1234567890' }, util.center(node, 15))
|
assert.are.same(i { (' '):rep(2) .. '1234567890' }, util.center(node, 15))
|
||||||
end)
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
describe('util.is_word', function()
|
||||||
|
it('can detect word', function()
|
||||||
|
for test, value in pairs {
|
||||||
|
['あうえお'] = false,
|
||||||
|
['hello'] = true,
|
||||||
|
['hello world'] = false,
|
||||||
|
['test_cool'] = false,
|
||||||
|
[' hello'] = false,
|
||||||
|
} do
|
||||||
|
assert.are.same(util.is_word(test), value)
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
71
lua/test/window_spec.lua
Normal file
71
lua/test/window_spec.lua
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
require 'test.setup'
|
||||||
|
|
||||||
|
|
||||||
|
describe('window', with_buffer(function(buffer)
|
||||||
|
local window
|
||||||
|
before_each(function()
|
||||||
|
buffer:wipe()
|
||||||
|
window = Trans.window.new {
|
||||||
|
buffer = buffer,
|
||||||
|
win_opts = {
|
||||||
|
col = 1,
|
||||||
|
row = 1,
|
||||||
|
width = 1,
|
||||||
|
height = 1,
|
||||||
|
relative = 'editor',
|
||||||
|
},
|
||||||
|
}
|
||||||
|
window:set('wrap', false)
|
||||||
|
end)
|
||||||
|
|
||||||
|
after_each(function()
|
||||||
|
window:try_close()
|
||||||
|
end)
|
||||||
|
|
||||||
|
it('can work well when no pass animation table', function()
|
||||||
|
window:open()
|
||||||
|
assert.is_true(api.nvim_win_is_valid(window.winid))
|
||||||
|
end)
|
||||||
|
|
||||||
|
describe('smooth_expand', function()
|
||||||
|
it('can work well when no pass animation table', function()
|
||||||
|
window:smooth_expand { field = 'width', to = 10 }
|
||||||
|
assert.are.same(window:width(), 10)
|
||||||
|
|
||||||
|
window:smooth_expand { field = 'width', to = 6 }
|
||||||
|
assert.are.same(window:width(), 6)
|
||||||
|
|
||||||
|
window:smooth_expand { field = 'height', to = 10 }
|
||||||
|
assert.are.same(window:height(), 10)
|
||||||
|
|
||||||
|
window:smooth_expand { field = 'height', to = 6 }
|
||||||
|
assert.are.same(window:height(), 6)
|
||||||
|
|
||||||
|
window:smooth_expand { field = 'height', to = 6 }
|
||||||
|
assert.are.same(window:height(), 6)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("don't change window wrap option", function()
|
||||||
|
window:smooth_expand { field = 'width', to = 10 }
|
||||||
|
assert.is_false(window:option 'wrap')
|
||||||
|
|
||||||
|
|
||||||
|
window:set('wrap', true)
|
||||||
|
window:smooth_expand { field = 'width', to = 10 }
|
||||||
|
assert.is_true(window:option 'wrap')
|
||||||
|
|
||||||
|
window:smooth_expand { field = 'height', to = 10 }
|
||||||
|
assert.is_true(window:option 'wrap')
|
||||||
|
end)
|
||||||
|
end)
|
||||||
|
|
||||||
|
it("resize() don't change window wrap option", function()
|
||||||
|
window:resize { width = 10, height = 10 }
|
||||||
|
assert.is_false(window:option 'wrap')
|
||||||
|
|
||||||
|
|
||||||
|
window:set('wrap', true)
|
||||||
|
window:resize { width = 5, height = 5 }
|
||||||
|
assert.is_true(window:option 'wrap')
|
||||||
|
end)
|
||||||
|
end))
|
Loading…
x
Reference in New Issue
Block a user