X-Git-Url: https://git.madduck.net/etc/vim.git/blobdiff_plain/2ed0c9ad702531be15d197d6e296e2739c66e575..bd8236d1651267d2b4b805a1e87afd66f53a2bdb:/test/syntax.vader diff --git a/test/syntax.vader b/test/syntax.vader index d2dbb13..3baa41f 100644 --- a/test/syntax.vader +++ b/test/syntax.vader @@ -1,3 +1,8 @@ +Before: + unlet! b:mkd_known_filetypes + unlet! b:mkd_included_filetypes + unlet! g:vim_markdown_math + Given markdown; a **b** c @@ -148,6 +153,248 @@ Execute (bold italic with asterisks in multiple lines): AssertEqual SyntaxOf('c'), 'htmlBoldItalic' AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic' +Given markdown; +*a + +Execute (not italic with an asterisk): + AssertNotEqual SyntaxOf('a'), 'htmlItalic' + +Given markdown; +[__](a) b + +Execute (not bold with double underscores): + AssertNotEqual SyntaxOf('_'), 'htmlBold' + AssertNotEqual SyntaxOf('a'), 'htmlBold' + AssertNotEqual SyntaxOf('b'), 'htmlBold' + +Given markdown; +_a_ + +Execute (conceal italic): + if has('conceal') + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 1 + setlocal conceallevel=0 + endif + +Execute (disable conceal): + if has('conceal') + let g:vim_markdown_conceal=0 + syn off | syn on + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 0 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + + let g:vim_markdown_conceal=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 1 + + setlocal conceallevel=0 + unlet g:vim_markdown_conceal + syn off | syn on + endif + +Given markdown; +*a* + +Execute (conceal italic): + if has('conceal') + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 1 + setlocal conceallevel=0 + endif + +Execute (disable conceal): + if has('conceal') + let g:vim_markdown_conceal=0 + syn off | syn on + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 0 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + + let g:vim_markdown_conceal=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 1 + + setlocal conceallevel=0 + unlet g:vim_markdown_conceal + syn off | syn on + endif + +Given markdown; +__a__ + +Execute (conceal bold): + if has('conceal') + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 1 + AssertEqual synconcealed(1, 5)[0], 1 + setlocal conceallevel=0 + endif + +Execute (disable conceal): + if has('conceal') + let g:vim_markdown_conceal=0 + syn off | syn on + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 0 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 0 + + let g:vim_markdown_conceal=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 1 + AssertEqual synconcealed(1, 5)[0], 1 + + setlocal conceallevel=0 + unlet g:vim_markdown_conceal + syn off | syn on + endif + +Given markdown; +**a** + +Execute (conceal bold): + if has('conceal') + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 1 + AssertEqual synconcealed(1, 5)[0], 1 + setlocal conceallevel=0 + endif + +Execute (disable conceal): + if has('conceal') + let g:vim_markdown_conceal=0 + syn off | syn on + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 0 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 0 + + let g:vim_markdown_conceal=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 1 + AssertEqual synconcealed(1, 5)[0], 1 + + setlocal conceallevel=0 + unlet g:vim_markdown_conceal + syn off | syn on + endif + +Given markdown; +___a___ + +Execute (conceal italic bold): + if has('conceal') + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 1 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 1 + AssertEqual synconcealed(1, 6)[0], 1 + AssertEqual synconcealed(1, 7)[0], 1 + setlocal conceallevel=0 + endif + +Execute (disable conceal): + if has('conceal') + let g:vim_markdown_conceal=0 + syn off | syn on + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 0 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 0 + AssertEqual synconcealed(1, 6)[0], 0 + AssertEqual synconcealed(1, 7)[0], 0 + + let g:vim_markdown_conceal=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 1 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 1 + AssertEqual synconcealed(1, 6)[0], 1 + AssertEqual synconcealed(1, 7)[0], 1 + + setlocal conceallevel=0 + unlet g:vim_markdown_conceal + syn off | syn on + endif + +Given markdown; +***a*** + +Execute (conceal italic bold): + if has('conceal') + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 1 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 1 + AssertEqual synconcealed(1, 6)[0], 1 + AssertEqual synconcealed(1, 7)[0], 1 + setlocal conceallevel=0 + endif + +Execute (disable conceal): + if has('conceal') + let g:vim_markdown_conceal=0 + syn off | syn on + setlocal conceallevel=2 + AssertEqual synconcealed(1, 1)[0], 0 + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 0 + AssertEqual synconcealed(1, 6)[0], 0 + AssertEqual synconcealed(1, 7)[0], 0 + + let g:vim_markdown_conceal=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1 + AssertEqual synconcealed(1, 2)[0], 1 + AssertEqual synconcealed(1, 3)[0], 1 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 1 + AssertEqual synconcealed(1, 6)[0], 1 + AssertEqual synconcealed(1, 7)[0], 1 + + setlocal conceallevel=0 + unlet g:vim_markdown_conceal + syn off | syn on + endif + # Links Given markdown; @@ -166,6 +413,21 @@ Execute (link text with newline): AssertEqual SyntaxOf('b'), 'mkdLink' AssertEqual SyntaxOf('c'), 'mkdURL' +Given markdown; +[a] b [c](d) + +Execute (link text with bracket sections): + AssertNotEqual SyntaxOf('a'), 'mkdLink' + AssertNotEqual SyntaxOf('b'), 'mkdLink' + AssertEqual SyntaxOf('c'), 'mkdLink' + AssertEqual SyntaxOf('d'), 'mkdURL' + +Given markdown; +[^a]: b + +Execute (footnote is not link): + AssertNotEqual SyntaxOf('a'), 'mkdLinkDef' + Given markdown; (a) @@ -301,6 +563,80 @@ Execute (autolink in link text): AssertEqual SyntaxOf('b'), 'mkdURL' AssertEqual SyntaxOf('c'), 'mkdURL' +Given markdown; +# [h1link](url) + +## [h2link](url) + +### [h3link](url) + +#### [h4link](url) + +##### [h5link](url) + +###### [h6link](url) + +[h1link_b](url) +=============== + +[h2link_b](url) +--------------- + +Execute (link in headers): + AssertEqual SyntaxOf('h1link'), 'mkdLink' + AssertEqual SyntaxOf('h2link'), 'mkdLink' + AssertEqual SyntaxOf('h3link'), 'mkdLink' + AssertEqual SyntaxOf('h4link'), 'mkdLink' + AssertEqual SyntaxOf('h5link'), 'mkdLink' + AssertEqual SyntaxOf('h6link'), 'mkdLink' + AssertEqual SyntaxOf('h1link_b'), 'mkdLink' + AssertEqual SyntaxOf('h2link_b'), 'mkdLink' + +Given markdown; +# http://h1link.foo + +## http://h2link.foo + +### http://h3link.foo + +#### http://h4link.foo + +##### http://h5link.foo + +###### http://h6link.foo + +http://h1link_b.foo +=================== + +http://h2link_b.foo +------------------- + +Execute (inline url in headers): + AssertEqual SyntaxOf('h1link'), 'mkdInlineURL' + AssertEqual SyntaxOf('h2link'), 'mkdInlineURL' + AssertEqual SyntaxOf('h3link'), 'mkdInlineURL' + AssertEqual SyntaxOf('h4link'), 'mkdInlineURL' + AssertEqual SyntaxOf('h5link'), 'mkdInlineURL' + AssertEqual SyntaxOf('h6link'), 'mkdInlineURL' + AssertEqual SyntaxOf('h1link_b'), 'mkdInlineURL' + AssertEqual SyntaxOf('h2link_b'), 'mkdInlineURL' + +Given markdown; +> [a](b) +> http://foo.bar + +Execute (link in blockquote): + AssertEqual SyntaxOf('a'), 'mkdLink' + AssertEqual SyntaxOf('foo'), 'mkdInlineURL' + +Given markdown; +[https://domain.tld](https://domain.com) not_a_link + +Execute (link with url title): + AssertEqual SyntaxOf('https://domain.tld'), 'mkdInlineURL' + AssertEqual SyntaxOf('https://domain.com'), 'mkdInlineURL' + AssertNotEqual SyntaxOf('not_a_link'), 'mkdInlineURL' + # Code Blocks Given markdown; @@ -409,6 +745,36 @@ Execute (fenced code block syntax with a language specifier): AssertEqual SyntaxOf('code'), 'mkdSnippetCPP' AssertEqual SyntaxOf('def'), 'rubyDefine' +Given markdown; +``` c++ +#include +code +``` + +``` vim +let g:a = 1 +``` + +``` ruby +def a +end +``` + +``` +ruby +class B +end +``` + +Execute (fenced code block syntax with a language specifier after whitespace): + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') + call b:func(0) + AssertEqual SyntaxOf('include'), 'cInclude' + AssertEqual SyntaxOf('code'), 'mkdSnippetCPP' + AssertEqual SyntaxOf('g:a'), 'vimVar' + AssertEqual SyntaxOf('def'), 'rubyDefine' + AssertNotEqual SyntaxOf('class'), 'rubyClass' + Given markdown; ```vim let g:a = 1 @@ -424,6 +790,35 @@ Execute (fenced code block syntax with alias language specifier): AssertEqual SyntaxOf('g:a'), 'vimVar' AssertEqual SyntaxOf('g:b'), 'vimVar' +Given markdown; +```csharp +var s = "foo"; +``` + +Execute (fenced code block languages setting): + let g:vim_markdown_fenced_languages = ['csharp=cs'] + source ../ftplugin/markdown.vim + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') + call b:func(0) + AssertEqual SyntaxOf('foo'), 'csString' + unlet g:vim_markdown_fenced_languages + +Given markdown; +```vim +let g:a = 1 +``` + +Execute (fenced code block includes language syntax with reopening same buffer): + let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax') + call b:func(0) + split + quit + edit + set filetype=markdown + execute "normal! i```vim\let g:a = 1\```" + call b:func(1) + AssertEqual SyntaxOf('g:a'), 'vimVar' + Given markdown; ```a+b- code @@ -487,6 +882,23 @@ a Execute (not code block in escaped code tag): AssertNotEqual SyntaxOf('a'), 'mkdCode' +# Code quotes + +Given markdown; +`a` + +Execute (code in code quotes): + AssertEqual SyntaxOf('a'), 'mkdCode' + +Given markdown; +`a\` b `c\` d + +Execute (code quotes not escaped ending with backslash): + AssertEqual SyntaxOf('a\'), 'mkdCode' + AssertNotEqual SyntaxOf('b'), 'mkdCode' + AssertEqual SyntaxOf('c\'), 'mkdCode' + AssertNotEqual SyntaxOf('d'), 'mkdCode' + # Math Given markdown; @@ -496,22 +908,22 @@ c $$y$$ d \$\$f\$\$ Execute (math): - AssertNotEqual SyntaxOf('x'), 'mkdMath' - AssertNotEqual SyntaxOf('y'), 'mkdMath' + AssertNotEqual SyntaxOf('x')[0:2], 'tex' + AssertNotEqual SyntaxOf('y')[0:2], 'tex' let g:vim_markdown_math=1 syn off | syn on - AssertNotEqual SyntaxOf('a'), 'mkdMath' - AssertNotEqual SyntaxOf('b'), 'mkdMath' - AssertNotEqual SyntaxOf('c'), 'mkdMath' - AssertNotEqual SyntaxOf('d'), 'mkdMath' - AssertNotEqual SyntaxOf('e'), 'mkdMath' - AssertNotEqual SyntaxOf('f'), 'mkdMath' - AssertEqual SyntaxOf('x'), 'mkdMath' - AssertEqual SyntaxOf('y'), 'mkdMath' + AssertNotEqual SyntaxOf('a')[0:2], 'tex' + AssertNotEqual SyntaxOf('b')[0:2], 'tex' + AssertNotEqual SyntaxOf('c')[0:2], 'tex' + AssertNotEqual SyntaxOf('d')[0:2], 'tex' + AssertNotEqual SyntaxOf('e')[0:2], 'tex' + AssertNotEqual SyntaxOf('f')[0:2], 'tex' + AssertEqual SyntaxOf('x')[0:2], 'tex' + AssertEqual SyntaxOf('y')[0:2], 'tex' let g:vim_markdown_math=0 syn off | syn on - AssertNotEqual SyntaxOf('x'), 'mkdMath' - AssertNotEqual SyntaxOf('y'), 'mkdMath' + AssertNotEqual SyntaxOf('x')[0:2], 'tex' + AssertNotEqual SyntaxOf('y')[0:2], 'tex' Given markdown; a @@ -525,9 +937,9 @@ c Execute (multiline math): let g:vim_markdown_math=1 syn off | syn on - AssertNotEqual SyntaxOf('a'), 'mkdMath' - AssertEqual SyntaxOf('b'), 'mkdMath' - AssertNotEqual SyntaxOf('c'), 'mkdMath' + AssertNotEqual SyntaxOf('a')[0:2], 'tex' + AssertEqual SyntaxOf('b')[0:2], 'tex' + AssertNotEqual SyntaxOf('c')[0:2], 'tex' Given markdown; $ \sqrt{a}{b} $ @@ -543,6 +955,68 @@ Execute (math tex highlighting): AssertEqual SyntaxOf('sqrt'), 'texStatement' AssertEqual SyntaxOf('frac'), 'texStatement' +Given markdown; +$a b[$ c + +Execute (math ends with $): + let g:vim_markdown_math=1 + syn off | syn on + AssertEqual SyntaxOf('a')[0:2], 'tex' + AssertEqual SyntaxOf('b')[0:2], 'tex' + AssertNotEqual SyntaxOf('c')[0:2], 'tex' + +Given markdown; +$$a b[$$ c + +Execute (math ends with $$): + let g:vim_markdown_math=1 + syn off | syn on + AssertEqual SyntaxOf('a')[0:2], 'tex' + AssertEqual SyntaxOf('b')[0:2], 'tex' + AssertNotEqual SyntaxOf('c')[0:2], 'tex' + +Given markdown; +$(0 \le 1)$ + +Execute (math conceal in $): + if has('conceal') + setlocal conceallevel=2 + let g:vim_markdown_math=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1, '$' + AssertEqual synconcealed(1, 2)[0], 0 + AssertEqual synconcealed(1, 3)[0], 0 + AssertEqual synconcealed(1, 4)[0], 0 + AssertEqual synconcealed(1, 5)[0], 1, '\le' + AssertEqual synconcealed(1, 6)[0], 1 + AssertEqual synconcealed(1, 7)[0], 1 + AssertEqual synconcealed(1, 8)[0], 0 + AssertEqual synconcealed(1, 9)[0], 0 + AssertEqual synconcealed(1, 10)[0], 0 + AssertEqual synconcealed(1, 11)[0], 1, '$' + setlocal conceallevel=0 + endif + +Given markdown; +$$ +\omega +0 \le 1 +$$ + +Execute (math conceal in $$): + if has('conceal') + setlocal conceallevel=2 + let g:vim_markdown_math=1 + syn off | syn on + AssertEqual synconcealed(1, 1)[0], 1, '$$' + AssertEqual synconcealed(2, 1)[0], 1, '\omega' + AssertEqual synconcealed(3, 1)[0], 0, '0' + AssertEqual synconcealed(3, 3)[0], 1, '\le' + AssertEqual synconcealed(3, 7)[0], 0, '1' + AssertEqual synconcealed(4, 1)[0], 1, '$$' + setlocal conceallevel=0 + endif + # YAML frontmatter Given markdown; @@ -682,19 +1156,19 @@ Given markdown; ###### h6 Execute (atx headers): - AssertEqual SyntaxOf('# h1 space'), 'htmlH1' - AssertEqual SyntaxOf('#h1 nospace'), 'htmlH1' - AssertEqual SyntaxOf('# h1 2 spaces'), 'htmlH1' - AssertEqual SyntaxOf('# h1 trailing hash #'), 'htmlH1' - AssertEqual SyntaxOf('## h2 space'), 'htmlH2' - AssertEqual SyntaxOf('##h2 nospace'), 'htmlH2' - AssertEqual SyntaxOf('## h2 trailing hash ##'), 'htmlH2' - AssertEqual SyntaxOf('### h3 space'), 'htmlH3' - AssertEqual SyntaxOf('###h3 nospace'), 'htmlH3' - AssertEqual SyntaxOf('### h3 trailing hash ###'), 'htmlH3' - AssertEqual SyntaxOf('#### h4'), 'htmlH4' - AssertEqual SyntaxOf('##### h5'), 'htmlH5' - AssertEqual SyntaxOf('###### h6'), 'htmlH6' + AssertEqual SyntaxOf(' h1 space'), 'htmlH1' + AssertEqual SyntaxOf('h1 nospace'), 'htmlH1' + AssertEqual SyntaxOf(' h1 2 spaces'), 'htmlH1' + AssertEqual SyntaxOf(' h1 trailing hash '), 'htmlH1' + AssertEqual SyntaxOf(' h2 space'), 'htmlH2' + AssertEqual SyntaxOf('h2 nospace'), 'htmlH2' + AssertEqual SyntaxOf(' h2 trailing hash '), 'htmlH2' + AssertEqual SyntaxOf(' h3 space'), 'htmlH3' + AssertEqual SyntaxOf('h3 nospace'), 'htmlH3' + AssertEqual SyntaxOf(' h3 trailing hash '), 'htmlH3' + AssertEqual SyntaxOf(' h4'), 'htmlH4' + AssertEqual SyntaxOf(' h5'), 'htmlH5' + AssertEqual SyntaxOf(' h6'), 'htmlH6' Given markdown; # h1 before h2 @@ -704,9 +1178,9 @@ Given markdown; # h1 after h2 Execute (atx headers relative positions): - AssertEqual SyntaxOf('# h1 before h2'), 'htmlH1' - AssertEqual SyntaxOf('## h2 between h1s'), 'htmlH2' - AssertEqual SyntaxOf('# h1 after h2'), 'htmlH1' + AssertEqual SyntaxOf(' h1 before h2'), 'htmlH1' + AssertEqual SyntaxOf(' h2 between h1s'), 'htmlH2' + AssertEqual SyntaxOf(' h1 after h2'), 'htmlH1' Given markdown; setex h1 @@ -757,9 +1231,9 @@ setex h2 Execute (mixed atx and setex headers): AssertEqual SyntaxOf('setex h1 before atx'), 'htmlH1' AssertEqual SyntaxOf('==================='), 'htmlH1' - AssertEqual SyntaxOf('## atx h2'), 'htmlH2' - AssertEqual SyntaxOf('### atx h3'), 'htmlH3' - AssertEqual SyntaxOf('# atx h1'), 'htmlH1' + AssertEqual SyntaxOf(' atx h2'), 'htmlH2' + AssertEqual SyntaxOf(' atx h3'), 'htmlH3' + AssertEqual SyntaxOf(' atx h1'), 'htmlH1' AssertEqual SyntaxOf('setex h2'), 'htmlH2' AssertEqual SyntaxOf('------------------'), 'htmlH2'