]> 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:

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