mirror of
https://github.com/neovim/neovim.git
synced 2025-12-16 03:15:39 +00:00
test: make {MATCH:} behave less unexpectedly in screen:expect()
Include the rest of the line and allow multiple {MATCH:} patterns.
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user