2021-09-20 11:46:38 +00:00
|
|
|
-- Copyright (c) 2020-2021 shadmansaleh
|
|
|
|
-- MIT license, see LICENSE for more details.
|
|
|
|
|
2021-05-05 18:04:16 +00:00
|
|
|
local helpers = require 'tests.helpers'
|
|
|
|
|
2021-05-09 21:11:18 +00:00
|
|
|
local eq = assert.are.same
|
|
|
|
local neq = assert.are_not.same
|
2021-05-05 18:04:16 +00:00
|
|
|
local assert_component = helpers.assert_component
|
|
|
|
local build_component_opts = helpers.build_component_opts
|
|
|
|
local stub = require 'luassert.stub'
|
|
|
|
|
|
|
|
describe('Component:', function()
|
|
|
|
it('can select separators', function()
|
|
|
|
local opts = build_component_opts()
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp = require 'lualine.components.special.function_component'(opts)
|
2021-05-05 18:04:16 +00:00
|
|
|
-- correct for lualine_c
|
|
|
|
eq('', comp.options.separator)
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts2 = build_component_opts { self = { section = 'lualine_y' } }
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp2 = require 'lualine.components.special.function_component'(opts2)
|
2021-05-05 18:04:16 +00:00
|
|
|
-- correct for lualine_u
|
|
|
|
eq('', comp2.options.separator)
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('can provide unique identifier', function()
|
|
|
|
local opts1 = build_component_opts()
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp1 = require 'lualine.components.special.function_component'(opts1)
|
2021-05-05 18:04:16 +00:00
|
|
|
local opts2 = build_component_opts()
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp2 = require 'lualine.components.special.function_component'(opts2)
|
2021-05-05 18:04:16 +00:00
|
|
|
neq(comp1.component_no, comp2.component_no)
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('create option highlights', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local color = { fg = '#224532', bg = '#892345' }
|
|
|
|
local opts1 = build_component_opts { color = color }
|
2021-05-05 18:04:16 +00:00
|
|
|
local hl = require 'lualine.highlight'
|
|
|
|
stub(hl, 'create_component_highlight_group')
|
2021-09-03 18:28:20 +00:00
|
|
|
hl.create_component_highlight_group.returns 'MyCompHl'
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp1 = require 'lualine.components.special.function_component'(opts1)
|
2021-05-05 18:04:16 +00:00
|
|
|
eq('MyCompHl', comp1.options.color_highlight)
|
|
|
|
-- color highlight wan't in options when create_comp_hl was
|
|
|
|
-- called so remove it before assert
|
|
|
|
comp1.options.color_highlight = nil
|
2021-09-03 18:28:20 +00:00
|
|
|
assert.stub(hl.create_component_highlight_group).was_called_with(color, comp1.options.component_name, comp1.options)
|
2021-05-05 18:04:16 +00:00
|
|
|
hl.create_component_highlight_group:revert()
|
2021-08-09 07:53:42 +00:00
|
|
|
color = 'MyHl'
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts2 = build_component_opts { color = color }
|
2021-08-09 07:53:42 +00:00
|
|
|
stub(hl, 'create_component_highlight_group')
|
2021-09-03 18:28:20 +00:00
|
|
|
hl.create_component_highlight_group.returns 'MyCompLinkedHl'
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp2 = require 'lualine.components.special.function_component'(opts2)
|
2021-08-09 07:53:42 +00:00
|
|
|
eq('MyCompLinkedHl', comp2.options.color_highlight)
|
|
|
|
-- color highlight wan't in options when create_comp_hl was
|
|
|
|
-- called so remove it before assert
|
|
|
|
comp2.options.color_highlight = nil
|
2021-09-03 18:28:20 +00:00
|
|
|
assert.stub(hl.create_component_highlight_group).was_called_with(color, comp2.options.component_name, comp2.options)
|
2021-08-09 07:53:42 +00:00
|
|
|
hl.create_component_highlight_group:revert()
|
2021-05-05 18:04:16 +00:00
|
|
|
end)
|
|
|
|
|
|
|
|
it('can draw', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, 'test')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('can apply separators', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts { padding = 0 }
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, 'test')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('can apply default highlight', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts { padding = 0, hl = '%#My_highlight#' }
|
2021-08-26 11:47:48 +00:00
|
|
|
assert_component(nil, opts, '%#My_highlight#test')
|
2021-09-03 18:28:20 +00:00
|
|
|
opts = build_component_opts {
|
|
|
|
function()
|
|
|
|
return '%#Custom_hl#test'
|
|
|
|
end,
|
|
|
|
padding = 0,
|
|
|
|
hl = '%#My_highlight#',
|
|
|
|
}
|
2021-08-26 11:47:48 +00:00
|
|
|
assert_component(nil, opts, '%#Custom_hl#test%#My_highlight#')
|
2021-09-03 18:28:20 +00:00
|
|
|
opts = build_component_opts {
|
|
|
|
function()
|
|
|
|
return 'in middle%#Custom_hl#test'
|
|
|
|
end,
|
|
|
|
padding = 0,
|
|
|
|
hl = '%#My_highlight#',
|
|
|
|
}
|
2021-08-26 11:47:48 +00:00
|
|
|
assert_component(nil, opts, '%#My_highlight#in middle%#Custom_hl#test%#My_highlight#')
|
2021-05-05 18:04:16 +00:00
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Global options:', function()
|
|
|
|
it('left_padding', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = { left = 5 },
|
2021-09-03 18:28:20 +00:00
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, ' test')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('right_padding', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = { right = 5 },
|
2021-09-03 18:28:20 +00:00
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, 'test ')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('padding', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 5,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, ' test ')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('icon', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
2021-09-03 18:28:20 +00:00
|
|
|
icon = '0',
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, '0 test')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('icons_enabled', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
|
|
|
icons_enabled = true,
|
2021-09-03 18:28:20 +00:00
|
|
|
icon = '0',
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, '0 test')
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts2 = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
icons_enabled = false,
|
|
|
|
icon = '0',
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts2, 'test')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('separator', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
2021-09-03 18:28:20 +00:00
|
|
|
separator = '|',
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, 'test|')
|
|
|
|
end)
|
|
|
|
|
2021-09-14 15:14:23 +00:00
|
|
|
it('fmt', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
2021-09-14 15:14:23 +00:00
|
|
|
fmt = function(data)
|
2021-05-05 18:04:16 +00:00
|
|
|
return data:sub(1, 1):upper() .. data:sub(2, #data)
|
2021-09-03 18:28:20 +00:00
|
|
|
end,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, 'Test')
|
|
|
|
end)
|
|
|
|
|
2021-09-14 15:14:23 +00:00
|
|
|
it('cond', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
2021-09-14 15:14:23 +00:00
|
|
|
cond = function()
|
2021-09-03 18:28:20 +00:00
|
|
|
return true
|
|
|
|
end,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts, 'test')
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts2 = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
2021-09-14 15:14:23 +00:00
|
|
|
cond = function()
|
2021-09-03 18:28:20 +00:00
|
|
|
return false
|
|
|
|
end,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts2, '')
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('color', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
2021-09-03 18:28:20 +00:00
|
|
|
color = 'MyHl',
|
|
|
|
}
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp = require 'lualine.components.special.function_component'(opts)
|
2021-09-03 18:28:20 +00:00
|
|
|
local custom_link_hl_name = 'lualine_' .. comp.options.component_name .. '_no_mode'
|
|
|
|
eq('%#' .. custom_link_hl_name .. '#test', comp:draw(opts.hl))
|
|
|
|
local opts2 = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
color = { bg = '#230055', fg = '#223344' },
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
local hl = require 'lualine.highlight'
|
|
|
|
stub(hl, 'component_format_highlight')
|
2021-09-03 18:28:20 +00:00
|
|
|
hl.component_format_highlight.returns '%#MyCompHl#'
|
2021-09-25 17:15:42 +00:00
|
|
|
local comp2 = require 'lualine.components.special.function_component'(opts2)
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component(nil, opts2, '%#MyCompHl#test')
|
2021-09-03 18:28:20 +00:00
|
|
|
assert.stub(hl.component_format_highlight).was_called_with(comp2.options.color_highlight)
|
2021-05-05 18:04:16 +00:00
|
|
|
hl.component_format_highlight:revert()
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Encoding component', function()
|
|
|
|
it('works', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-10-21 13:16:12 +00:00
|
|
|
local tmp_path = 'tmp.txt'
|
|
|
|
local tmp_fp = io.open(tmp_path, 'w')
|
|
|
|
tmp_fp:write 'test file'
|
|
|
|
tmp_fp:close()
|
|
|
|
vim.cmd('e ' .. tmp_path)
|
|
|
|
assert_component('encoding', opts, 'utf-8')
|
2021-11-22 13:40:18 +00:00
|
|
|
vim.cmd('bd!')
|
2021-10-21 13:16:12 +00:00
|
|
|
os.remove(tmp_path)
|
2021-05-05 18:04:16 +00:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Fileformat component', function()
|
|
|
|
it('works with icons', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
local fmt = vim.bo.fileformat
|
|
|
|
vim.bo.fileformat = 'unix'
|
|
|
|
assert_component('fileformat', opts, '')
|
|
|
|
vim.bo.fileformat = 'dos'
|
|
|
|
assert_component('fileformat', opts, '')
|
|
|
|
vim.bo.fileformat = 'mac'
|
|
|
|
assert_component('fileformat', opts, '')
|
|
|
|
vim.bo.fileformat = fmt
|
|
|
|
end)
|
|
|
|
it('works without icons', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-05 18:04:16 +00:00
|
|
|
padding = 0,
|
2021-09-03 18:28:20 +00:00
|
|
|
icons_enabled = false,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component('fileformat', opts, vim.bo.fileformat)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
2021-05-11 12:55:18 +00:00
|
|
|
describe('Filetype component', function()
|
|
|
|
local filetype
|
|
|
|
|
|
|
|
before_each(function()
|
|
|
|
filetype = vim.bo.filetype
|
|
|
|
vim.bo.filetype = 'lua'
|
|
|
|
end)
|
|
|
|
|
|
|
|
after_each(function()
|
|
|
|
vim.bo.filetype = filetype
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('does not add icon when library unavailable', function()
|
2021-11-13 14:01:01 +00:00
|
|
|
local old_require = _G.require
|
|
|
|
function _G.require(...)
|
|
|
|
if select(1, ...) == 'nvim-web-devicons' then
|
2021-11-13 14:02:27 +00:00
|
|
|
error 'Test case not suppose to have web-dev-icon 👀'
|
2021-11-13 14:01:01 +00:00
|
|
|
end
|
|
|
|
return old_require(...)
|
|
|
|
end
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-05-11 12:55:18 +00:00
|
|
|
assert_component('filetype', opts, 'lua')
|
2021-11-13 14:01:01 +00:00
|
|
|
_G.require = old_require
|
2021-05-11 12:55:18 +00:00
|
|
|
end)
|
|
|
|
|
|
|
|
it('colors nvim-web-devicons icons', function()
|
|
|
|
package.loaded['nvim-web-devicons'] = {
|
|
|
|
get_icon = function()
|
|
|
|
return '*', 'test_highlight_group'
|
2021-09-03 18:28:20 +00:00
|
|
|
end,
|
2021-05-11 12:55:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
local hl = require 'lualine.highlight'
|
|
|
|
local utils = require 'lualine.utils.utils'
|
|
|
|
stub(hl, 'create_component_highlight_group')
|
|
|
|
stub(utils, 'extract_highlight_colors')
|
2021-09-03 18:28:20 +00:00
|
|
|
hl.create_component_highlight_group.returns 'MyCompHl'
|
|
|
|
utils.extract_highlight_colors.returns '#000'
|
2021-05-11 12:55:18 +00:00
|
|
|
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-12 09:17:51 +00:00
|
|
|
padding = 0,
|
2021-09-03 18:28:20 +00:00
|
|
|
colored = true,
|
2021-09-14 15:14:23 +00:00
|
|
|
icon_only = false,
|
2021-09-03 18:28:20 +00:00
|
|
|
}
|
2021-05-11 12:55:18 +00:00
|
|
|
assert_component('filetype', opts, '%#MyCompHl_normal#*%#lualine_c_normal# lua')
|
|
|
|
assert.stub(utils.extract_highlight_colors).was_called_with('test_highlight_group', 'fg')
|
2021-09-03 18:28:20 +00:00
|
|
|
assert.stub(hl.create_component_highlight_group).was_called_with({ fg = '#000' }, 'test_highlight_group', opts)
|
2021-05-11 12:55:18 +00:00
|
|
|
hl.create_component_highlight_group:revert()
|
|
|
|
utils.extract_highlight_colors:revert()
|
2021-05-12 09:17:51 +00:00
|
|
|
package.loaded['nvim-web-devicons'] = nil
|
|
|
|
end)
|
|
|
|
|
2021-09-03 18:28:20 +00:00
|
|
|
it("Doesn't color when colored is false", function()
|
2021-05-12 09:17:51 +00:00
|
|
|
package.loaded['nvim-web-devicons'] = {
|
|
|
|
get_icon = function()
|
|
|
|
return '*', 'test_highlight_group'
|
2021-09-03 18:28:20 +00:00
|
|
|
end,
|
2021-05-12 09:17:51 +00:00
|
|
|
}
|
|
|
|
local hl = require 'lualine.highlight'
|
|
|
|
local utils = require 'lualine.utils.utils'
|
|
|
|
stub(hl, 'create_component_highlight_group')
|
|
|
|
stub(utils, 'extract_highlight_colors')
|
2021-09-03 18:28:20 +00:00
|
|
|
hl.create_component_highlight_group.returns 'MyCompHl'
|
|
|
|
utils.extract_highlight_colors.returns '#000'
|
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-12 09:17:51 +00:00
|
|
|
padding = 0,
|
|
|
|
colored = false,
|
2021-09-03 18:28:20 +00:00
|
|
|
}
|
2021-05-12 09:17:51 +00:00
|
|
|
assert_component('filetype', opts, '* lua')
|
|
|
|
hl.create_component_highlight_group:revert()
|
|
|
|
utils.extract_highlight_colors:revert()
|
|
|
|
package.loaded['nvim-web-devicons'] = nil
|
|
|
|
end)
|
|
|
|
|
2021-09-14 15:14:23 +00:00
|
|
|
it('displays only icon when icon_only is true', function()
|
2021-05-12 09:17:51 +00:00
|
|
|
package.loaded['nvim-web-devicons'] = {
|
|
|
|
get_icon = function()
|
|
|
|
return '*', 'test_highlight_group'
|
2021-09-03 18:28:20 +00:00
|
|
|
end,
|
2021-05-12 09:17:51 +00:00
|
|
|
}
|
|
|
|
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-05-12 09:17:51 +00:00
|
|
|
padding = 0,
|
|
|
|
colored = false,
|
2021-09-14 15:14:23 +00:00
|
|
|
icon_only = true,
|
2021-09-03 18:28:20 +00:00
|
|
|
}
|
2021-05-12 09:17:51 +00:00
|
|
|
assert_component('filetype', opts, '*')
|
|
|
|
package.loaded['nvim-web-devicons'] = nil
|
2021-05-11 12:55:18 +00:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
2021-05-05 18:04:16 +00:00
|
|
|
describe('Hostname component', function()
|
|
|
|
it('works', function()
|
|
|
|
stub(vim.loop, 'os_gethostname')
|
2021-09-03 18:28:20 +00:00
|
|
|
vim.loop.os_gethostname.returns 'localhost'
|
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component('hostname', opts, 'localhost')
|
|
|
|
vim.loop.os_gethostname:revert()
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Location component', function()
|
|
|
|
it('works', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-10-22 04:19:29 +00:00
|
|
|
assert_component('location', opts, '%3l:%-2v')
|
2021-05-05 18:04:16 +00:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Progress component', function()
|
|
|
|
it('works', function()
|
2021-09-03 18:28:20 +00:00
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-10-22 04:19:29 +00:00
|
|
|
assert_component('progress', opts, '%3p%%')
|
2021-05-05 18:04:16 +00:00
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Mode component', function()
|
|
|
|
it('works', function()
|
|
|
|
stub(vim.api, 'nvim_get_mode')
|
2021-09-03 18:28:20 +00:00
|
|
|
vim.api.nvim_get_mode.returns { mode = 'n', blocking = false }
|
|
|
|
local opts = build_component_opts {
|
2021-09-14 15:14:23 +00:00
|
|
|
component_separators = { left = '', right = '' },
|
2021-09-03 18:28:20 +00:00
|
|
|
padding = 0,
|
|
|
|
}
|
2021-05-05 18:04:16 +00:00
|
|
|
assert_component('mode', opts, 'NORMAL')
|
|
|
|
vim.api.nvim_get_mode:revert()
|
|
|
|
end)
|
|
|
|
end)
|
2021-11-22 13:40:18 +00:00
|
|
|
|
|
|
|
describe('FileSize component', function()
|
|
|
|
it('works', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
}
|
|
|
|
local fname = 'test-file.txt'
|
|
|
|
local f = io.open(fname, 'w')
|
|
|
|
f:write(string.rep('........................................\n', 200))
|
|
|
|
f:close()
|
|
|
|
vim.cmd(':edit ' .. fname)
|
|
|
|
assert_component('filesize', opts, '8.0k')
|
|
|
|
vim.cmd ':bdelete!'
|
|
|
|
os.remove(fname)
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Filename component', function()
|
|
|
|
local function shorten_path(path, target)
|
|
|
|
target = target and target or 40
|
|
|
|
local sep = package.config:sub(1, 1)
|
|
|
|
local winwidth = vim.fn.winwidth(0)
|
|
|
|
local segments = select(2, string.gsub(path, sep, ''))
|
|
|
|
for _ = 0, segments do
|
|
|
|
if winwidth <= 84 or #path > winwidth - target then
|
|
|
|
path = path:gsub(string.format('([^%s])[^%s]+%%%s', sep, sep, sep), '%1' .. sep, 1)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return path
|
|
|
|
end
|
|
|
|
|
|
|
|
it('works', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
file_status = false,
|
|
|
|
path = 0,
|
|
|
|
}
|
|
|
|
vim.cmd ':e test-file.txt'
|
|
|
|
assert_component('filename', opts, 'test-file.txt')
|
|
|
|
vim.cmd ':bdelete!'
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('can show file_status', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
file_status = true,
|
|
|
|
path = 0,
|
|
|
|
}
|
|
|
|
vim.cmd ':e test-file.txt'
|
|
|
|
vim.bo.modified = false
|
|
|
|
assert_component('filename', opts, 'test-file.txt')
|
|
|
|
vim.bo.modified = true
|
|
|
|
assert_component('filename', opts, 'test-file.txt[+]')
|
|
|
|
vim.bo.modified = false
|
|
|
|
vim.bo.ro = true
|
|
|
|
assert_component('filename', opts, 'test-file.txt[-]')
|
|
|
|
vim.cmd ':bdelete!'
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('can show relative path', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
file_status = false,
|
|
|
|
path = 1,
|
|
|
|
}
|
|
|
|
vim.cmd ':e test-file.txt'
|
|
|
|
assert_component('filename', opts, shorten_path(vim.fn.expand '%:~:.'))
|
|
|
|
vim.cmd ':bdelete!'
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('can show full path', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
file_status = false,
|
|
|
|
path = 2,
|
|
|
|
}
|
|
|
|
vim.cmd ':e test-file.txt'
|
|
|
|
assert_component('filename', opts, shorten_path(vim.fn.expand '%:p'))
|
|
|
|
vim.cmd ':bdelete!'
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('vim option & variable component', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
}
|
|
|
|
|
|
|
|
local function assert_vim_var_component(name, options, result)
|
|
|
|
options[1] = name
|
|
|
|
assert_component('special.vim_var_component', options, result)
|
|
|
|
opts[1] = nil
|
|
|
|
end
|
|
|
|
it('works with variable', function()
|
|
|
|
assert_vim_var_component('g:gvar', opts, '')
|
|
|
|
vim.g.gvar = 'var1'
|
|
|
|
assert_vim_var_component('g:gvar', opts, 'var1')
|
|
|
|
vim.g.gvar = 'var2'
|
|
|
|
assert_vim_var_component('g:gvar', opts, 'var2')
|
|
|
|
vim.b.gvar = 'bvar1'
|
|
|
|
assert_vim_var_component('b:gvar', opts, 'bvar1')
|
|
|
|
vim.w.gvar = 'wvar1'
|
|
|
|
assert_vim_var_component('w:gvar', opts, 'wvar1')
|
|
|
|
end)
|
|
|
|
it('can index dictionaries', function()
|
|
|
|
vim.g.gvar = { a = { b = 'var-value' } }
|
|
|
|
assert_vim_var_component('g:gvar.a.b', opts, 'var-value')
|
|
|
|
end)
|
|
|
|
it('works with options', function()
|
|
|
|
local old_number = vim.wo.number
|
|
|
|
vim.wo.number = false
|
|
|
|
assert_vim_var_component('wo:number', opts, 'false')
|
|
|
|
vim.wo.number = old_number
|
|
|
|
local old_tw = vim.go.tw
|
|
|
|
vim.go.tw = 80
|
|
|
|
assert_vim_var_component('go:tw', opts, '80')
|
|
|
|
vim.go.tw = old_tw
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Vim option & variable component', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
}
|
|
|
|
|
|
|
|
local function assert_vim_var_component(name, options, result)
|
|
|
|
options[1] = name
|
|
|
|
assert_component('special.eval_func_component', options, result)
|
|
|
|
opts[1] = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
it('works with vim function', function()
|
|
|
|
vim.cmd [[
|
|
|
|
func! TestFunction() abort
|
|
|
|
return "TestVimFunction"
|
|
|
|
endf
|
|
|
|
]]
|
|
|
|
assert_vim_var_component('TestFunction', opts, 'TestVimFunction')
|
|
|
|
vim.cmd 'delfunction TestFunction'
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('works with lua expression', function()
|
|
|
|
_G.TestFunction = function()
|
|
|
|
return 'TestLuaFunction'
|
|
|
|
end
|
|
|
|
assert_vim_var_component('TestFunction()', opts, 'TestLuaFunction')
|
|
|
|
_G.TestFunction = nil
|
|
|
|
end)
|
|
|
|
end)
|
|
|
|
|
|
|
|
describe('Branch component', function()
|
|
|
|
local tmpdir
|
|
|
|
local file
|
|
|
|
local git = function(...)
|
|
|
|
return vim.fn.system('git -C ' .. tmpdir .. ' ' .. string.format(...))
|
|
|
|
end
|
|
|
|
local assert_comp_ins = helpers.assert_component_instence
|
|
|
|
|
|
|
|
before_each(function()
|
|
|
|
tmpdir = os.tmpname()
|
|
|
|
os.remove(tmpdir)
|
|
|
|
file = tmpdir .. '/test.txt'
|
|
|
|
vim.fn.mkdir(tmpdir, 'p')
|
|
|
|
git 'init -b test_branch'
|
|
|
|
vim.cmd [[aug lualine
|
|
|
|
au!
|
|
|
|
aug END
|
|
|
|
]]
|
|
|
|
end)
|
|
|
|
|
|
|
|
after_each(function()
|
|
|
|
os.remove(tmpdir)
|
|
|
|
end)
|
|
|
|
|
|
|
|
it('works with regular branches', function()
|
|
|
|
local opts = build_component_opts {
|
|
|
|
component_separators = { left = '', right = '' },
|
|
|
|
padding = 0,
|
|
|
|
}
|
|
|
|
local branch_comp = helpers.init_component('branch', opts)
|
|
|
|
vim.cmd('e ' .. file)
|
|
|
|
assert_comp_ins(branch_comp, ' test_branch')
|
|
|
|
git 'checkout -b test_branch2'
|
|
|
|
vim.cmd 'e k'
|
|
|
|
vim.cmd 'bd'
|
|
|
|
vim.cmd('e ' .. file)
|
|
|
|
opts.icons_enabled = false
|
|
|
|
assert_comp_ins(branch_comp, 'test_branch2')
|
|
|
|
end)
|
|
|
|
|
|
|
|
-- TODO: Figure out why this test fails in CI
|
|
|
|
-- it('works in detached head mode', function()
|
|
|
|
-- local opts = build_component_opts {
|
|
|
|
-- component_separators = { left = '', right = '' },
|
|
|
|
-- icons_enabled = false,
|
|
|
|
-- padding = 0,
|
|
|
|
-- }
|
|
|
|
-- git 'checkout -b test_branch2'
|
|
|
|
-- git 'commit --allow-empty -m "test commit1"'
|
|
|
|
-- git 'commit --allow-empty -m "test commit2"'
|
|
|
|
-- git 'commit --allow-empty -m "test commit3"'
|
|
|
|
-- git('checkout HEAD~1')
|
|
|
|
-- vim.cmd('e ' .. file)
|
|
|
|
-- local rev = git('rev-parse --short=6 HEAD'):sub(1, 6)
|
|
|
|
-- assert_component('branch', opts, rev)
|
|
|
|
-- end)
|
|
|
|
end)
|