" Tests atx and setext folding, and :Toc.

Before:
  source ../after/ftplugin/markdown.vim

After:
  setlocal foldexpr=0
  setlocal foldmethod=manual

Given markdown;
# chap 1

hello
world

```bash
# some bash scripting
pwd

# this is another comment
# other
echo "foo"
```

## chap 1.1

- dog
- cat

~~~~bash
mkdir foo
# comment in ~
~~~~

### chap 1.1.1

- dragons
- fenixs

# chap 2

another

## chap 2.1

- uk
- japan
- china


# chap 3

nothing here

chap 4
======

setext are evil

chap 4.1
--------

evil indeed

````bash
# get system info
uname -a
````

Execute (fold level):
  AssertEqual foldlevel(1), 0, '# chap 1'
  AssertEqual foldlevel(3), 1, 'hello'
  AssertEqual foldlevel(6), 1, '```bash'
  AssertEqual foldlevel(7), 1, '# some bash scripting'
  AssertEqual foldlevel(15), 1, '## chap 1.1'
  AssertEqual foldlevel(21), 2, 'mkdir foo'
  AssertEqual foldlevel(22), 2, 'comment in ~'
  AssertEqual foldlevel(25), 2, '### chap 1.1.1'
  AssertEqual foldlevel(27), 3, '- dragons'
  AssertEqual foldlevel(30), 1, '# chap 2'
  AssertEqual foldlevel(32), 1, 'another'
  AssertEqual foldlevel(34), 1, '# chap 2.1'
  AssertEqual foldlevel(37), 2, '- japan'
  AssertEqual foldlevel(41), 1, '# chap 3'
  AssertEqual foldlevel(45), 1, 'chap 4\n======'
  AssertEqual foldlevel(48), 1, 'setext are evil'
  AssertEqual foldlevel(50), 2, 'chap 4.1\n------'

Execute (fold text result):
  AssertEqual foldtextresult(2), '+-- 28 lines: hello'
  AssertEqual foldtextresult(31), '+-- 10 lines: another'
  AssertEqual foldtextresult(42), '+--  3 lines: nothing here'
  AssertEqual foldtextresult(45), '+-- 14 lines: chap 4'

Execute (fold level with setting):
  let g:vim_markdown_folding_level = 2
  source ../after/ftplugin/markdown.vim
  AssertEqual foldlevel(1), 0, '# chap 1'
  AssertEqual foldlevel(3), 1, 'hello'
  AssertEqual foldlevel(6), 1, '```bash'
  AssertEqual foldlevel(7), 1, '# some bash scripting'
  AssertEqual foldlevel(15), 0, '## chap 1.1'
  AssertEqual foldlevel(21), 2, 'mkdir foo'
  AssertEqual foldlevel(22), 2, 'comment in ~'
  AssertEqual foldlevel(25), 2, '### chap 1.1.1'
  AssertEqual foldlevel(27), 3, '- dragons'
  AssertEqual foldlevel(30), 0, '# chap 2'
  AssertEqual foldlevel(32), 1, 'another'
  AssertEqual foldlevel(34), 0, '# chap 2.1'
  AssertEqual foldlevel(37), 2, '- japan'
  AssertEqual foldlevel(41), 0, '# chap 3'
  AssertEqual foldlevel(45), 1, 'chap 4\n======'
  AssertEqual foldlevel(48), 1, 'setext are evil'
  AssertEqual foldlevel(50), 1, 'chap 4.1\n------'
  let g:vim_markdown_folding_level = 0

Execute (check TOC):
  :Toc
  :lclose
  let res = getloclist(0)
  let elem = res[0]
  AssertEqual elem.lnum, 1
  AssertEqual elem.text, '# chap 1'
  let elem = res[1]
  AssertEqual elem.lnum, 15
  AssertEqual elem.text, '## chap 1.1'
  let elem = res[2]
  AssertEqual elem.lnum, 25
  AssertEqual elem.text, '### chap 1.1.1'
  let elem = res[3]
  AssertEqual elem.lnum, 30
  AssertEqual elem.text, '# chap 2'
  let elem = res[4]
  AssertEqual elem.lnum, 34
  AssertEqual elem.text, '## chap 2.1'
  let elem = res[5]
  AssertEqual elem.lnum, 41
  AssertEqual elem.text, '# chap 3'
  let elem = res[6]
  AssertEqual elem.lnum, 45
  AssertEqual elem.text, 'chap 4'
  let elem = res[7]
  AssertEqual elem.lnum, 50
  AssertEqual elem.text, 'chap 4.1'

Given markdown;
---
layout: article
title: A test of the heading folding when there is YAML frontmatter
tags: markdown yaml vim-markdown
---
body

heading
-------

Execute (fold level of yaml front matter):
  let g:vim_markdown_frontmatter = 1
  source ../after/ftplugin/markdown.vim
  AssertEqual foldlevel(1), 0, '---'
  AssertEqual foldlevel(2), 0, 'layout: article'
  AssertEqual foldlevel(4), 0, 'tags: markdown yaml vim-markdown'
  AssertEqual foldlevel(5), 0, '---'
  AssertEqual foldlevel(6), 0, 'body'
  AssertEqual foldlevel(8), 2, 'heading'
  AssertEqual foldlevel(9), 2, '-------'
  unlet g:vim_markdown_frontmatter

Execute (check Toc of yaml front matter):
  let g:vim_markdown_frontmatter = 1
  :Toc
  :lclose
  let res = getloclist(0)
  AssertEqual len(res), 1
  let elem = res[0]
  AssertEqual elem.lnum, 8
  AssertEqual elem.text, 'heading'
  unlet g:vim_markdown_frontmatter