vimrc/sources_non_forked/vim-markdown/test/syntax.vader

1259 lines
28 KiB
Text
Raw Normal View History

2018-02-04 11:35:08 +00:00
Before:
unlet! b:mkd_known_filetypes
unlet! b:mkd_included_filetypes
unlet! g:vim_markdown_math
Given markdown;
a **b** c
Execute (bold):
AssertNotEqual SyntaxOf('a'), 'htmlBold'
AssertEqual SyntaxOf('b'), 'htmlBold'
AssertNotEqual SyntaxOf('c'), 'htmlBold'
Given markdown;
a __b__ c
Execute (bold):
AssertNotEqual SyntaxOf('a'), 'htmlBold'
AssertEqual SyntaxOf('b'), 'htmlBold'
AssertNotEqual SyntaxOf('c'), 'htmlBold'
Given markdown;
a *b* c
Execute (italic):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
AssertNotEqual SyntaxOf('c'), 'htmlItalic'
Given markdown;
a _b_ c
Execute (italic):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
AssertNotEqual SyntaxOf('c'), 'htmlItalic'
Given markdown;
_a_b_
Execute (italic text has underscores):
AssertEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
Given markdown;
a \*b\* c
Execute (not italic with escaped asterisks):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertNotEqual SyntaxOf('b'), 'htmlItalic'
AssertNotEqual SyntaxOf('c'), 'htmlItalic'
Given markdown;
a \_b\_ c
Execute (not italic with escaped underscores):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertNotEqual SyntaxOf('b'), 'htmlItalic'
AssertNotEqual SyntaxOf('c'), 'htmlItalic'
Given markdown;
a _b\_c_ d
Execute (italic with escaped underscores):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
AssertEqual SyntaxOf('c'), 'htmlItalic'
AssertNotEqual SyntaxOf('d'), 'htmlItalic'
Given markdown;
a_b_c
Execute (not italic underscores within text):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertNotEqual SyntaxOf('b'), 'htmlItalic'
AssertNotEqual SyntaxOf('c'), 'htmlItalic'
Given markdown;
a *b\*c* d
Execute (italic with escaped asterisks):
AssertNotEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
AssertEqual SyntaxOf('c'), 'htmlItalic'
AssertNotEqual SyntaxOf('d'), 'htmlItalic'
Given markdown;
a __b\_\_c__ d
Execute (bold with escaped underscores):
AssertNotEqual SyntaxOf('a'), 'htmlBold'
AssertEqual SyntaxOf('b'), 'htmlBold'
AssertEqual SyntaxOf('c'), 'htmlBold'
AssertNotEqual SyntaxOf('d'), 'htmlBold'
Given markdown;
_a b
c_ d
Execute (italic with underscores in multiple lines):
AssertEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
AssertEqual SyntaxOf('c'), 'htmlItalic'
AssertNotEqual SyntaxOf('d'), 'htmlItalic'
Given markdown;
__a b
c__ d
Execute (bold with underscores in multiple lines):
AssertEqual SyntaxOf('a'), 'htmlBold'
AssertEqual SyntaxOf('b'), 'htmlBold'
AssertEqual SyntaxOf('c'), 'htmlBold'
AssertNotEqual SyntaxOf('d'), 'htmlBold'
Given markdown;
___a b
c___ d
Execute (bold italic with underscores in multiple lines):
AssertEqual SyntaxOf('a'), 'htmlBoldItalic'
AssertEqual SyntaxOf('b'), 'htmlBoldItalic'
AssertEqual SyntaxOf('c'), 'htmlBoldItalic'
AssertNotEqual SyntaxOf('d'), 'htmlBoldItalic'
Given markdown;
*a b
c* d
Execute (italic with asterisks in multiple lines):
AssertEqual SyntaxOf('a'), 'htmlItalic'
AssertEqual SyntaxOf('b'), 'htmlItalic'
AssertEqual SyntaxOf('c'), 'htmlItalic'
AssertNotEqual SyntaxOf('d'), 'htmlItalic'
Given markdown;
**a b
c** d
Execute (bold with asterisks in multiple lines):
AssertEqual SyntaxOf('a'), 'htmlBold'
AssertEqual SyntaxOf('b'), 'htmlBold'
AssertEqual SyntaxOf('c'), 'htmlBold'
AssertNotEqual SyntaxOf('d'), 'htmlBold'
Given markdown;
***a b
c*** d
Execute (bold italic with asterisks in multiple lines):
AssertEqual SyntaxOf('a'), 'htmlBoldItalic'
AssertEqual SyntaxOf('b'), 'htmlBoldItalic'
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;
[a](b)
Execute (link with title):
AssertEqual SyntaxOf('a'), 'mkdLink'
AssertEqual SyntaxOf('b'), 'mkdURL'
Given markdown;
[a
b](c)
Execute (link text with newline):
AssertEqual SyntaxOf('a'), 'mkdLink'
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)
(b)
Execute (parenthesis not in link):
AssertNotEqual SyntaxOf('a'), 'mkdURL'
AssertNotEqual SyntaxOf('b'), 'mkdURL'
Given markdown;
[a](b) c [d](e)
Execute (multiple links on a line):
AssertNotEqual SyntaxOf('c'), 'mkdLink'
AssertNotEqual SyntaxOf('c'), 'mkdURL'
Given markdown;
[a] (b)
Execute (space is not allowed between link text and parenthesis):
AssertNotEqual SyntaxOf('a'), 'mkdLink'
AssertNotEqual SyntaxOf('b'), 'mkdURL'
Given markdown;
[a](b)
Execute (conceal link):
if has('conceal')
setlocal conceallevel=2
AssertEqual synconcealed(1, 1)[0], 1
AssertEqual synconcealed(1, 2)[0], 0
AssertEqual synconcealed(1, 3)[0], 1
AssertEqual synconcealed(1, 4)[0], 1
AssertEqual synconcealed(1, 4)[0], 1
AssertEqual synconcealed(1, 5)[0], 1
AssertEqual synconcealed(1, 6)[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, 4)[0], 0
AssertEqual synconcealed(1, 5)[0], 0
AssertEqual synconcealed(1, 6)[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
AssertEqual synconcealed(1, 4)[0], 1
AssertEqual synconcealed(1, 4)[0], 1
AssertEqual synconcealed(1, 5)[0], 1
AssertEqual synconcealed(1, 6)[0], 1
setlocal conceallevel=0
unlet g:vim_markdown_conceal
syn off | syn on
endif
# Autolinks
Given markdown;
a <http://b> c
Execute (autolink):
AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
AssertEqual SyntaxOf('<'), 'mkdDelimiter'
AssertEqual SyntaxOf('b'), 'mkdInlineURL'
AssertEqual SyntaxOf('>'), 'mkdDelimiter'
AssertNotEqual SyntaxOf('c'), 'mkdInlineURL'
Given markdown;
http://12monkeys.foo
Execute (autolink with domain starting with a number):
AssertEqual SyntaxOf('12monkeys'), 'mkdInlineURL'
Given markdown;
<HtTp://a>
Execute (autolink with scheme case is insensitive):
AssertEqual SyntaxOf('a'), 'mkdInlineURL'
Given markdown;
<a>
Execute (autolink without scheme is not a link):
AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
Given markdown;
< http://a >
<http://b c>
<http://d
e>
Execute (autolink with space is not a link):
AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
AssertNotEqual SyntaxOf('b'), 'mkdInlineURL'
AssertNotEqual SyntaxOf('c'), 'mkdInlineURL'
AssertNotEqual SyntaxOf('d'), 'mkdInlineURL'
AssertNotEqual SyntaxOf('e'), 'mkdInlineURL'
Given markdown;
\<http://a>
Execute (autolinks can be backslash escaped):
AssertNotEqual SyntaxOf('<'), 'mkdDelimiter'
Given markdown;
a (http://b.bb) c
Execute (autolink in parenthesis):
AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
AssertEqual SyntaxOf('('), 'mkdDelimiter'
AssertEqual SyntaxOf('b'), 'mkdInlineURL'
AssertEqual SyntaxOf(')'), 'mkdDelimiter'
AssertNotEqual SyntaxOf('c'), 'mkdInlineURL'
Given markdown;
[![a](http://b)](http://c)
Execute (autolink in link text):
AssertEqual SyntaxOf('!'), 'mkdDelimiter'
AssertEqual SyntaxOf('a'), 'mkdLink'
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;
~~~
code
~~~
Execute (code blocks can be fenced with tildes):
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
~~~~
code
~~~~~
Execute (code blocks can be fenced with tildes longer than 3):
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
````
code
`````
Execute (code blocks can be fenced with backticks longer than 3):
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
~~~ruby
code
~~~
Execute (code blocks can have a language specifier):
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
```c++
code
```
text
Execute (code blocks can be fenced with backticks and a language specifier):
AssertEqual SyntaxOf('code'), 'mkdCode'
AssertNotEqual SyntaxOf('text'), 'mkdCode'
# Indent Code Blocks
Given markdown;
a
b
c
Execute (indent code blocks):
AssertNotEqual SyntaxOf('a'), 'mkdCode'
AssertEqual SyntaxOf('b'), 'mkdCode'
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
# a
b
c
Execute (indent code blocks after header):
AssertNotEqual SyntaxOf('a'), 'mkdCode'
AssertNotEqual SyntaxOf('b'), 'mkdCode'
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
- a
b
c
Execute (indent code blocks after list):
AssertNotEqual SyntaxOf('a'), 'mkdCode'
AssertNotEqual SyntaxOf('b'), 'mkdCode'
AssertEqual SyntaxOf('c'), 'mkdCode'
Given markdown;
a
b
Execute (indent code block at beginning of file):
AssertEqual SyntaxOf('a'), 'mkdCode'
AssertEqual SyntaxOf('b'), 'mkdCode'
Given markdown;
```c++
#include <iostream>
code
```
```ruby
def a
end
```
Execute (fenced code block syntax with a language specifier):
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('def'), 'rubyDefine'
Given markdown;
``` c++
#include <iostream>
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
```
```viml
let g:b = 1
```
Execute (fenced code block syntax with alias language specifier):
let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax')
call b:func(0)
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\<cr>let g:a = 1\<cr>```"
call b:func(1)
AssertEqual SyntaxOf('g:a'), 'vimVar'
Given markdown;
```a+b-
code
```
Execute (fenced code block syntax with an unknown language specifier):
let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'MarkdownRefreshSyntax')
call b:func(0)
AssertEqual SyntaxOf('code'), 'mkdSnippetA_B_'
Given markdown;
```
=
a
-
```
Execute (first = or - in fenced code block is not setex headers):
AssertEqual SyntaxOf('='), 'mkdCode'
AssertEqual SyntaxOf('-'), 'mkdCode'
Given markdown;
``` {style=""}
a
```
Execute (fenced code block with extended info strings):
AssertEqual SyntaxOf('a'), 'mkdCode'
# Code Blocks in pre and code tag
Given markdown;
<pre>
a
</pre>
Execute (code block in pre tag):
AssertEqual SyntaxOf('a'), 'mkdCode'
Given markdown;
<code>
a
</code>
Execute (code block in code tag):
AssertEqual SyntaxOf('a'), 'mkdCode'
Given markdown;
\<pre\>
a
\</pre\>
Execute (not code block in escaped pre tag):
AssertNotEqual SyntaxOf('a'), 'mkdCode'
Given markdown;
\<code\>
a
\</code\>
Execute (not code block in escaped code tag):
AssertNotEqual SyntaxOf('a'), 'mkdCode'
# Math
Given markdown;
a $x$ b
c $$y$$ d
\$e\$
\$\$f\$\$
Execute (math):
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')[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')[0:2], 'tex'
AssertNotEqual SyntaxOf('y')[0:2], 'tex'
Given markdown;
a
$
b
$
c
Execute (multiline math):
let g:vim_markdown_math=1
syn off | syn on
AssertNotEqual SyntaxOf('a')[0:2], 'tex'
AssertEqual SyntaxOf('b')[0:2], 'tex'
AssertNotEqual SyntaxOf('c')[0:2], 'tex'
Given markdown;
$ \sqrt{a}{b} $
$$ \frac{a}{b} $$
Execute (math tex highlighting):
let g:vim_markdown_math=0
syn off | syn on
AssertNotEqual SyntaxOf('sqrt'), 'texStatement'
AssertNotEqual SyntaxOf('frac'), 'texStatement'
let g:vim_markdown_math=1
syn off | syn on
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;
---
a: b
---
Execute (YAML frontmatter is controlled by the option):
AssertNotEqual SyntaxOf('a')[0:3], 'yaml'
let g:vim_markdown_frontmatter=1
syn off | syn on
AssertEqual SyntaxOf('a')[0:3], 'yaml'
let g:vim_markdown_frontmatter=0
syn off | syn on
AssertNotEqual SyntaxOf('a')[0:3], 'yaml'
Given markdown;
---
a: b
---
Execute (YAML frontmatter only works if it's the first thing in the file):
let g:vim_markdown_frontmatter=1
syn off | syn on
AssertNotEqual SyntaxOf('a')[0:3], 'yaml'
Given markdown;
---
a: b
---
---
Execute (rules are not mistaken by YAML frontmatter delimiters):
let g:vim_markdown_frontmatter=1
syn off | syn on
AssertEqual SyntaxAt(5, 1), 'mkdRule'
unlet g:vim_markdown_frontmatter
# TOML frontmatter
Given markdown;
+++
a = "b"
+++
Execute (TOML frontmatter is controlled by the option):
syn off | syn on
AssertNotEqual SyntaxOf('b'), 'tomlString'
let g:vim_markdown_toml_frontmatter=1
syn off | syn on
AssertEqual SyntaxOf('b'), 'tomlString'
let g:vim_markdown_toml_frontmatter=0
syn off | syn on
AssertNotEqual SyntaxOf('b'), 'tomlString'
Given markdown;
+++
a = "b"
+++
Execute (TOML frontmatter only works if it's the first thing in the file):
let g:vim_markdown_toml_frontmatter=1
syn off | syn on
AssertNotEqual SyntaxOf('b'), 'tomlString'
unlet g:vim_markdown_toml_frontmatter
# JSON frontmatter
Given markdown;
{
"a": "b"
}
Execute (JSON frontmatter is controlled by the option):
syn off | syn on
AssertNotEqual SyntaxOf('a'), 'jsonKeyword'
let g:vim_markdown_json_frontmatter=1
syn off | syn on
AssertEqual SyntaxOf('a'), 'jsonKeyword'
let g:vim_markdown_json_frontmatter=0
syn off | syn on
AssertNotEqual SyntaxOf('a'), 'jsonKeyword'
Given markdown;
{
"a": "b"
}
Execute (JSON frontmatter only works if it's the first thing in the file):
let g:vim_markdown_json_frontmatter=1
syn off | syn on
AssertNotEqual SyntaxOf('a'), 'jsonKeyword'
unlet g:vim_markdown_json_frontmatter
# Header
Given markdown;
# #a
ccc
## #b
ddd
Execute (header title starts with #):
AssertEqual SyntaxOf('a'), 'htmlH1'
AssertEqual SyntaxOf('b'), 'htmlH2'
Given markdown;
# h1 space
#h1 nospace
# h1 2 spaces
# h1 trailing hash #
## h2 space
##h2 nospace
## h2 trailing hash ##
### h3 space
###h3 nospace
### h3 trailing hash ###
#### h4
##### h5
###### 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'
Given markdown;
# h1 before h2
## h2 between h1s
# 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'
Given markdown;
setex h1
========
setex h2
--------
setex h1 single punctuation
=
setex h1 punctuation longer than header
================================
Execute (setex headers):
AssertEqual SyntaxOf('setex h1'), 'htmlH1'
AssertEqual SyntaxOf('^========$'), 'htmlH1'
AssertEqual SyntaxOf('setex h2'), 'htmlH2'
AssertEqual SyntaxOf('--------'), 'htmlH2'
AssertEqual SyntaxOf('setex h1 single punctuation'), 'htmlH1'
AssertEqual SyntaxOf('^=$'), 'htmlH1'
AssertEqual SyntaxOf('setex h1 punctuation longer than header'), 'htmlH1'
AssertEqual SyntaxOf('^================================$'), 'htmlH1'
Given markdown;
- not Setex
- because list
Execute (prevent list vs Setex confusion):
AssertNotEqual SyntaxOf('- not Setex'), 'htmlH2'
AssertNotEqual SyntaxOf('- becuase list'), 'htmlH2'
Given markdown;
setex h1 before atx
===================
## atx h2
### atx h3
# atx h1
setex h2
------------------
### atx h3 2
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('setex h2'), 'htmlH2'
AssertEqual SyntaxOf('------------------'), 'htmlH2'
# List
Given markdown;
- a & b
1. c > d
Execute (& and > are not marked as htmlError in lists):
AssertEqual SyntaxOf('-'), 'mkdListItem'
AssertEqual SyntaxOf('1.'), 'mkdListItem'
AssertNotEqual SyntaxOf('&'), 'htmlError'
AssertNotEqual SyntaxOf('>'), 'htmlError'
Given markdown;
1. a
2. b
Execute (list after line break):
AssertEqual SyntaxOf('1'), 'mkdListItem'
AssertEqual SyntaxOf('2'), 'mkdListItem'
# HTML
Given markdown;
a
<p>b</p>
- <span>c</span>
Execute (HTML tag in text):
AssertEqual SyntaxOf('p'), 'htmlTagName'
AssertEqual SyntaxOf('<p>'), 'htmlTag'
AssertEqual SyntaxOf('</p>'), 'htmlEndTag'
AssertEqual SyntaxOf('span'), 'htmlTagName'
AssertEqual SyntaxOf('<span>'), 'htmlTag'
AssertEqual SyntaxOf('</span>'), 'htmlEndTag'