]> 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 syntax regexp performance
[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 ~~~~
172 code
173 ~~~~~
174
175 Execute (code blocks can be fenced with tildes longer than 3):
176   AssertEqual SyntaxOf('c'), 'mkdCode'
177
178 Given markdown;
179 ````
180 code
181 `````
182
183 Execute (code blocks can be fenced with backticks longer than 3):
184   AssertEqual SyntaxOf('c'), 'mkdCode'
185
186 Given markdown;
187 ~~~ruby
188 code
189 ~~~
190
191 Execute (code blocks can have a language specifier):
192   AssertEqual SyntaxOf('c'), 'mkdCode'
193
194 Given markdown;
195 ```c++
196 code
197 ```
198
199 text
200
201 Execute (code blocks can be fenced with backticks and a language specifier):
202   AssertEqual SyntaxOf('code'), 'mkdCode'
203   AssertNotEqual SyntaxOf('text'), 'mkdCode'
204
205 # Indent Code Blocks
206
207 Given markdown;
208 a
209
210     b
211     c
212
213 Execute (indent code blocks):
214   AssertNotEqual SyntaxOf('a'), 'mkdCode'
215   AssertEqual SyntaxOf('b'), 'mkdCode'
216   AssertEqual SyntaxOf('c'), 'mkdCode'
217
218 Given markdown;
219 # a
220
221 b
222
223     c
224
225 Execute (indent code blocks after header):
226   AssertNotEqual SyntaxOf('a'), 'mkdCode'
227   AssertNotEqual SyntaxOf('b'), 'mkdCode'
228   AssertEqual SyntaxOf('c'), 'mkdCode'
229
230 Given markdown;
231 -   a
232
233     b
234
235         c
236
237 Execute (indent code blocks after list):
238   AssertNotEqual SyntaxOf('a'), 'mkdCode'
239   AssertNotEqual SyntaxOf('b'), 'mkdCode'
240   AssertEqual SyntaxOf('c'), 'mkdCode'
241
242 Given markdown;
243 ```c++
244 #include <iostream>
245 code
246 ```
247
248 ```ruby
249 def a
250 end
251 ```
252
253 Execute (fenced code block syntax with a language specifier):
254   let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_refresh_syntax')
255   call b:func(0)
256   AssertEqual SyntaxOf('include'), 'cInclude'
257   AssertEqual SyntaxOf('code'), 'mkdSnippetCPP'
258   AssertEqual SyntaxOf('def'), 'rubyDefine'
259
260 Given markdown;
261 ```a+b-
262 code
263 ```
264
265 Execute (fenced code block syntax with an unknown language specifier):
266   let b:func = Markdown_GetFunc('vim-markdown/ftplugin/markdown.vim', 'Markdown_refresh_syntax')
267   call b:func(0)
268   AssertEqual SyntaxOf('code'), 'mkdSnippetA_B_'
269
270
271 Given markdown;
272 ```
273 =
274 a
275 -
276 ```
277
278 Execute (first = or - in fenced code block is not setex headers):
279   AssertEqual SyntaxOf('='), 'mkdCode'
280   AssertEqual SyntaxOf('-'), 'mkdCode'
281
282 # Math
283
284 Given markdown;
285 a $x$ b
286 c $$y$$ d
287 \$e\$
288 \$\$f\$\$
289
290 Execute (math):
291   AssertNotEqual SyntaxOf('x'), 'mkdMath'
292   AssertNotEqual SyntaxOf('y'), 'mkdMath'
293   let g:vim_markdown_math=1
294   syn off | syn on
295   AssertNotEqual SyntaxOf('a'), 'mkdMath'
296   AssertNotEqual SyntaxOf('b'), 'mkdMath'
297   AssertNotEqual SyntaxOf('c'), 'mkdMath'
298   AssertNotEqual SyntaxOf('d'), 'mkdMath'
299   AssertNotEqual SyntaxOf('e'), 'mkdMath'
300   AssertNotEqual SyntaxOf('f'), 'mkdMath'
301   AssertEqual SyntaxOf('x'), 'mkdMath'
302   AssertEqual SyntaxOf('y'), 'mkdMath'
303   let g:vim_markdown_math=0
304   syn off | syn on
305   AssertNotEqual SyntaxOf('x'), 'mkdMath'
306   AssertNotEqual SyntaxOf('y'), 'mkdMath'
307
308 Given markdown;
309 a
310
311 $
312 b
313 $
314
315 c
316
317 Execute (multiline math):
318   let g:vim_markdown_math=1
319   syn off | syn on
320   AssertNotEqual SyntaxOf('a'), 'mkdMath'
321   AssertEqual SyntaxOf('b'), 'mkdMath'
322   AssertNotEqual SyntaxOf('c'), 'mkdMath'
323
324 Given markdown;
325 $ \sqrt{a}{b} $
326 $$ \frac{a}{b} $$
327
328 Execute (math tex highlighting):
329   let g:vim_markdown_math=0
330   syn off | syn on
331   AssertNotEqual SyntaxOf('sqrt'), 'texStatement'
332   AssertNotEqual SyntaxOf('frac'), 'texStatement'
333   let g:vim_markdown_math=1
334   syn off | syn on
335   AssertEqual SyntaxOf('sqrt'), 'texStatement'
336   AssertEqual SyntaxOf('frac'), 'texStatement'
337
338 # YAML frontmatter
339
340 Given markdown;
341 ---
342 a: b
343 ---
344
345 Execute (YAML frontmatter is controlled by the option):
346   AssertNotEqual SyntaxOf('a'), 'yamlBlockMappingKey'
347   let g:vim_markdown_frontmatter=1
348   syn off | syn on
349   AssertEqual SyntaxOf('a'), 'yamlBlockMappingKey'
350   let g:vim_markdown_frontmatter=0
351   syn off | syn on
352   AssertNotEqual SyntaxOf('a'), 'yamlBlockMappingKey'
353
354 Given markdown;
355
356 ---
357 a: b
358 ---
359
360 Execute (YAML frontmatter only works if it's the first thing in the file):
361   let g:vim_markdown_frontmatter=1
362   syn off | syn on
363   AssertNotEqual SyntaxOf('a'), 'yamlBlockMappingKey'
364
365 Given markdown;
366 ---
367 a: b
368 ---
369
370 ---
371
372 Execute (rules are not mistaken by YAML frontmatter delimiters):
373   let g:vim_markdown_frontmatter=1
374   syn off | syn on
375   AssertEqual SyntaxAt(5, 1), 'mkdRule'
376
377 # Header
378
379 Given markdown;
380 # #a
381 ccc
382
383 ## #b
384 ddd
385
386 Execute (header title starts with #):
387   AssertEqual SyntaxOf('a'), 'htmlH1'
388   AssertEqual SyntaxOf('b'), 'htmlH2'
389
390 Given markdown;
391 # h1 space
392
393 #h1 nospace
394
395 #  h1 2 spaces
396
397 # h1 trailing hash #
398
399 ## h2 space
400
401 ##h2 nospace
402
403 ## h2 trailing hash ##
404
405 ### h3 space
406
407 ###h3 nospace
408
409 ### h3 trailing hash ###
410
411 #### h4
412
413 ##### h5
414
415 ###### h6
416
417 Execute (atx headers):
418   AssertEqual SyntaxOf('# h1 space'), 'htmlH1'
419   AssertEqual SyntaxOf('#h1 nospace'), 'htmlH1'
420   AssertEqual SyntaxOf('#  h1 2 spaces'), 'htmlH1'
421   AssertEqual SyntaxOf('# h1 trailing hash #'), 'htmlH1'
422   AssertEqual SyntaxOf('## h2 space'), 'htmlH2'
423   AssertEqual SyntaxOf('##h2 nospace'), 'htmlH2'
424   AssertEqual SyntaxOf('## h2 trailing hash ##'), 'htmlH2'
425   AssertEqual SyntaxOf('### h3 space'), 'htmlH3'
426   AssertEqual SyntaxOf('###h3 nospace'), 'htmlH3'
427   AssertEqual SyntaxOf('### h3 trailing hash ###'), 'htmlH3'
428   AssertEqual SyntaxOf('#### h4'), 'htmlH4'
429   AssertEqual SyntaxOf('##### h5'), 'htmlH5'
430   AssertEqual SyntaxOf('###### h6'), 'htmlH6'
431
432 Given markdown;
433 # h1 before h2
434
435 ## h2 between h1s
436
437 # h1 after h2
438
439 Execute (atx headers relative positions):
440   AssertEqual SyntaxOf('# h1 before h2'), 'htmlH1'
441   AssertEqual SyntaxOf('## h2 between h1s'), 'htmlH2'
442   AssertEqual SyntaxOf('# h1 after h2'), 'htmlH1'
443
444 Given markdown;
445 setex h1
446 ========
447
448 setex h2
449 --------
450
451 setex h1 single punctuation
452 =
453
454 setex h1 punctuation longer than header
455 ================================
456
457 Execute (setex headers):
458   AssertEqual SyntaxOf('setex h1'), 'htmlH1'
459   AssertEqual SyntaxOf('^========$'), 'htmlH1'
460   AssertEqual SyntaxOf('setex h2'), 'htmlH2'
461   AssertEqual SyntaxOf('--------'), 'htmlH2'
462   AssertEqual SyntaxOf('setex h1 single punctuation'), 'htmlH1'
463   AssertEqual SyntaxOf('^=$'), 'htmlH1'
464   AssertEqual SyntaxOf('setex h1 punctuation longer than header'), 'htmlH1'
465   AssertEqual SyntaxOf('^================================$'), 'htmlH1'
466
467 Given markdown;
468 - not Setex
469 - because list
470
471 Execute (prevent list vs Setex confusion):
472   AssertNotEqual SyntaxOf('- not Setex'), 'htmlH2'
473   AssertNotEqual SyntaxOf('- becuase list'), 'htmlH2'
474
475 Given markdown;
476 setex h1 before atx
477 ===================
478
479 ## atx h2
480
481 ### atx h3
482
483 # atx h1
484
485 setex h2
486 ------------------
487
488 ### atx h3 2
489
490 Execute (mixed atx and setex headers):
491   AssertEqual SyntaxOf('setex h1 before atx'), 'htmlH1'
492   AssertEqual SyntaxOf('==================='), 'htmlH1'
493   AssertEqual SyntaxOf('## atx h2'), 'htmlH2'
494   AssertEqual SyntaxOf('### atx h3'), 'htmlH3'
495   AssertEqual SyntaxOf('# atx h1'), 'htmlH1'
496   AssertEqual SyntaxOf('setex h2'), 'htmlH2'
497   AssertEqual SyntaxOf('------------------'), 'htmlH2'
498
499 # List
500
501 Given markdown;
502 - a & b
503 1. c > d
504
505 Execute (& and > are not marked as htmlError in lists):
506   AssertEqual SyntaxOf('-'), 'mkdListItem'
507   AssertEqual SyntaxOf('1.'), 'mkdListItem'
508   AssertNotEqual SyntaxOf('&'), 'htmlError'
509   AssertNotEqual SyntaxOf('>'), 'htmlError'
510
511 # HTML
512
513 Given markdown;
514 a
515
516 <p>b</p>
517
518 - <span>c</span>
519
520 Execute (HTML tag in text):
521   AssertEqual SyntaxOf('p'), 'htmlTagName'
522   AssertEqual SyntaxOf('<p>'), 'htmlTag'
523   AssertEqual SyntaxOf('</p>'), 'htmlEndTag'
524   AssertEqual SyntaxOf('span'), 'htmlTagName'
525   AssertEqual SyntaxOf('<span>'), 'htmlTag'
526   AssertEqual SyntaxOf('</span>'), 'htmlEndTag'