# VimwikiRenameFile
# Related to link, file navigation
# Many commands are made with Do: They block with Execute


# Create directories I remove at end {{{1
##########################################

Execute (Mkdir dir1 dir2 dir11 dir12):
  call system("mkdir $HOME/testmarkdown/dir1")
  call system("mkdir $HOME/testmarkdown/dir1/dir11")
  call system("mkdir $HOME/testmarkdown/dir1/dir12")
  call system("mkdir $HOME/testmarkdown/dir2")



Do(Link with / are relative to root #617):
  :edit $HOME/testmarkdown/test.md\<Cr>
  :Log 'Is this wiki 2'\<Cr>
  :AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')\<Cr>
  :Log 'Editing'\<Cr>
  i/dir1/old_name\<Esc>
  \<CR>\<CR>
  :AssertEqual 'old_name', expand('%:t:r')\<Cr>
  :call WriteMe()\<Cr>
  :VimwikiRenameFile new_name\<Cr>
  :AssertEqual 'new_name', expand('%:t:r')\<Cr>
  :edit $HOME/testmarkdown/test.md\<Cr>
  :AssertEqual '[dir1 old_name](/dir1/new_name)', getline(1)\<Cr>


# TEST TRANSDIRECTORY AND ARGUMENT {{{1
# NEW FEATURE #926

# Create smaller unit {{{2

# we stick all along with these 3 files,
# Follow them !
Execute (Create 3 files):
  edit $HOME/testmarkdown/Test-Rename-zzz.md
  call WriteMe()
  edit $HOME/testmarkdown/dir1/dir11/Test-Rename.md
  call WriteMe()
  edit $HOME/testmarkdown/Test-Rename-Completion.md
  call WriteMe()


Do (Testing Old buffer has been wiped out {{{2):
  :edit $HOME/testmarkdown/Test-Rename-Completion.md\<Cr>
  :Log 'Get current Buffer'\<Cr>
  :let buf_old = bufnr('%')\<Cr>
  :Log 'Is this wiki 2'\<Cr>
  :AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')\<Cr>
  :Log 'Delete for loosers'\<Cr>
  :call DeleteFile('$HOME/testmarkdown/Test-Rename-new1.md')\<Cr>
  :Log 'Rewrite ...'\<Cr>
  :call WriteMe()\<Cr>
  :Log 'Rename 1'\<Cr>
  :VimwikiRenameFile Test-Rename-new1\<Cr>
  :Log 'Assert 1'\<Cr>
  :AssertEqual 'Test-Rename-new1', expand('%:t:r')\<Cr>
  :Log 'Rename 2'\<Cr>
  :VimwikiRenameFile Test-Rename-Completion\<Cr>
  :Log 'Assert 2'\<Cr>
  :AssertEqual expand('%'), $HOME . '/testmarkdown/Test-Rename-Completion.md'\<Cr>

Do (Testing Completion {{{2):
# Rename and test (zzz)
  :VimwikiRenameFile Test-Rename-z\<C-l>1\<Cr>
  :AssertEqual $HOME . '/testmarkdown/Test-Rename-zzz1.md', expand('%')\<CR>\<Esc>
# Restore old name
  :call WriteMe()\<Cr>
  :VimwikiRenameFile Test-Rename-zzz\<Cr>


Do (Testing transforward {{{2):
  :Log 'Forward: root -> dir1/dir11 {{{3'\<Cr>
# Create dir1/dir11/Test-Rename and link to it
  :edit $HOME/testmarkdown/Test-Rename-Completion.md\<Cr>
  ggdG
  idir1/dir11/Test-Rename.md\<Esc>
  \<Cr>\<Cr>
  :VimwikiRenameFile ../Test-Rename-2\<Cr>
  :AssertEqual expand('%'), $HOME . '/testmarkdown/dir1/Test-Rename-2.md'\<CR>\<Esc>

# See what happend in root
  :call WriteMe()\<Cr>
  :edit $HOME/testmarkdown/Test-Rename-Completion.md\<Cr>
  :AssertEqual getline(1), '[dir1 dir11 Test Rename](dir1/Test-Rename-2.md)'\<Cr>

  :Log 'Backward dir1/dir11 -> root {{{3'\<Cr>
# See what happend in dir1/dir11
# I am in root so pressing Enter sends me to dir1/dir11
  \<Cr>
# Write forward path
  dd
  i../Test-Rename-Completion\<Esc>
# Convert it to link
  0\<Cr>\<Cr>

# Now in root
  :AssertEqual $HOME . '/testmarkdown/Test-Rename-Completion.md', expand('%')\<Cr>
  :VimwikiRenameFile dir1/Test-Rename-Completion-2\<Cr>
  :Log 'Rename -> dir1/Test...{{{3'\<Cr>
  :AssertEqual $HOME . '/testmarkdown/dir1/Test-Rename-Completion-2.md', expand('%')\<Cr>


Execute (Delete smaller unit changed {{{2):
  call DeleteFile('$HOME/testmarkdown/Test-Rename-new1.md')
  call DeleteFile('$HOME/testmarkdown/Test-Rename-zzz.md')
  call DeleteFile('$HOME/testmarkdown/dir1/Test-Rename-Completion_2.md')
  call DeleteFile('$HOME/testmarkdown/dir1/Test-Rename-2.md')


# VimwikiRename Test same directory {{{1
# Old big conf, from bad unit test design
# Changing file in a single dir
# Feel free to modify but as long as it works
# I delay the cleaning
####################################

Given vimwiki (Void):


Execute (Create Test-Rename -> dir1/dir11/in_dir11.md and dir1/dir12/in_dir12.md and dir2/in_dir2.md):
  edit $HOME/testmarkdown/Test-Rename.md
  AssertEqual $HOME . '/testmarkdown/Test-Rename.md', expand('%')
  AssertEqual 'markdown', vimwiki#vars#get_wikilocal('syntax')
  AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')
  call append(0, ['# Test Rename', 'in_root.md', 'dir1/dir11/in_dir11.md', 'dir1/dir12/in_dir12.md', 'dir2/in_dir2.md'])
  call WriteMe()

Do (Create in_root):
  :Log 'Open Test-Rename.md'\<CR>
  :edit $HOME/testmarkdown/Test-Rename.md\<CR>
  :AssertEqual $HOME . '/testmarkdown/Test-Rename.md', expand('%')\<CR>\<Esc>

  :Log 'Delete last line (easyer latter checks without trailing spaces)'\<CR>
  Gdd

  :Log 'Open in_root.md'\<CR>
  gg
  j\<CR>
  j\<CR>
  j\<CR>
  j\<CR>
  ggj0y$
  :AssertEqual '[in_root](in_root.md)', @"\<CR>
  0\<CR>
  :AssertEqual $HOME . '/testmarkdown/in_root.md', expand('%')\<CR>

  :Log 'Add link in_root.md -> dir1/dir11/in_dir11'\<CR>
  ggi# Title in root\<CR>\<Esc>
  idir1/dir11/in_dir11\<Esc>
  :call WriteMe()\<CR>
  :AssertEqual $HOME . '/testmarkdown/in_root.md', expand('%')\<CR>

  :Log 'Open in_dir11.md: creating dirs'\<CR>
  ggj"ay$
  :AssertEqual 'reg dir1/dir11/in_dir11', 'reg ' . @a\<CR>
  0\<CR>\<CR>
  :AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11.md', 'file ' . expand('%')\<CR>

  :Log 'One backspace for fun'\<CR>
  \<BS>
  :AssertEqual 'file ' . $HOME . '/testmarkdown/in_root.md', 'file ' . expand('%')\<CR>


Do (Create dir_11 -> dir_11):
  :edit $HOME/testmarkdown/dir1/dir11/in_dir11_fix.md\<CR>

  :Log 'Add link in_dir11_fix.md -> in_dir11'\<CR>
  ggi# Title in dir11 fix\<CR>\<Esc>
  iin_dir11\<Esc>
  :call WriteMe()\<CR>

  :Log 'Open in_dir11.md: creating dirs'\<CR>
  ggj"ay$
  :AssertEqual 'reg in_dir11', 'reg ' . @a\<CR>
  0\<CR>\<CR>
  y\<CR>
  :AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11.md', 'file ' . expand('%')\<CR>

  :Log 'One backspace for fun'\<CR>
  \<BS>
  :AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11_fix.md', 'file ' . expand('%')\<CR>


Execute (Fill in_dir11 content):
  edit $HOME/testmarkdown/dir1/dir11/in_dir11.md
  call append(0, ['# Title in_dir11', '[dir2 link](../../dir2/in_dir2.md)'])
  call WriteMe()


# Rename local {{{1
###################

Do (RenameLink in_dir11 -> in_dir11_new):
  :edit $HOME/testmarkdown/dir1/dir11/in_dir11.md\<CR>
  :AssertEqual 'file ' . $HOME . '/testmarkdown/dir1/dir11/in_dir11.md', 'file ' . expand('%')\<CR>
  :AssertEqual 1, vimwiki#vars#get_bufferlocal('wiki_nr')\<CR>

  :Log 'Rename'\<CR>
  :call WriteMe()\<CR>
  :VimwikiRenameFile\<CR>
  y\<CR>
  in_dir11_new\<CR>
  :call WriteMe()\<Cr>

  :Log 'Append filename'\<CR>
  :call append('$', [expand('%')])\<CR>


Expect(With new filename at the end):
  # Title in_dir11
  [dir2 link](../../dir2/in_dir2.md)

  /home/vimtest/testmarkdown/dir1/dir11/in_dir11_new.md


Execute (edit in_dir11_fix):
  edit $HOME/testmarkdown/dir1/dir11/in_dir11_fix.md

Expect(Link to in_dir11_new):
  # Title in dir11 fix
  [in_dir11](in_dir11_new)


Execute (edit Test-Rename.md):
  edit $HOME/testmarkdown/Test-Rename.md


Expect (Link to in_dir11_new):
  # Test Rename
  [in_root](in_root.md)
  [dir1 dir11 in_dir11](dir1/dir11/in_dir11_new.md)
  [dir1 dir12 in_dir12](dir1/dir12/in_dir12.md)
  [dir2 in_dir2](dir2/in_dir2.md)


Do (in_dir2 -> in_dir2_new):
  :edit $HOME/testmarkdown/dir2/in_dir2.md\<CR>

  :Log 'Append filename'\<CR>
  :call append('$', [expand('%')])\<CR>

  :Log 'Rename'\<CR>
  :call WriteMe()\<CR>
  :VimwikiRenameFile\<CR>
  y\<CR>
  in_dir2_new\<CR>
  :call WriteMe()\<Cr>

  :Log 'Append filename'\<CR>
  :call append('$', [expand('%')])\<CR>


Expect (old and new filenames):

  /home/vimtest/testmarkdown/dir2/in_dir2.md
  /home/vimtest/testmarkdown/dir2/in_dir2_new.md

Execute (edit Test-Rename.md):
  edit $HOME/testmarkdown/Test-Rename.md


Expect (Link to in_dir11_new):
  # Test Rename
  [in_root](in_root.md)
  [dir1 dir11 in_dir11](dir1/dir11/in_dir11_new.md)
  [dir1 dir12 in_dir12](dir1/dir12/in_dir12.md)
  [dir2 in_dir2](dir2/in_dir2_new.md)


Execute (edit in_dir11.md):
  edit $HOME/testmarkdown/dir1/dir11/in_dir11_new.md


Expect (Link to in_dir2_new):
  # Title in_dir11
  [dir2 link](../../dir2/in_dir2_new.md)

  /home/vimtest/testmarkdown/dir1/dir11/in_dir11_new.md


Execute (Clean dir1 and dir2):
  Log "End: Clean"
  call DeleteHiddenBuffers()
  call system('rm $HOME/testmarkdown/Test-Rename.md')
  call system('rm $HOME/testmarkdown/in_root.md')
  call system('rm -r $HOME/testmarkdown/dir1')
  call system('rm -r $HOME/testmarkdown/dir2')


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