aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/functional/helpers.lua8
-rw-r--r--test/functional/ui/decorations_spec.lua142
-rw-r--r--test/functional/ui/screen.lua4
3 files changed, 137 insertions, 17 deletions
diff --git a/test/functional/helpers.lua b/test/functional/helpers.lua
index 0bd378d832..d85a6a3cfe 100644
--- a/test/functional/helpers.lua
+++ b/test/functional/helpers.lua
@@ -751,6 +751,14 @@ module.curbufmeths = module.create_callindex(module.curbuf)
module.curwinmeths = module.create_callindex(module.curwin)
module.curtabmeths = module.create_callindex(module.curtab)
+function module.exec(code)
+ return module.meths.exec(code, false)
+end
+
+function module.exec_capture(code)
+ return module.meths.exec(code, true)
+end
+
function module.exec_lua(code, ...)
return module.meths.exec_lua(code, {...})
end
diff --git a/test/functional/ui/decorations_spec.lua b/test/functional/ui/decorations_spec.lua
index 304c5aecb1..4182090732 100644
--- a/test/functional/ui/decorations_spec.lua
+++ b/test/functional/ui/decorations_spec.lua
@@ -5,20 +5,32 @@ local clear = helpers.clear
local feed = helpers.feed
local insert = helpers.insert
local exec_lua = helpers.exec_lua
+local exec = helpers.exec
local expect_events = helpers.expect_events
+local meths = helpers.meths
-describe('decorations provider', function()
+describe('decorations providers', function()
local screen
before_each(function()
clear()
screen = Screen.new(40, 8)
screen:attach()
- screen:set_default_attr_ids({
- [1] = {bold=true, foreground=Screen.colors.Blue},
- })
+ screen:set_default_attr_ids {
+ [1] = {bold=true, foreground=Screen.colors.Blue};
+ [2] = {foreground = Screen.colors.Grey100, background = Screen.colors.Red};
+ [3] = {foreground = Screen.colors.Brown};
+ [4] = {foreground = Screen.colors.Blue1};
+ [5] = {foreground = Screen.colors.Magenta};
+ [6] = {bold = true, foreground = Screen.colors.Brown};
+ [7] = {background = Screen.colors.Gray90};
+ [8] = {bold = true, reverse = true};
+ [9] = {reverse = true};
+ [10] = {italic = true, background = Screen.colors.Magenta};
+ [11] = {foreground = Screen.colors.Red, background = tonumber('0x005028')};
+ }
end)
- local mudholland = [[
+ local mulholland = [[
// just to see if there was an accident
// on Mulholland Drive
try_start();
@@ -28,21 +40,21 @@ describe('decorations provider', function()
restore_buffer(&save_buf); ]]
local function setup_provider(code)
- exec_lua ([[
+ return exec_lua ([[
local a = vim.api
- test1 = a.nvim_create_namespace "test1"
+ _G.ns1 = a.nvim_create_namespace "ns1"
]] .. (code or [[
beamtrace = {}
- function on_do(kind, ...)
+ local function on_do(kind, ...)
table.insert(beamtrace, {kind, ...})
end
]]) .. [[
- a.nvim_set_decoration_provider(
- test1, {
+ a.nvim_set_decoration_provider(_G.ns1, {
on_start = on_do; on_buf = on_do;
on_win = on_do; on_line = on_do;
on_end = on_do;
})
+ return _G.ns1
]])
end
@@ -51,8 +63,8 @@ describe('decorations provider', function()
expect_events(expected, actual, "beam trace")
end
- it('leaves a trace', function()
- insert(mudholland)
+ it('leave a trace', function()
+ insert(mulholland)
setup_provider()
@@ -99,11 +111,12 @@ describe('decorations provider', function()
}
end)
- it('single provider', function()
- insert(mudholland)
+ it('can have single provider', function()
+ insert(mulholland)
setup_provider [[
local hl = a.nvim_get_hl_id_by_name "ErrorMsg"
- function do_it(event, ...)
+ local test_ns = a.nvim_create_namespace "mulholland"
+ function on_do(event, ...)
if event == "line" then
local win, buf, line = ...
a.nvim_buf_set_extmark(buf, test_ns, line, line,
@@ -114,5 +127,104 @@ describe('decorations provider', function()
end
end
]]
+
+ screen:expect{grid=[[
+ {2:/}/ just to see if there was an accident |
+ /{2:/} on Mulholland Drive |
+ tr{2:y}_start(); |
+ buf{2:r}ef_T save_buf; |
+ swit{2:c}h_buffer(&save_buf, buf); |
+ posp {2:=} getmark(mark, false); |
+ restor{2:e}_buffer(&save_buf);^ |
+ |
+ ]]}
+ end)
+
+ it('can predefine highlights', function()
+ screen:try_resize(40, 16)
+ insert(mulholland)
+ exec [[
+ 3
+ set ft=c
+ syntax on
+ set number cursorline
+ split
+ ]]
+ local ns1 = setup_provider()
+
+ for k,v in pairs {
+ LineNr = {italic=true, bg="Magenta"};
+ Comment = {fg="#FF0000", bg = 80*256+40};
+ CursorLine = {link="ErrorMsg"};
+ } do meths.set_hl(ns1, k, v) end
+
+ screen:expect{grid=[[
+ {3: 1 }{4:// just to see if there was an accid}|
+ {3: }{4:ent} |
+ {3: 2 }{4:// on Mulholland Drive} |
+ {6: 3 }{7:^try_start(); }|
+ {3: 4 }bufref_T save_buf; |
+ {3: 5 }switch_buffer(&save_buf, buf); |
+ {3: 6 }posp = getmark(mark, {5:false}); |
+ {8:[No Name] [+] }|
+ {3: 2 }{4:// on Mulholland Drive} |
+ {6: 3 }{7:try_start(); }|
+ {3: 4 }bufref_T save_buf; |
+ {3: 5 }switch_buffer(&save_buf, buf); |
+ {3: 6 }posp = getmark(mark, {5:false}); |
+ {3: 7 }restore_buffer(&save_buf); |
+ {9:[No Name] [+] }|
+ |
+ ]]}
+
+ meths.set_hl_ns(ns1)
+ screen:expect{grid=[[
+ {10: 1 }{11:// just to see if there was an accid}|
+ {10: }{11:ent} |
+ {10: 2 }{11:// on Mulholland Drive} |
+ {6: 3 }{2:^try_start(); }|
+ {10: 4 }bufref_T save_buf; |
+ {10: 5 }switch_buffer(&save_buf, buf); |
+ {10: 6 }posp = getmark(mark, {5:false}); |
+ {8:[No Name] [+] }|
+ {10: 2 }{11:// on Mulholland Drive} |
+ {6: 3 }{2:try_start(); }|
+ {10: 4 }bufref_T save_buf; |
+ {10: 5 }switch_buffer(&save_buf, buf); |
+ {10: 6 }posp = getmark(mark, {5:false}); |
+ {10: 7 }restore_buffer(&save_buf); |
+ {9:[No Name] [+] }|
+ |
+ ]]}
+
+ exec_lua [[
+ local a = vim.api
+ local thewin = a.nvim_get_current_win()
+ local ns2 = a.nvim_create_namespace 'ns2'
+ a.nvim_set_decoration_provider (ns2, {
+ on_win = function (_, win, buf)
+ a.nvim_set_hl_ns(win == thewin and _G.ns1 or ns2)
+ end;
+ })
+ ]]
+ screen:expect{grid=[[
+ {10: 1 }{11:// just to see if there was an accid}|
+ {10: }{11:ent} |
+ {10: 2 }{11:// on Mulholland Drive} |
+ {6: 3 }{2:^try_start(); }|
+ {10: 4 }bufref_T save_buf; |
+ {10: 5 }switch_buffer(&save_buf, buf); |
+ {10: 6 }posp = getmark(mark, {5:false}); |
+ {8:[No Name] [+] }|
+ {3: 2 }{4:// on Mulholland Drive} |
+ {6: 3 }{7:try_start(); }|
+ {3: 4 }bufref_T save_buf; |
+ {3: 5 }switch_buffer(&save_buf, buf); |
+ {3: 6 }posp = getmark(mark, {5:false}); |
+ {3: 7 }restore_buffer(&save_buf); |
+ {9:[No Name] [+] }|
+ |
+ ]]}
+
end)
end)
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index bf979e89f4..8fa9fcc42f 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -1289,7 +1289,7 @@ local function fmt_ext_state(name, state)
for k,v in pairs(state) do
str = (str.." ["..k.."] = {win = {id = "..v.win.id.."}, topline = "
..v.topline..", botline = "..v.botline..", curline = "..v.curline
- ..", curcol = "..v.curcol.."},\n")
+ ..", curcol = "..v.curcol.."};\n")
end
return str .. "}"
else
@@ -1316,7 +1316,7 @@ function Screen:print_snapshot(attrs, ignore)
dict = "{"..self:_pprint_attrs(a).."}"
end
local keyval = (type(i) == "number") and "["..tostring(i).."]" or i
- table.insert(attrstrs, " "..keyval.." = "..dict..",")
+ table.insert(attrstrs, " "..keyval.." = "..dict..";")
end
attrstr = (", attr_ids={\n"..table.concat(attrstrs, "\n").."\n}")
end