diff options
author | zeertzjq <zeertzjq@outlook.com> | 2023-02-18 09:27:10 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2023-02-18 10:44:35 +0800 |
commit | 9b9f8dfcc41ceb80d3970eb58af8ee350b57dc7f (patch) | |
tree | c0347335374e363432711ad9f0ba02badefb300b | |
parent | bb369a14f3e948c8efa3709d95e4dc2098b2de6a (diff) | |
download | rneovim-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.lua | 2 | ||||
-rw-r--r-- | test/functional/ex_cmds/trust_spec.lua | 117 | ||||
-rw-r--r-- | test/functional/lua/secure_spec.lua | 11 | ||||
-rw-r--r-- | test/functional/terminal/tui_spec.lua | 2 | ||||
-rw-r--r-- | test/functional/ui/bufhl_spec.lua | 2 | ||||
-rw-r--r-- | test/functional/ui/messages_spec.lua | 4 | ||||
-rw-r--r-- | test/functional/ui/screen.lua | 19 |
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] |