diff options
Diffstat (limited to 'test/functional/ui/syntax_conceal_spec.lua')
-rw-r--r-- | test/functional/ui/syntax_conceal_spec.lua | 742 |
1 files changed, 619 insertions, 123 deletions
diff --git a/test/functional/ui/syntax_conceal_spec.lua b/test/functional/ui/syntax_conceal_spec.lua index c2ab0711c0..d678784dc9 100644 --- a/test/functional/ui/syntax_conceal_spec.lua +++ b/test/functional/ui/syntax_conceal_spec.lua @@ -1,27 +1,33 @@ local helpers = require('test.functional.helpers')(after_each) local Screen = require('test.functional.ui.screen') -local clear, feed, execute = helpers.clear, helpers.feed, helpers.execute +local clear, feed, command = helpers.clear, helpers.feed, helpers.command local insert = helpers.insert describe('Screen', function() - local screen + local screen - before_each(function() + before_each(function() clear() screen = Screen.new(nil,10) screen:attach() - screen:set_default_attr_ignore( {{bold=true, foreground=255}} ) - screen:set_default_attr_ids( {{foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray}} ) + screen:set_default_attr_ids( { + [0] = {bold=true, foreground=Screen.colors.Blue}, + [1] = {foreground = Screen.colors.LightGrey, background = Screen.colors.DarkGray}, + [2] = {bold = true, reverse = true}, + [3] = {reverse = true}, + [4] = {bold = true}, + [5] = {background = Screen.colors.Yellow}, + } ) end) - + after_each(function() screen:detach() - end) + end) describe("match and conceal", function() before_each(function() - execute("let &conceallevel=1") + command("let &conceallevel=1") end) describe("multiple", function() @@ -34,7 +40,7 @@ describe('Screen', function() && && ]]) - execute("syn match dAmpersand '[&][&]' conceal cchar=∧") + command("syn match dAmpersand '[&][&]' conceal cchar=∧") end) it("double characters.", function() @@ -46,13 +52,13 @@ describe('Screen', function() {1:∧} | {1:∧} | ^ | - ~ | - ~ | - :syn match dAmpersand '[&][&]' conceal cchar=∧ | + {0:~ }| + {0:~ }| + | ]]) end) - it('double characters and move the cursor one line up.', function() + it('double characters and move the cursor one line up.', function() feed("k") screen:expect([[ {1:∧} | @@ -62,9 +68,9 @@ describe('Screen', function() {1:∧} | ^&& | | - ~ | - ~ | - :syn match dAmpersand '[&][&]' conceal cchar=∧ | + {0:~ }| + {0:~ }| + | ]]) end) @@ -78,13 +84,13 @@ describe('Screen', function() {1:∧} | {1:∧} | | - ~ | - ~ | - :syn match dAmpersand '[&][&]' conceal cchar=∧ | + {0:~ }| + {0:~ }| + | ]]) end) - it('double characters and move the cursor to the second line in the file.', function() + it('double characters and move the cursor to the second line in the file.', function() feed("ggj") screen:expect([[ {1:∧} | @@ -94,13 +100,13 @@ describe('Screen', function() {1:∧} | {1:∧} | | - ~ | - ~ | - :syn match dAmpersand '[&][&]' conceal cchar=∧ | + {0:~ }| + {0:~ }| + | ]]) end) - it('double characters and then move the cursor to the beginning of the file and back to the end of the file.', function() + it('double characters and then move the cursor to the beginning of the file and back to the end of the file.', function() feed("ggG") screen:expect([[ {1:∧} | @@ -110,51 +116,51 @@ describe('Screen', function() {1:∧} | {1:∧} | ^ | - ~ | - ~ | - :syn match dAmpersand '[&][&]' conceal cchar=∧ | + {0:~ }| + {0:~ }| + | ]]) end) - end) -- multiple - + end) -- multiple + it("keyword instances in initially in the document.", function() feed("2ilambda<cr><ESC>") - execute("let &conceallevel=1") - execute("syn keyword kLambda lambda conceal cchar=λ") + command("let &conceallevel=1") + command("syn keyword kLambda lambda conceal cchar=λ") screen:expect([[ {1:λ} | {1:λ} | ^ | - ~ | - ~ | - ~ | - ~ | - ~ | - ~ | - :syn keyword kLambda lambda conceal cchar=λ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) -- Keyword describe("regions in the document", function() - before_each(function() + before_each(function() feed("2") insert("<r> a region of text </r>\n") - execute("let &conceallevel=1") + command("let &conceallevel=1") end) - - it('initially and conceal it.', function() - execute("syn region rText start='<r>' end='</r>' conceal cchar=R") + + it('initially and conceal it.', function() + command("syn region rText start='<r>' end='</r>' conceal cchar=R") screen:expect([[ {1:R} | {1:R} | ^ | - ~ | - ~ | - ~ | - ~ | - ~ | - ~ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| | ]]) end) @@ -162,23 +168,23 @@ describe('Screen', function() it('initially and conceal its start tag and end tag.', function() -- concealends has a known bug (todo.txt) where the first match won't -- be replaced with cchar. - execute("syn region rText matchgroup=rMatch start='<r>' end='</r>' concealends cchar=-") + command("syn region rText matchgroup=rMatch start='<r>' end='</r>' concealends cchar=-") screen:expect([[ {1: } a region of text {1:-} | {1: } a region of text {1:-} | ^ | - ~ | - ~ | - ~ | - ~ | - ~ | - ~ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| | ]]) end) - + it('that are nested and conceal the nested region\'s start and end tags.', function() - execute("syn region rText contains=rText matchgroup=rMatch start='<r>' end='</r>' concealends cchar=-") + command("syn region rText contains=rText matchgroup=rMatch start='<r>' end='</r>' concealends cchar=-") insert("<r> A region with <r> a nested <r> nested region.</r> </r> </r>\n") screen:expect([[ {1: } a region of text {1:-} | @@ -186,21 +192,21 @@ describe('Screen', function() {1: } A region with {1: } a nested {1: } nested region.{1:-} | {1:-} {1:-} | ^ | - ~ | - ~ | - ~ | - ~ | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| | ]]) end) end) -- regions in the document describe("a region of text", function() - before_each(function() - execute("syntax conceal on") + before_each(function() + command("syntax conceal on") feed("2") insert("<r> a region of text </r>\n") - execute("syn region rText start='<r>' end='</r>' cchar=-") + command("syn region rText start='<r>' end='</r>' cchar=-") end) it("and turn on implicit concealing", function() @@ -208,123 +214,613 @@ describe('Screen', function() {1:-} | {1:-} | ^ | - ~ | - ~ | - ~ | - ~ | - ~ | - ~ | - :syn region rText start='<r>' end='</r>' cchar=- | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) it("and then turn on, then off, and then back on implicit concealing.", function() - execute("syntax conceal off") + command("syntax conceal off") feed("2") insert("<i> italian text </i>\n") - execute("syn region iText start='<i>' end='</i>' cchar=*") + command("syn region iText start='<i>' end='</i>' cchar=*") screen:expect([[ {1:-} | {1:-} | <i> italian text </i> | <i> italian text </i> | ^ | - ~ | - ~ | - ~ | - ~ | - :syn region iText start='<i>' end='</i>' cchar=* | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) - execute("syntax conceal on") - execute("syn region iText start='<i>' end='</i>' cchar=*") + command("syntax conceal on") + command("syn region iText start='<i>' end='</i>' cchar=*") screen:expect([[ {1:-} | {1:-} | {1:*} | {1:*} | ^ | - ~ | - ~ | - ~ | - ~ | - :syn region iText start='<i>' end='</i>' cchar=* | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) end) -- a region of text (implicit concealing) end) -- match and conceal - describe("let the conceal level be", function() + describe("let the conceal level be", function() before_each(function() - insert("// No Conceal\n") - insert('"Conceal without a cchar"\n') - insert("+ With cchar\n\n") - execute("syn match noConceal '^//.*$'") - execute("syn match concealNoCchar '\".\\{-}\"$' conceal") - execute("syn match concealWCchar '^+.\\{-}$' conceal cchar=C") + insert("// No Conceal\n") + insert('"Conceal without a cchar"\n') + insert("+ With cchar\n\n") + command("syn match noConceal '^//.*$'") + command("syn match concealNoCchar '\".\\{-}\"$' conceal") + command("syn match concealWCchar '^+.\\{-}$' conceal cchar=C") end) - - it("0. No concealing.", function() - execute("let &conceallevel=0") + + it("0. No concealing.", function() + command("let &conceallevel=0") screen:expect([[ // No Conceal | "Conceal without a cchar" | + With cchar | | ^ | - ~ | - ~ | - ~ | - ~ | - :let &conceallevel=0 | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) - + it("1. Conceal using cchar or reference listchars.", function() - execute("let &conceallevel=1") + command("let &conceallevel=1") screen:expect([[ // No Conceal | {1: } | {1:C} | | ^ | - ~ | - ~ | - ~ | - ~ | - :let &conceallevel=1 | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) - + it("2. Hidden unless cchar is set.", function() - execute("let &conceallevel=2") + command("let &conceallevel=2") screen:expect([[ // No Conceal | | {1:C} | | ^ | - ~ | - ~ | - ~ | - ~ | - :let &conceallevel=2 | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) - - it("3. Hide all concealed text.", function() - execute("let &conceallevel=3") + + it("3. Hide all concealed text.", function() + command("let &conceallevel=3") screen:expect([[ // No Conceal | | | | ^ | - ~ | - ~ | - ~ | - ~ | - :let &conceallevel=3 | + {0:~ }| + {0:~ }| + {0:~ }| + {0:~ }| + | ]]) end) end) -- conceallevel + + + describe("cursor movement", function() + before_each(function() + command("syn keyword concealy barf conceal cchar=b") + command("set cole=2") + feed('5Ofoo barf bar barf eggs<esc>') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo barf bar barf egg^s | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + end) + + it('between windows', function() + command("split") + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo barf bar barf egg^s | + | + {2:[No Name] [+] }| + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {3:[No Name] [+] }| + | + ]]) + feed('<c-w>w') + + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {3:[No Name] [+] }| + foo {1:b} bar {1:b} eggs | + foo barf bar barf egg^s | + | + {2:[No Name] [+] }| + | + ]]) + end) + + it('in insert mode', function() + feed('i') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo barf bar barf egg^s | + | + {0:~ }| + {0:~ }| + {0:~ }| + {4:-- INSERT --} | + ]]) + + feed('<up>') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo barf bar barf egg^s | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + {4:-- INSERT --} | + ]]) + end) + + it('between modes cocu=iv', function() + command('set cocu=iv') + feed('gg') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + feed('i') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + {4:-- INSERT --} | + ]]) + + feed('<esc>') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + feed('v') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + {4:-- VISUAL --} | + ]]) + + feed('<esc>') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + end) + + it('between modes cocu=n', function() + command('set cocu=n') + feed('gg') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + feed('i') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + {4:-- INSERT --} | + ]]) + + feed('<esc>') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + + feed('v') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + {4:-- VISUAL --} | + ]]) + + feed('<esc>') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + end) + + it('and open line', function() + feed('o') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + ^ | + | + {0:~ }| + {0:~ }| + {4:-- INSERT --} | + ]]) + end) + + it('and open line cocu=i', function() + command('set cocu=i') + feed('o') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + ^ | + | + {0:~ }| + {0:~ }| + {4:-- INSERT --} | + ]]) + end) + + describe('with incsearch', function() + before_each(function() + command('set incsearch hlsearch') + feed('2GA x<esc>3GA xy<esc>gg') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + end) + + it('cocu=', function() + feed('/') + screen:expect([[ + foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /^ | + ]]) + + feed('x') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo barf bar barf eggs {3:x} | + foo {1:b} bar {1:b} eggs {5:x}y | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /x^ | + ]]) + + feed('y') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs x | + foo barf bar barf eggs {3:xy} | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /xy^ | + ]]) + + feed('<c-w>') + screen:expect([[ + foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /^ | + ]]) + end) + + it('cocu=c', function() + command('set cocu=c') + + feed('/') + -- NB: we don't do this redraw. Probably best to still skip it, + -- to avoid annoying distraction from the cmdline + screen:expect([[ + foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /^ | + ]]) + + feed('x') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs {3:x} | + foo {1:b} bar {1:b} eggs {5:x}y | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /x^ | + ]]) + + feed('y') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs {3:xy} | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /xy^ | + ]]) + + feed('<c-w>') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /^ | + ]]) + + feed('<esc>') + screen:expect([[ + ^foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + end) + + it('cocu=n', function() + command('set cocu=n') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + + feed('/') + -- NB: we don't do this redraw. Probably best to still skip it, + -- to avoid annoying distraction from the cmdline + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /^ | + ]]) + + feed('x') + screen:expect([[ + foo {1:b} bar {1:b} eggs | + foo barf bar barf eggs {3:x} | + foo {1:b} bar {1:b} eggs {5:x}y | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /x^ | + ]]) + + feed('<c-w>') + screen:expect([[ + foo barf bar barf eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + /^ | + ]]) + + feed('<esc>') + screen:expect([[ + ^foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs x | + foo {1:b} bar {1:b} eggs xy | + foo {1:b} bar {1:b} eggs | + foo {1:b} bar {1:b} eggs | + | + {0:~ }| + {0:~ }| + {0:~ }| + | + ]]) + end) + end) + end) end) |