# Link internal to a file
#
# See: generate_toc.vim
#
# See issue #666 for anchor support (then internal links)
# Preambule set file onces and for all {{{1
# Otherwise the bash script is freezing


### Wiki {{{1
###############


### Markdown {{{1
###############


Given vimwiki (a):
  a

Execute (Set filename wiki_test.md):
  file wiki_test.md

Expect (a):
  a


Given vimwiki (VimwikiTOC with link and number {{{1):
  [link1](#i-v-p-741528)
  [link2](#i-v-p-741528-2)

  # I [V p](h) (7.415.28)

  # I [V p](h) 741.528

Execute (Set syntax markdown):
  call SetSyntax('markdown')

Expect('No change'):
  [link1](#i-v-p-741528)
  [link2](#i-v-p-741528-2)

  # I [V p](h) (7.415.28)

  # I [V p](h) 741.528

Do (Enter link):
  gg\<Cr>
  A__HERE1__\<Esc>
  ggj\<Cr>
  A__HERE2__\<Esc>
  :AssertEqual 'wiki_test.md', expand('%')\<Cr>

Expect(Some suffix added after headings):
  [link1](#i-v-p-741528)
  [link2](#i-v-p-741528-2)

  # I [V p](h) (7.415.28)__HERE1__

  # I [V p](h) 741.528__HERE2__

Given vimwiki (VimwikiTOC is broken against headers with link #182 {{{1):
  [A link B](#a-link-b)
  [tlink](#tlink)
  [7.4.1528](#741528)
  [link (333)](#link-333)

  # A [link](anything here) B

  # t[link](anything here)

  ## 7.4.1528

  #### [link]() (333)


Execute (Set syntax markdown):
  call SetSyntax('markdown')


Do (Enter link):
  gg\<Cr>
  A__HERE1__\<Esc>
  ggj\<Cr>
  A__HERE2__\<Esc>
  ggjj\<Cr>
  A__HERE3__\<Esc>
  ggjjj\<Cr>
  A__HERE4__\<Esc>
  :AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')\<Cr>


Expect vimwiki (Good anchor with link navigation):
  [A link B](#a-link-b)
  [tlink](#tlink)
  [7.4.1528](#741528)
  [link (333)](#link-333)

  # A [link](anything here) B__HERE1__

  # t[link](anything here)__HERE2__

  ## 7.4.1528__HERE3__

  #### [link]() (333)__HERE4__



# Link to anchor in SetExt {{{1
# Like that
# -----
# Issue: #209

Given vimwiki (Anchor SetExt):
  [jump](#frst-one)

  F!rst    One
  =========

Execute (Set filename wiki_test.md):
  call SetSyntax('markdown')

Do (Enter link):
  \<Cr>
  A__HERE__\<Esc>

Expect (Cursor jumped SetExt):
  [jump](#frst-one)

  F!rst    One__HERE__
  =========

Given vimwiki (Bad Anchor SetExt):
  [jump](#frst-one)

  F!rst    One

Execute (Set filename wiki_test.md):
  call SetSyntax('markdown')

Do (Enter link):
  \<Cr>
  A__HERE__\<Esc>

Expect (Cursor stayed (not jumped) SetExt):
  [jump](#frst-one)__HERE__

  F!rst    One

# Link to anchor with spaces {{{1
# PR #840
# Issues: #831

Given vimwiki (Internal links zith spaces):
  [Any ! apparent name @#$](#basic-heading-many-spaces)
  One line here

  ##    Basic  HeAding Many   SpacES

  One line here

Execute (Set filename wiki_test.md):
  call SetSyntax('markdown')

Do (Enter link):
  \<Cr>
  A__HERE__\<Esc>

Expect (Cursor at heading position):
  [Any ! apparent name @#$](#basic-heading-many-spaces)
  One line here

  ##    Basic  HeAding Many   SpacES__HERE__

  One line here

Execute (Clear wiki jumps (alias: prev_links)):
  call vimwiki#vars#set_bufferlocal('prev_links', [])


# Before {{{1

Given vimwiki (Internal links + one link to filenew):
  # Contents

    - [Test1](#Test1)
    - [Test2](#Test2)

  # Test1

    - [Test1](#Test1)
    - [Test2](#Test2)
    - [filenew](filenew)

  # Test2

    - [Test1](#Test1)
    - [Test2](#Test2)
    - [filenew](filenew)

Execute (Set filename wiki_test.md):
  call SetSyntax('markdown')

Execute (Set filename wiki_test.md):
  file wiki_test.md

Do (Navigate with <Tab>):
  A more Contents\<Esc>
  \<Tab>
  \<Enter>
  A more Test1\<Esc>
  \<Tab>
  \<Tab>
  \<Enter>
  A more Test2\<Esc>
  :AssertEqual 'wiki_test.md', expand('%')\<Cr>

Expect (Content added to titles):
  # Contents more Contents

    - [Test1](#Test1)
    - [Test2](#Test2)

  # Test1 more Test1

    - [Test1](#Test1)
    - [Test2](#Test2)
    - [filenew](filenew)

  # Test2 more Test2

    - [Test1](#Test1)
    - [Test2](#Test2)
    - [filenew](filenew)

Do (Navigate with <Tab> and <Enter> and come back with <Bs>):
  \<Tab>
  \<Enter>
# Cursor at Test1
  \<Tab>
  \<Tab>
  \<Enter>
# Cursor at Test2
  \<Tab>
  \<Tab>
  \<Tab>
# Debugging
  :redir @a\<Cr>
  :nmap <Bs>\<Cr>
  :redir END\<Cr>
# :fixdel\<Cr>
  :AssertEqual 'wiki_test.md', expand('%')\<Cr>
#  :AssertEqual 'toto', @a\<Cr>
# Cursor at Test2/filenew
  A not yet\<Esc>\<Esc>
# Debug
  :Log 'Debugging 1, cursor position list'\<Cr>
  :Log vimwiki#vars#get_bufferlocal('prev_links')\<Cr>
#  :VimwikiGoBackLink\<Cr>
#  :call vimwiki#base#go_back_link()\<Cr>
  \<Bs>
  :Log 'Debugging 2, cursor position list'\<Cr>
  :Log vimwiki#vars#get_bufferlocal('prev_links')\<Cr>
# Cursor at Test1/test2
  A near Test1/test2
  \<Esc>
  \<Bs>
# Cursor at Contents/test1
  A near Contents/test1
  \<Esc>

Expect (Vimwiki links):
  # Contents

    - [Test1](#Test1) near Contents/test1
    - [Test2](#Test2)

  # Test1

    - [Test1](#Test1)
    - [Test2](#Test2) near Test1/test2
    - [filenew](filenew)

  # Test2

    - [Test1](#Test1)
    - [Test2](#Test2)
    - [filenew](filenew) not yet


###################################
###################################
###################################
###################################
# Commented out as butsetvar of the var prev_links is removing the list info at change of file for old Vim




#Do (Navigate with <Tab> comeback with <Bs> from filenew):
#  \<Tab>
#  A first shot\<Esc>
#  0\<Tab>
## Cursor at Contents/test1
#  \<Cr>
#  \<Tab>
#  \<Tab>
#  A first shot\<Esc>
#  0\<Tab>
## Cursor at Test1/test2
#  \<Cr>
#  G
## Cursor at Test2/filenew
#  A first shot\<Esc>
#  0\<Tab>
## Cursor at Test2/filenew
#  \<Cr>
## Cursor in filenew (a new file)
#  A anything in filenew: empirically it does not count\<Esc>
## Debug back
#  :Log 'Debugging back 1, cursor position list'\<Cr>
#  :Log vimwiki#vars#get_bufferlocal('prev_links')\<Cr>
#  :Log expand('%:p')\<Cr>
#  :Log expand('/tmp/vader_wiki/testplugin/wiki_test.md')\<Cr>
#  :Log filereadable('/tmp/vader_wiki/testplugin/wiki_test.md')\<Cr>
#  \<Bs>
#  :Log 'Debugging back 2, cursor position list'\<Cr>
#  :Log vimwiki#vars#get_bufferlocal('prev_links')\<Cr>
#  :Log expand('%')\<Cr>
## Cursor at Test2/filenew
#  \<Bs>
## Cursor at Test1/test2
#  \<Bs>
## Cursor at Contents/test1
#  A second shot
#
#Expect (Just Contents/test1 got the second shot):
#  # Contents
#
#    - [Test1](#Test1) first shot second shot
#    - [Test2](#Test2)
#
#  # Test1
#
#    - [Test1](#Test1)
#    - [Test2](#Test2) first shot
#    - [filenew](filenew)
#
#  # Test2
#
#    - [Test1](#Test1)
#    - [Test2](#Test2)
#    - [filenew](filenew) first shot

Execute (Delete filenew buffer):
  call DeleteFile('/testplugin/filenew.md')

Do (Navigate with <Tab> comeback with <Bs> too far):
  \<Tab>
# Cursor at Contents/test1
  \<Cr>
  \<Tab>
  \<Tab>
# Cursor at Test1/test2
  \<Cr>
  \<Tab>
# Cursor at Test2/test1
  \<Cr>
  \<Tab>
  \<Tab>
# Cursor at Test1/test2
  \<Cr>
  A first test2\<Esc>
  \<Tab>
# Cursor at Test2/test1
  \<Cr>
  A first test1\<Esc>
# Back
  \<Bs>
# Cursor at Test2/test1
  A second test2/test1\<Esc>
  \<Bs>
# Cursor at Test1/test2
  A second test1/test2\<Esc>
  \<Bs>
# Cursor at Test2/test1
  \<Bs>
# Cursor at Test1/test2
  \<Bs>
# Cursor at Contents/test1
# Finished
  \<Bs>
  \<Bs>
  \<Bs>
  \<Bs>
  A 1\<Esc>
  \<Bs>
  A 2\<Esc>
  \<Bs>
  A 3\<Esc>
  \<Bs>
  A 4\<Esc>

Expect (After too many <Bs>, cursor stays at the first <Cr> spot in first file: Contents/test1):
  # Contents

    - [Test1](#Test1) 1 2 3 4
    - [Test2](#Test2)

  # Test1 first test1

    - [Test1](#Test1)
    - [Test2](#Test2) second test1/test2
    - [filenew](filenew)

  # Test2 first test2

    - [Test1](#Test1) second test2/test1
    - [Test2](#Test2)
    - [filenew](filenew)

Given vimwiki (link to self):
  - [Bad link](Very bad.html)
  - [My own file](wiki_test)
  - [Test1](#Test1)
  - [Test2](#Test2)

Do (Follow link to self and append chars):
  \<Tab>
  \<Tab>
  \<Cr>
  a this_is_18_chars \<Esc>

Expect (Some chars appended at self link):
  - [Bad link](Very bad.html)
  - [ this_is_18_chars My own file](wiki_test)
  - [Test1](#Test1)
  - [Test2](#Test2)

# vim: foldmethod=marker foldlevel=30 sw=2
