]> git.madduck.net Git - etc/vim.git/blob - test/syntax.vader

madduck's git repository

Every one of the projects in this repository is available at the canonical URL git://git.madduck.net/madduck/pub/<projectpath> — see each project's metadata for the exact URL.

All patches and comments are welcome. Please squash your changes to logical commits before using git-format-patch and git-send-email to patches@git.madduck.net. If you'd read over the Git project's submission guidelines and adhered to them, I'd be especially grateful.

SSH access, as well as push access can be individually arranged.

If you use my repositories frequently, consider adding the following snippet to ~/.gitconfig and using the third clone URL listed for each project:

[url "git://git.madduck.net/madduck/"]
  insteadOf = madduck:

Improve code block syntax and fix test failures
[etc/vim.git] / test / syntax.vader
1 Given markdown;
2 a **b** c
3
4 Execute (bold):
5   AssertNotEqual SyntaxOf('a'), 'htmlBold'
6   AssertEqual SyntaxOf('b'), 'htmlBold'
7   AssertNotEqual SyntaxOf('c'), 'htmlBold'
8
9 Given markdown;
10 a __b__ c
11
12 Execute (bold):
13   AssertNotEqual SyntaxOf('a'), 'htmlBold'
14   AssertEqual SyntaxOf('b'), 'htmlBold'
15   AssertNotEqual SyntaxOf('c'), 'htmlBold'
16
17 Given markdown;
18 a *b* c
19
20 Execute (italic):
21   AssertNotEqual SyntaxOf('a'), 'htmlItalic'
22   AssertEqual SyntaxOf('b'), 'htmlItalic'
23   AssertNotEqual SyntaxOf('c'), 'htmlItalic'
24
25 Given markdown;
26 a _b_ c
27
28 Execute (italic):
29   AssertNotEqual SyntaxOf('a'), 'htmlItalic'
30   AssertEqual SyntaxOf('b'), 'htmlItalic'
31   AssertNotEqual SyntaxOf('c'), 'htmlItalic'
32
33 Given markdown;
34 a \*b\* c
35
36 Execute (not italic with escaped asterisks):
37   AssertNotEqual SyntaxOf('a'), 'htmlItalic'
38   AssertNotEqual SyntaxOf('b'), 'htmlItalic'
39   AssertNotEqual SyntaxOf('c'), 'htmlItalic'
40
41 Given markdown;
42 a \_b\_ c
43
44 Execute (not italic with escaped underscores):
45   AssertNotEqual SyntaxOf('a'), 'htmlItalic'
46   AssertNotEqual SyntaxOf('b'), 'htmlItalic'
47   AssertNotEqual SyntaxOf('c'), 'htmlItalic'
48
49 Given markdown;
50 a _b\_c_ d
51
52 Execute (italic with escaped underscores):
53   AssertNotEqual SyntaxOf('a'), 'htmlItalic'
54   AssertEqual SyntaxOf('b'), 'htmlItalic'
55   AssertEqual SyntaxOf('c'), 'htmlItalic'
56   AssertNotEqual SyntaxOf('d'), 'htmlItalic'
57
58 Given markdown;
59 a __b\_\_c__ d
60
61 Execute (bold with escaped underscores):
62   AssertNotEqual SyntaxOf('a'), 'htmlBold'
63   AssertEqual SyntaxOf('b'), 'htmlBold'
64   AssertEqual SyntaxOf('c'), 'htmlBold'
65   AssertNotEqual SyntaxOf('d'), 'htmlBold'
66
67 # Links
68
69 Given markdown;
70 [a](b)
71
72 Execute (link with title):
73   AssertEqual SyntaxOf('a'), 'mkdLink'
74   AssertEqual SyntaxOf('b'), 'mkdURL'
75
76 Given markdown;
77 (a)
78
79 (b)
80
81 Execute (parenthesis not in link):
82   AssertNotEqual SyntaxOf('a'), 'mkdURL'
83   AssertNotEqual SyntaxOf('b'), 'mkdURL'
84
85 Given markdown;
86 [a](b) c [d](e)
87
88 Execute (multiple links on a line):
89   AssertNotEqual SyntaxOf('c'), 'mkdLink'
90   AssertNotEqual SyntaxOf('c'), 'mkdURL'
91
92 # Autolinks
93
94 Given markdown;
95 a <http://b> c
96
97 Execute (autolink):
98   AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
99   AssertEqual SyntaxOf('<'), 'mkdDelimiter'
100   AssertEqual SyntaxOf('b'), 'mkdInlineURL'
101   AssertEqual SyntaxOf('>'), 'mkdDelimiter'
102   AssertNotEqual SyntaxOf('c'), 'mkdInlineURL'
103
104 Given markdown;
105 <HtTp://a>
106
107 Execute (autolink with scheme case is insensitive):
108   AssertEqual SyntaxOf('a'), 'mkdInlineURL'
109
110 Given markdown;
111 <notascheme://a>
112
113 Execute (autolink without known scheme is not a link):
114   AssertNotEqual SyntaxOf('n'), 'mkdInlineURL'
115
116 Given markdown;
117 <a>
118
119 Execute (autolink without scheme is not a link):
120   AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
121
122 Given markdown;
123 < http://a >
124 <http://b c>
125 <http://d
126 e>
127
128 Execute (autolink with space is not a link):
129   AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
130   AssertNotEqual SyntaxOf('b'), 'mkdInlineURL'
131   AssertNotEqual SyntaxOf('c'), 'mkdInlineURL'
132   AssertNotEqual SyntaxOf('d'), 'mkdInlineURL'
133   AssertNotEqual SyntaxOf('e'), 'mkdInlineURL'
134
135 Given markdown;
136 \<http://a>
137
138 Execute (autolinks can be backslash escaped):
139   AssertNotEqual SyntaxOf('<'), 'mkdDelimiter'
140
141 Given markdown;
142 a (http://b.bb) c
143
144 Execute (autolink in parenthesis):
145   AssertNotEqual SyntaxOf('a'), 'mkdInlineURL'
146   AssertEqual SyntaxOf('('), 'mkdDelimiter'
147   AssertEqual SyntaxOf('b'), 'mkdInlineURL'
148   AssertEqual SyntaxOf(')'), 'mkdDelimiter'
149   AssertNotEqual SyntaxOf('c'), 'mkdInlineURL'
150
151 Given markdown;
152 [![a](http://b)](http://c)
153
154 Execute (autolink in link text):
155   AssertEqual SyntaxOf('!'), 'mkdDelimiter'
156   AssertEqual SyntaxOf('a'), 'mkdLink'
157   AssertEqual SyntaxOf('b'), 'mkdURL'
158   AssertEqual SyntaxOf('c'), 'mkdURL'
159
160 # Code Blocks
161
162 Given markdown;
163 ~~~
164 code
165 ~~~
166
167 Execute (code blocks can be fenced with tildes):
168   AssertEqual SyntaxOf('c'), 'mkdCode'
169
170 Given markdown;
171 ~~~ruby
172 code
173 ~~~
174
175 Execute (code blocks can have a language specifier):
176   AssertEqual SyntaxOf('c'), 'mkdCode'
177
178 Given markdown;
179 ```c++
180 code
181 ```
182
183 text
184
185 Execute (code blocks can be fenced with backticks and a language specifier):
186   AssertEqual SyntaxOf('code'), 'mkdCode'
187   AssertNotEqual SyntaxOf('text'), 'mkdCode'
188
189 # Indent Code Blocks
190
191 Given markdown;
192 a
193
194     b
195     c
196
197 Execute (indent code blocks):
198   AssertNotEqual SyntaxOf('a'), 'mkdCode'
199   AssertEqual SyntaxOf('b'), 'mkdCode'
200   AssertEqual SyntaxOf('c'), 'mkdCode'
201
202 Given markdown;
203 # a
204
205 b
206
207     c
208
209 Execute (indent code blocks after header):
210   AssertNotEqual SyntaxOf('a'), 'mkdCode'
211   AssertNotEqual SyntaxOf('b'), 'mkdCode'
212   AssertEqual SyntaxOf('c'), 'mkdCode'
213
214 Given markdown;
215 -   a
216
217     b
218
219         c
220
221 Execute (indent code blocks after list):
222   AssertNotEqual SyntaxOf('a'), 'mkdCode'
223   AssertNotEqual SyntaxOf('b'), 'mkdCode'
224   AssertEqual SyntaxOf('c'), 'mkdCode'
225
226 Given markdown;
227 ```c++
228 #include <iostream>
229 code
230 ```
231
232 ```ruby
233 def a
234 end
235 ```
236
237 Execute (fenced code block syntax with a language specifier):
238   let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_refresh_syntax')
239   call b:func(0)
240   AssertEqual SyntaxOf('include'), 'cInclude'
241   AssertEqual SyntaxOf('code'), 'mkdSnippetCPP'
242   AssertEqual SyntaxOf('def'), 'rubyDefine'
243
244 Given markdown;
245 ```a+b-
246 code
247 ```
248
249 Execute (fenced code block syntax with an unknown language specifier):
250   let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_refresh_syntax')
251   call b:func(0)
252   AssertEqual SyntaxOf('code'), 'mkdSnippetA_B_'
253
254 # Math
255
256 Given markdown;
257 a $x$ b
258 c $$y$$ d
259 \$e\$
260 \$\$f\$\$
261
262 Execute (math):
263   AssertNotEqual SyntaxOf('x'), 'mkdMath'
264   AssertNotEqual SyntaxOf('y'), 'mkdMath'
265   let g:vim_markdown_math=1
266   syn off | syn on
267   AssertNotEqual SyntaxOf('a'), 'mkdMath'
268   AssertNotEqual SyntaxOf('b'), 'mkdMath'
269   AssertNotEqual SyntaxOf('c'), 'mkdMath'
270   AssertNotEqual SyntaxOf('d'), 'mkdMath'
271   AssertNotEqual SyntaxOf('e'), 'mkdMath'
272   AssertNotEqual SyntaxOf('f'), 'mkdMath'
273   AssertEqual SyntaxOf('x'), 'mkdMath'
274   AssertEqual SyntaxOf('y'), 'mkdMath'
275   let g:vim_markdown_math=0
276   syn off | syn on
277   AssertNotEqual SyntaxOf('x'), 'mkdMath'
278   AssertNotEqual SyntaxOf('y'), 'mkdMath'
279
280 Given markdown;
281 a
282
283 $
284 b
285 $
286
287 c
288
289 Execute (multiline math):
290   let g:vim_markdown_math=1
291   syn off | syn on
292   AssertNotEqual SyntaxOf('a'), 'mkdMath'
293   AssertEqual SyntaxOf('b'), 'mkdMath'
294   AssertNotEqual SyntaxOf('c'), 'mkdMath'
295
296 Given markdown;
297 $ \sqrt{a}{b} $
298 $$ \frac{a}{b} $$
299
300 Execute (math tex highlighting):
301   let g:vim_markdown_math=0
302   syn off | syn on
303   AssertNotEqual SyntaxOf('sqrt'), 'texStatement'
304   AssertNotEqual SyntaxOf('frac'), 'texStatement'
305   let g:vim_markdown_math=1
306   syn off | syn on
307   AssertEqual SyntaxOf('sqrt'), 'texStatement'
308   AssertEqual SyntaxOf('frac'), 'texStatement'
309
310 # YAML frontmatter
311
312 Given markdown;
313 ---
314 a: b
315 ---
316
317 Execute (YAML frontmatter is controlled by the option):
318   AssertNotEqual SyntaxOf('a'), 'yamlBlockMappingKey'
319   let g:vim_markdown_frontmatter=1
320   syn off | syn on
321   AssertEqual SyntaxOf('a'), 'yamlBlockMappingKey'
322   let g:vim_markdown_frontmatter=0
323   syn off | syn on
324   AssertNotEqual SyntaxOf('a'), 'yamlBlockMappingKey'
325
326 Given markdown;
327
328 ---
329 a: b
330 ---
331
332 Execute (YAML frontmatter only works if it's the first thing in the file):
333   let g:vim_markdown_frontmatter=1
334   syn off | syn on
335   AssertNotEqual SyntaxOf('a'), 'yamlBlockMappingKey'
336
337 Given markdown;
338 ---
339 a: b
340 ---
341
342 ---
343
344 Execute (rules are not mistaken by YAML frontmatter delimiters):
345   let g:vim_markdown_frontmatter=1
346   syn off | syn on
347   AssertEqual SyntaxAt(5, 1), 'mkdRule'
348
349 # Header
350
351 Given markdown;
352 # #a
353 ccc
354
355 ## #b
356 ddd
357
358 Execute (header title starts with #):
359   AssertEqual SyntaxOf('a'), 'htmlH1'
360   AssertEqual SyntaxOf('b'), 'htmlH2'
361
362 Given markdown;
363 # h1 space
364
365 #h1 nospace
366
367 #  h1 2 spaces
368
369 # h1 trailing hash #
370
371 ## h2 space
372
373 ##h2 nospace
374
375 ## h2 trailing hash ##
376
377 ### h3 space
378
379 ###h3 nospace
380
381 ### h3 trailing hash ###
382
383 #### h4
384
385 ##### h5
386
387 ###### h6
388
389 Execute (atx headers):
390   AssertEqual SyntaxOf('# h1 space'), 'htmlH1'
391   AssertEqual SyntaxOf('#h1 nospace'), 'htmlH1'
392   AssertEqual SyntaxOf('#  h1 2 spaces'), 'htmlH1'
393   AssertEqual SyntaxOf('# h1 trailing hash #'), 'htmlH1'
394   AssertEqual SyntaxOf('## h2 space'), 'htmlH2'
395   AssertEqual SyntaxOf('##h2 nospace'), 'htmlH2'
396   AssertEqual SyntaxOf('## h2 trailing hash ##'), 'htmlH2'
397   AssertEqual SyntaxOf('### h3 space'), 'htmlH3'
398   AssertEqual SyntaxOf('###h3 nospace'), 'htmlH3'
399   AssertEqual SyntaxOf('### h3 trailing hash ###'), 'htmlH3'
400   AssertEqual SyntaxOf('#### h4'), 'htmlH4'
401   AssertEqual SyntaxOf('##### h5'), 'htmlH5'
402   AssertEqual SyntaxOf('###### h6'), 'htmlH6'
403
404 Given markdown;
405 # h1 before h2
406
407 ## h2 between h1s
408
409 # h1 after h2
410
411 Execute (atx headers relative positions):
412   AssertEqual SyntaxOf('# h1 before h2'), 'htmlH1'
413   AssertEqual SyntaxOf('## h2 between h1s'), 'htmlH2'
414   AssertEqual SyntaxOf('# h1 after h2'), 'htmlH1'
415
416 Given markdown;
417 setex h1
418 ========
419
420 setex h2
421 --------
422
423 setex h1 single punctuation
424 =
425
426 setex h1 punctuation longer than header
427 ================================
428
429 Execute (setex headers):
430   AssertEqual SyntaxOf('setex h1'), 'htmlH1'
431   AssertEqual SyntaxOf('^========$'), 'htmlH1'
432   AssertEqual SyntaxOf('setex h2'), 'htmlH2'
433   AssertEqual SyntaxOf('--------'), 'htmlH2'
434   AssertEqual SyntaxOf('setex h1 single punctuation'), 'htmlH1'
435   AssertEqual SyntaxOf('^=$'), 'htmlH1'
436   AssertEqual SyntaxOf('setex h1 punctuation longer than header'), 'htmlH1'
437   AssertEqual SyntaxOf('^================================$'), 'htmlH1'
438
439 Given markdown;
440 - not Setex
441 - because list
442
443 Execute (prevent list vs Setex confusion):
444   AssertNotEqual SyntaxOf('- not Setex'), 'htmlH2'
445   AssertNotEqual SyntaxOf('- becuase list'), 'htmlH2'
446
447 Given markdown;
448 setex h1 before atx
449 ===================
450
451 ## atx h2
452
453 ### atx h3
454
455 # atx h1
456
457 setex h2
458 ------------------
459
460 ### atx h3 2
461
462 Execute (mixed atx and setex headers):
463   AssertEqual SyntaxOf('setex h1 before atx'), 'htmlH1'
464   AssertEqual SyntaxOf('==================='), 'htmlH1'
465   AssertEqual SyntaxOf('## atx h2'), 'htmlH2'
466   AssertEqual SyntaxOf('### atx h3'), 'htmlH3'
467   AssertEqual SyntaxOf('# atx h1'), 'htmlH1'
468   AssertEqual SyntaxOf('setex h2'), 'htmlH2'
469   AssertEqual SyntaxOf('------------------'), 'htmlH2'
470
471 # List
472
473 Given markdown;
474 - a & b
475 1. c > d
476
477 Execute (& and > are not marked as htmlError in lists):
478   AssertEqual SyntaxOf('-'), 'mkdListItem'
479   AssertEqual SyntaxOf('1.'), 'mkdListItem'
480   AssertNotEqual SyntaxOf('&'), 'htmlError'
481   AssertNotEqual SyntaxOf('>'), 'htmlError'
482
483 # HTML
484
485 Given markdown;
486 a
487
488 <p>b</p>
489
490 - <span>c</span>
491
492 Execute (HTML tag in text):
493   AssertEqual SyntaxOf('p'), 'htmlTagName'
494   AssertEqual SyntaxOf('<p>'), 'htmlTag'
495   AssertEqual SyntaxOf('</p>'), 'htmlEndTag'
496   AssertEqual SyntaxOf('span'), 'htmlTagName'
497   AssertEqual SyntaxOf('<span>'), 'htmlTag'
498   AssertEqual SyntaxOf('</span>'), 'htmlEndTag'