Given markdown;
# a

Execute (Toc does not set nomodifiable on other files):
  " Sanity check.
  Assert &modifiable

  :Toc
  :lclose
  :edit a

  Assert &modifiable

Given markdown;
header 1
========

test

header 2
--------

test

### header 3

test

Execute (Toc setex headers):
  :Toc

Expect (setex headers):
  header 1
    header 2
      header 3

Given markdown;
# header 1

test

## header 2

test

### header 3

test

Execute (Toc atx headers):
  :Toc

Expect (atx headers):
  header 1
    header 2
      header 3

Given markdown;
ATX tests.

# h1 space

#h1 nospace

#  h1 2 spaces

# h1 trailing hash #

## h2 space

##h2 nospace

## h2 trailing hash ##

### h3 space

###h3 nospace

### h3 trailing hash ###

#### h4

##### h5

###### h6

---

Relative positions.

# h1 before h2

## h2 between h1s

# h1 after h2

---

Setex tests.

setex h1
========

setex h2
--------

setex h1 single punctuation
=

setex h1 punctuation longer than header
================================

Prevent list vs Setex confusion:

- not Setex
- because list

---

Mixed tests.

setex h1 before atx
===================

## atx h2

### atx h3

# atx h1

setex h2
------------------

### atx h3 2

Execute (Toc multiple headers):
  :Toc

Expect (multiple headers):
  h1 space
  h1 nospace
  h1 2 spaces
  h1 trailing hash
    h2 space
    h2 nospace
    h2 trailing hash
      h3 space
      h3 nospace
      h3 trailing hash
        h4
          h5
            h6
  h1 before h2
    h2 between h1s
  h1 after h2
  setex h1
    setex h2
  setex h1 single punctuation
  setex h1 punctuation longer than header
  setex h1 before atx
    atx h2
      atx h3
  atx h1
    setex h2
      atx h3 2

Execute:
  :lclose

Given markdown;
# header 1

## header 2

### header 3

Execute (Toc cursor on the current header):
  normal! G
  :Toc
  AssertEqual line('.'), 3
  :lclose