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