aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-02-18 09:27:10 +0800
committerzeertzjq <zeertzjq@outlook.com>2023-02-18 10:44:35 +0800
commit9b9f8dfcc41ceb80d3970eb58af8ee350b57dc7f (patch)
treec0347335374e363432711ad9f0ba02badefb300b
parentbb369a14f3e948c8efa3709d95e4dc2098b2de6a (diff)
downloadrneovim-9b9f8dfcc41ceb80d3970eb58af8ee350b57dc7f.tar.gz
rneovim-9b9f8dfcc41ceb80d3970eb58af8ee350b57dc7f.tar.bz2
rneovim-9b9f8dfcc41ceb80d3970eb58af8ee350b57dc7f.zip
test: make {MATCH:} behave less unexpectedly in screen:expect()
Include the rest of the line and allow multiple {MATCH:} patterns.
-rw-r--r--test/functional/editor/mark_spec.lua2
-rw-r--r--test/functional/ex_cmds/trust_spec.lua117
-rw-r--r--test/functional/lua/secure_spec.lua11
-rw-r--r--test/functional/terminal/tui_spec.lua2
-rw-r--r--test/functional/ui/bufhl_spec.lua2
-rw-r--r--test/functional/ui/messages_spec.lua4
-rw-r--r--test/functional/ui/screen.lua19
7 files changed, 37 insertions, 120 deletions
diff --git a/test/functional/editor/mark_spec.lua b/test/functional/editor/mark_spec.lua
index b3b190ef79..0670176719 100644
--- a/test/functional/editor/mark_spec.lua
+++ b/test/functional/editor/mark_spec.lua
@@ -413,7 +413,7 @@ describe('named marks view', function()
6 line |
^7 line |
8 line |
- {MATCH:.*} |
+ {MATCH:.*marks} |
|
]])
end)
diff --git a/test/functional/ex_cmds/trust_spec.lua b/test/functional/ex_cmds/trust_spec.lua
index 10ee02a790..fe13bd7cd2 100644
--- a/test/functional/ex_cmds/trust_spec.lua
+++ b/test/functional/ex_cmds/trust_spec.lua
@@ -1,9 +1,10 @@
local helpers = require('test.functional.helpers')(after_each)
-local Screen = require('test.functional.ui.screen')
local eq = helpers.eq
local clear = helpers.clear
local command = helpers.command
+local exec_capture = helpers.exec_capture
+local matches = helpers.matches
local pathsep = helpers.get_pathsep()
local is_os = helpers.is_os
local funcs = helpers.funcs
@@ -29,147 +30,49 @@ describe(':trust', function()
end)
it('trust then deny then remove a file using current buffer', function()
- local screen = Screen.new(80, 8)
- screen:attach()
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- })
-
local cwd = funcs.getcwd()
local hash = funcs.sha256(helpers.read_file('test_file'))
command('edit test_file')
- command('trust')
- screen:expect([[
- ^test |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" trusted.{MATCH:%s+}|
- ]])
+ matches('^Allowed ".*test_file" in trust database%.$', exec_capture('trust'))
local trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format('%s %s', hash, cwd .. pathsep .. 'test_file'), vim.trim(trust))
- command('trust ++deny')
- screen:expect([[
- ^test |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" denied.{MATCH:%s+}|
- ]])
+ matches('^Denied ".*test_file" in trust database%.$', exec_capture('trust ++deny'))
trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format('! %s', cwd .. pathsep .. 'test_file'), vim.trim(trust))
- command('trust ++remove')
- screen:expect([[
- ^test |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" removed.{MATCH:%s+}|
- ]])
+ matches('^Removed ".*test_file" from trust database%.$', exec_capture('trust ++remove'))
trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format(''), vim.trim(trust))
end)
it('deny then trust then remove a file using current buffer', function()
- local screen = Screen.new(80, 8)
- screen:attach()
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- })
-
local cwd = funcs.getcwd()
local hash = funcs.sha256(helpers.read_file('test_file'))
command('edit test_file')
- command('trust ++deny')
- screen:expect([[
- ^test |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" denied.{MATCH:%s+}|
- ]])
+ matches('^Denied ".*test_file" in trust database%.$', exec_capture('trust ++deny'))
local trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format('! %s', cwd .. pathsep .. 'test_file'), vim.trim(trust))
- command('trust')
- screen:expect([[
- ^test |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" trusted.{MATCH:%s+}|
- ]])
+ matches('^Allowed ".*test_file" in trust database%.$', exec_capture('trust'))
trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format('%s %s', hash, cwd .. pathsep .. 'test_file'), vim.trim(trust))
- command('trust ++remove')
- screen:expect([[
- ^test |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" removed.{MATCH:%s+}|
- ]])
+ matches('^Removed ".*test_file" from trust database%.$', exec_capture('trust ++remove'))
trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format(''), vim.trim(trust))
end)
it('deny then remove a file using file path', function()
- local screen = Screen.new(80, 8)
- screen:attach()
- screen:set_default_attr_ids({
- [1] = {bold = true, foreground = Screen.colors.Blue1},
- })
-
local cwd = funcs.getcwd()
- command('trust ++deny test_file')
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" denied.{MATCH:%s+}|
- ]])
+ matches('^Denied ".*test_file" in trust database%.$', exec_capture('trust ++deny test_file'))
local trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format('! %s', cwd .. pathsep .. 'test_file'), vim.trim(trust))
- command('trust ++remove test_file')
- screen:expect([[
- ^ |
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- {1:~ }|
- "]] .. cwd .. pathsep .. [[test_file" removed.{MATCH:%s+}|
- ]])
+ matches('^Removed ".*test_file" from trust database%.$', exec_capture('trust ++remove test_file'))
trust = helpers.read_file(funcs.stdpath('state') .. pathsep .. 'trust')
eq(string.format(''), vim.trim(trust))
end)
diff --git a/test/functional/lua/secure_spec.lua b/test/functional/lua/secure_spec.lua
index 2647b2be46..c4abf70f64 100644
--- a/test/functional/lua/secure_spec.lua
+++ b/test/functional/lua/secure_spec.lua
@@ -48,6 +48,7 @@ describe('vim.secure', function()
[4] = {reverse = true},
})
+ --- XXX: screen:expect() may fail if this path is too long.
local cwd = funcs.getcwd()
-- Need to use feed_command instead of exec_lua because of the confirmation prompt
@@ -59,7 +60,7 @@ describe('vim.secure', function()
{1:~ }|
{2: }|
:lua vim.secure.read('Xfile') |
- {3:]] .. cwd .. pathsep .. [[Xfile is untrusted}{MATCH:%s+}|
+ {3:]] .. cwd .. pathsep .. [[Xfile is not trusted.}{MATCH:%s+}|
{3:[i]gnore, (v)iew, (d)eny, (a)llow: }^ |
]]}
feed('d')
@@ -88,7 +89,7 @@ describe('vim.secure', function()
{1:~ }|
{2: }|
:lua vim.secure.read('Xfile') |
- {3:]] .. cwd .. pathsep .. [[Xfile is untrusted}{MATCH:%s+}|
+ {3:]] .. cwd .. pathsep .. [[Xfile is not trusted.}{MATCH:%s+}|
{3:[i]gnore, (v)iew, (d)eny, (a)llow: }^ |
]]}
feed('a')
@@ -118,7 +119,7 @@ describe('vim.secure', function()
{1:~ }|
{2: }|
:lua vim.secure.read('Xfile') |
- {3:]] .. cwd .. pathsep .. [[Xfile is untrusted}{MATCH:%s+}|
+ {3:]] .. cwd .. pathsep .. [[Xfile is not trusted.}{MATCH:%s+}|
{3:[i]gnore, (v)iew, (d)eny, (a)llow: }^ |
]]}
feed('i')
@@ -145,7 +146,7 @@ describe('vim.secure', function()
{1:~ }|
{2: }|
:lua vim.secure.read('Xfile') |
- {3:]] .. cwd .. pathsep .. [[Xfile is untrusted}{MATCH:%s+}|
+ {3:]] .. cwd .. pathsep .. [[Xfile is not trusted.}{MATCH:%s+}|
{3:[i]gnore, (v)iew, (d)eny, (a)llow: }^ |
]]}
feed('v')
@@ -153,7 +154,7 @@ describe('vim.secure', function()
^let g:foobar = 42 |
{1:~ }|
{1:~ }|
- {2:]] .. funcs.fnamemodify(cwd, ':~') .. pathsep .. [[Xfile [RO]{MATCH:%s+}|
+ {2:]] .. funcs.fnamemodify(cwd, ':~') .. pathsep .. [[Xfile [RO]{MATCH:%s+}}|
|
{1:~ }|
{4:[No Name] }|
diff --git a/test/functional/terminal/tui_spec.lua b/test/functional/terminal/tui_spec.lua
index 4e62354ed8..4a0c482004 100644
--- a/test/functional/terminal/tui_spec.lua
+++ b/test/functional/terminal/tui_spec.lua
@@ -1544,7 +1544,7 @@ describe('TUI', function()
{2:~ }│{4:~ }|
{2:~ }│{5:[No Name] 0,0-1 All}|
{2:~ }│ |
- {5:new }{MATCH:<.*[/\]nvim }|
+ {5:new }{1:{MATCH:<.*[/\]nvim }}|
|
]])
end)
diff --git a/test/functional/ui/bufhl_spec.lua b/test/functional/ui/bufhl_spec.lua
index 418294ac07..adec0770de 100644
--- a/test/functional/ui/bufhl_spec.lua
+++ b/test/functional/ui/bufhl_spec.lua
@@ -303,7 +303,7 @@ describe('Buffer highlighting', function()
{1:~ }|
{1:~ }|
{1:~ }|
- 2 change3; before #3 {MATCH:.*}|
+ 2 changes; before #3 {MATCH:.*}|
]]}
command('undo')
diff --git a/test/functional/ui/messages_spec.lua b/test/functional/ui/messages_spec.lua
index 3052a74f38..212d3aee7d 100644
--- a/test/functional/ui/messages_spec.lua
+++ b/test/functional/ui/messages_spec.lua
@@ -1322,7 +1322,7 @@ describe('ui/ext_messages', function()
{1:~ }type :q{5:<Enter>} to exit {1: }|
{1:~ }type :help{5:<Enter>} for help {1: }|
{1:~ }|
- {1:~ }type :help news{5:<Enter>} to see changes in v{MATCH:%d+%.%d+}|
+ {1:~{MATCH: +}}type :help news{5:<Enter>} to see changes in v{MATCH:%d+%.%d+}{1:{MATCH: +}}|
{1:~ }|
{MATCH:.*}|
{MATCH:.*}|
@@ -1378,7 +1378,7 @@ describe('ui/ext_messages', function()
type :q{5:<Enter>} to exit |
type :help{5:<Enter>} for help |
|
- type :help news{5:<Enter>} to see changes in v{MATCH:%d+%.%d+}|
+ {MATCH: +}type :help news{5:<Enter>} to see changes in v{MATCH:%d+%.%d+ +}|
|
{MATCH:.*}|
{MATCH:.*}|
diff --git a/test/functional/ui/screen.lua b/test/functional/ui/screen.lua
index 7760f26fca..14ce050578 100644
--- a/test/functional/ui/screen.lua
+++ b/test/functional/ui/screen.lua
@@ -75,6 +75,7 @@ local busted = require('busted')
local deepcopy = helpers.deepcopy
local shallowcopy = helpers.shallowcopy
local concat_tables = helpers.concat_tables
+local pesc = helpers.pesc
local run_session = helpers.run_session
local eq = helpers.eq
local dedent = helpers.dedent
@@ -257,7 +258,7 @@ local ext_keys = {
-- grid: Expected screen state (string). Each line represents a screen
-- row. Last character of each row (typically "|") is stripped.
-- Common indentation is stripped.
--- "{MATCH:x}|" lines are matched against Lua pattern `x`.
+-- "{MATCH:x}" in a line is matched against Lua pattern `x`.
-- attr_ids: Expected text attributes. Screen rows are transformed according
-- to this table, as follows: each substring S composed of
-- characters having the same attributes will be substituted by
@@ -382,8 +383,20 @@ function Screen:expect(expected, attr_ids, ...)
end
for i, row in ipairs(expected_rows) do
msg_expected_rows[i] = row
- local m = (row ~= actual_rows[i] and row:match('{MATCH:(.*)}') or nil)
- if row ~= actual_rows[i] and (not m or not (actual_rows[i] and actual_rows[i]:match(m))) then
+ local pat = nil
+ if actual_rows[i] and row ~= actual_rows[i] then
+ local after = row
+ while true do
+ local s, e, m = after:find('{MATCH:(.-)}')
+ if not s then
+ pat = pat and (pat .. pesc(after))
+ break
+ end
+ pat = (pat or '') .. pesc(after:sub(1, s - 1)) .. m
+ after = after:sub(e + 1)
+ end
+ end
+ if row ~= actual_rows[i] and (not pat or not actual_rows[i]:match(pat)) then
msg_expected_rows[i] = '*' .. msg_expected_rows[i]
if i <= #actual_rows then
actual_rows[i] = '*' .. actual_rows[i]