Fix resolution of leading-slash links, add link tests (#1108)

Hopefully this solves #1084, "Page links with leading slash lead to a
file in working directory, not a page at the root of the wiki", introduced
in 850aace.

It also adds a set of tests for different kinds of wiki links:

  - api_base_resolve_link.vader
  - link_syntax_markdown.vader
  - link_syntax_vimwiki.vader

Includes some fixes for locally-failing tests, removes a test from
test/map.vader and comments out test/config_vars.vader entirely for the
moment.

Code by : Brennen Bearnes <code@p1k3.com>
This commit is contained in:
Brennen Bearnes
2021-04-06 20:09:37 -06:00
committed by GitHub
parent 618893be00
commit f396e8a494
17 changed files with 484 additions and 124 deletions
+9 -6
View File
@@ -187,19 +187,20 @@ function! vimwiki#base#resolve_link(link_text, ...) abort
endif endif
endif endif
" Check if absolute or relative path
" TODO Clean that => just one call
let is_absolute = 0
if vimwiki#path#is_absolute(link_text) if vimwiki#path#is_absolute(link_text)
let is_absolute = 1
let link_text = expand(link_text) let link_text = expand(link_text)
endif endif
" This gets set for leading // links, which point to an absolute path to a
" wiki page (minus the .md or .wiki extension):
let is_absolute_wiki_link = 0
if is_wiki_link && link_text[0] ==# '/' if is_wiki_link && link_text[0] ==# '/'
if link_text !=# '/' if link_text !=# '/'
if link_text !=# '//' && link_text[0:1] ==# '//' if link_text !=# '//' && link_text[0:1] ==# '//'
let link_text = resolve(expand(link_text)) let link_text = resolve(expand(link_text))
let link_text = link_text[2:] let link_text = link_text[2:]
let is_absolute = 1 let is_absolute_wiki_link = 1
else else
let link_text = link_text[1:] let link_text = link_text[1:]
endif endif
@@ -246,7 +247,9 @@ function! vimwiki#base#resolve_link(link_text, ...) abort
endif endif
endif endif
if is_absolute if is_absolute_wiki_link
" Leading // link to the absolute path of a wiki page somewhere on the
" filesystem.
let root_dir = '' let root_dir = ''
elseif !is_relative || link_infos.index != source_wiki elseif !is_relative || link_infos.index != source_wiki
let root_dir = vimwiki#vars#get_wikilocal('path', link_infos.index) let root_dir = vimwiki#vars#get_wikilocal('path', link_infos.index)
+1 -1
View File
@@ -213,7 +213,7 @@ function! vimwiki#path#is_absolute(path) abort
let res += a:path =~# '\m^/\|\~/' let res += a:path =~# '\m^/\|\~/'
endif endif
" Do not prepent root_path to scp files " Do not prepend root_path to scp files
" See: https://vim.fandom.com/wiki/Editing_remote_files_via_scp_in_vim " See: https://vim.fandom.com/wiki/Editing_remote_files_via_scp_in_vim
let res += a:path =~# '\m^scp:' let res += a:path =~# '\m^scp:'
+8 -2
View File
@@ -1054,13 +1054,17 @@ absolute to the wiki root directory, that is, the link [[/index]] always opens
the file /path/to/your/wiki/index.wiki, no matter in which subdirectory you the file /path/to/your/wiki/index.wiki, no matter in which subdirectory you
are currently in. are currently in.
If you want an absolute path in your local box you can prefix the path If you want to use an absolute path to a wiki page on your local filesystem,
with // > you can prefix the path with // >
[[//absolute_path]] [[//absolute_path]]
For example: > For example: >
[[///tmp/in_root_tmp]] [[///tmp/in_root_tmp]]
[[//~/in_home_dir]] [[//~/in_home_dir]]
[[//$HOME/in_home_dir]] [[//$HOME/in_home_dir]]
In a wiki with the default wiki extension, this link: >
[[///tmp/foo]]
Links to the file: >
/tmp/foo.wiki
Links to subdirectories inside the wiki directory are also supported. They Links to subdirectories inside the wiki directory are also supported. They
end with a "/": > end with a "/": >
@@ -3894,6 +3898,7 @@ Contributors and their Github usernames in roughly chronological order:
- Yifan Hu (@yhu266) - Yifan Hu (@yhu266)
- Levi Rizki Saputra (@levirs565) - Levi Rizki Saputra (@levirs565)
- Fergus Collins (@C-Fergus) - Fergus Collins (@C-Fergus)
- Brennen Bearnes
============================================================================== ==============================================================================
16. Changelog *vimwiki-changelog* 16. Changelog *vimwiki-changelog*
@@ -3955,6 +3960,7 @@ Changed:~
Removed:~ Removed:~
Fixed:~ Fixed:~
* PR #1108: Fix resolution of leading-slash page links, add link tests
* Allow title values with quotes * Allow title values with quotes
* Enable strikethrough for Neovim * Enable strikethrough for Neovim
* Issue #1029: Fix: error loading plugin when lang uses comma instead of * Issue #1029: Fix: error loading plugin when lang uses comma instead of
+42
View File
@@ -0,0 +1,42 @@
# Test vimwiki#base#resolve_link for various inputs.
Execute (Resolve link for index):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('index')
AssertEqual 'wiki0', link_infos.scheme
AssertEqual $HOME . '/testwiki/index.wiki', link_infos.filename
Execute (Resolve link for /index - absolute path from wiki root):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('/index')
AssertEqual 'wiki0', link_infos.scheme
AssertEqual '', link_infos.anchor
AssertEqual $HOME . '/testwiki/index.wiki', link_infos.filename
Execute (Resolve link for ///tmp/some_page - absolute path to standalone page):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('///tmp/some_page')
AssertEqual '/tmp/some_page.wiki', link_infos.filename
Execute (Resolve link for //~/testwiki/index - page in wiki under homedir):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('//~/testwiki/index')
AssertEqual $HOME . '/testwiki/index.wiki', expand(link_infos.filename)
Execute (Resolve link for diary:2020-01-01 - diary page):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('diary:2020-01-01')
AssertEqual $HOME . '/testwiki/diary/2020-01-01.wiki', link_infos.filename
Execute (Resolve link to link_syntax/nested - page in subdirectory):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('link_syntax/nested')
AssertEqual $HOME . '/testwiki/link_syntax/nested.wiki', link_infos.filename
Execute (Resolve relative link to ./link_syntax/nested - page in subdirectory):
VimwikiIndex 1
let link_infos = vimwiki#base#resolve_link('link_syntax/nested')
AssertEqual $HOME . '/testwiki/link_syntax/nested.wiki', link_infos.filename
Execute (Clean):
call ReloadVimwiki()
+71 -69
View File
@@ -1,74 +1,76 @@
# Test variable management (should be small) # Test variable management (should be small)
# Issue #980 # Issue #980
#
# brennen commenting these out 2021-03-29 per @tinmarino:
# https://github.com/vimwiki/vimwiki/pull/1108#issuecomment-806775805
# Given txt (txt):
Given txt (txt): # txt
txt #
# Execute (VimWei vars #980):
Execute (VimWei vars #980): # " Set
" Set # call UnloadVimwiki()
call UnloadVimwiki() # let wiki = {}
let wiki = {} # let wiki.name = 'ChenWei 🦊VimwikiMd @^%@!*#&^'
let wiki.name = 'ChenWei 🦊VimwikiMd @^%@!*#&^' # let wiki.path = $HOME . '/testmarkdown'
let wiki.path = $HOME . '/testmarkdown' # let wiki.ext = '.md'
let wiki.ext = '.md' # let wiki.syntax = 'markdown'
let wiki.syntax = 'markdown' # let wiki.nested_syntaxes = {'python': 'python'}
let wiki.nested_syntaxes = {'python': 'python'} #
# " Make other tests crash
" Make other tests crash # "let wiki.links_space_char = '_'
"let wiki.links_space_char = '_' # "let wiki.list_margin = 0
"let wiki.list_margin = 0 # "let wiki.auto_toc = 1
"let wiki.auto_toc = 1 # "let wiki.auto_tags = 1
"let wiki.auto_tags = 1 # "let wiki.auto_generate_tags = 1
"let wiki.auto_generate_tags = 1 #
# let g:vimwiki_list = [wiki]
let g:vimwiki_list = [wiki] # let g:vimwiki_ext2syntax = {'.md': 'markdown'}
let g:vimwiki_ext2syntax = {'.md': 'markdown'} # let g:vimwiki_global_ext = 1
let g:vimwiki_global_ext = 1 # let g:vimwiki_autowriteall = 1
let g:vimwiki_autowriteall = 1 # let g:vimwiki_auto_chdir = 1
let g:vimwiki_auto_chdir = 1 # let g:vimwiki_folding = 'expr'
let g:vimwiki_folding = 'expr' # call LoadVimwiki()
call LoadVimwiki() #
# " Log
" Log # Log 'Path (Current): ' . getcwd()
Log 'Path (Current): ' . getcwd() # Log 'File: (Buffer)' . @%
Log 'File: (Buffer)' . @% # Log 'List (Wiki): ' . string(g:vimwiki_list)
Log 'List (Wiki): ' . string(g:vimwiki_list) # Log ''
Log '' # Log 'Local (Vars):'
Log 'Local (Vars):' # Log g:vimwiki_wikilocal_vars
Log g:vimwiki_wikilocal_vars #
# " Work
" Work # edit $HOME/testmarkdown/index.md
edit $HOME/testmarkdown/index.md #
# " Assert
" Assert # AssertEqual '/home/vimtest/testmarkdown_cwd', getcwd() . '_cwd'
AssertEqual '/home/vimtest/testmarkdown_cwd', getcwd() . '_cwd' # AssertEqual '0_wiki_nr', vimwiki#vars#get_bufferlocal('wiki_nr') . '_wiki_nr'
AssertEqual '0_wiki_nr', vimwiki#vars#get_bufferlocal('wiki_nr') . '_wiki_nr' # AssertEqual 'markdown_syntax', vimwiki#vars#get_wikilocal('syntax') . '_syntax'
AssertEqual 'markdown_syntax', vimwiki#vars#get_wikilocal('syntax') . '_syntax' # AssertEqual '0_margin', vimwiki#vars#get_wikilocal('list_margin') . '_margin'
AssertEqual '0_margin', vimwiki#vars#get_wikilocal('list_margin') . '_margin' # Log 'Path (Current): ' . getcwd()
Log 'Path (Current): ' . getcwd() # Log 'File (Buffer):' . @%
Log 'File (Buffer):' . @% # bprevious
bprevious # Log 'Path (Current): ' . getcwd()
Log 'Path (Current): ' . getcwd() # Log 'File (Buffer):' . @%
Log 'File (Buffer):' . @% # bwipeout index.md
bwipeout index.md #
# " Clean
" Clean # Log 'Clean up'
Log 'Clean up' # cd /testplugin
cd /testplugin # unlet g:vimwiki_list
unlet g:vimwiki_list # unlet g:vimwiki_ext2syntax
unlet g:vimwiki_ext2syntax # unlet g:vimwiki_global_ext
unlet g:vimwiki_global_ext # unlet g:vimwiki_autowriteall
unlet g:vimwiki_autowriteall # unlet g:vimwiki_auto_chdir
unlet g:vimwiki_auto_chdir # unlet g:vimwiki_folding
unlet g:vimwiki_folding # unlet wiki
unlet wiki # Log 'Path (Current): ' . getcwd()
Log 'Path (Current): ' . getcwd() # Log 'File (Buffer):' . @%
Log 'File (Buffer):' . @% # call ReloadVimwiki()
call ReloadVimwiki() # Log g:vimwiki_wikilocal_vars
Log g:vimwiki_wikilocal_vars #
# Expect (txt):
Expect (txt): # txt
txt
# vim: sw=2:foldlevel=30:foldmethod=indent: # vim: sw=2:foldlevel=30:foldmethod=indent:
+16 -2
View File
@@ -148,7 +148,7 @@ Expect (3 Words []()):
#################### ####################
Execute (Log): Execute (Log):
Log 'Absolute links' Log 'Absolute links: full paths and in-wiki'
# For markdown {{{2 # For markdown {{{2
# ------------------ # ------------------
@@ -162,6 +162,7 @@ Given vimwiki(some wiki link):
[test1](//$HOME/in_home1) [test1](//$HOME/in_home1)
[test2](//~/in_home2) [test2](//~/in_home2)
[test3](///tmp/in_tmp) [test3](///tmp/in_tmp)
[test4](/in_current_wiki)
Do (Check in_home1): Do (Check in_home1):
\<Cr> \<Cr>
@@ -175,6 +176,12 @@ Do (Check in_tmp):
jj\<Cr> jj\<Cr>
:AssertEqual expand('%'), '/tmp/in_tmp.md'\<Cr> :AssertEqual expand('%'), '/tmp/in_tmp.md'\<Cr>
# Here, assuming that "current wiki" means the working directory, since
# no wiki is currently defined:
Do (Check in_current_wiki):
jjj\<Cr>
:AssertEqual expand('%'), '/testplugin/in_current_wiki.md'\<Cr>
# For Wiki {{{2 # For Wiki {{{2
# ------------------ # ------------------
@@ -187,6 +194,7 @@ Given vimwiki(some wiki link):
[[//$HOME/in_home1]] [[//$HOME/in_home1]]
[[//~/in_home2]] [[//~/in_home2]]
[[///tmp/in_tmp]] [[///tmp/in_tmp]]
[[/in_current_wiki]]
Do (Check in_home1): Do (Check in_home1):
\<Cr> \<Cr>
@@ -200,6 +208,12 @@ Do (Check in_tmp):
jj\<Cr> jj\<Cr>
:AssertEqual expand('%'), '/tmp/in_tmp.wiki'\<Cr> :AssertEqual expand('%'), '/tmp/in_tmp.wiki'\<Cr>
# Here, assuming that "current wiki" means the working directory, since
# no wiki is currently defined:
Do (Check in_current_wiki):
jjj\<Cr>
:AssertEqual expand('%'), '/testplugin/in_current_wiki.wiki'\<Cr>
Execute(Clean: temporary): Execute(Clean: temporary):
call ReloadVimwiki() call ReloadVimwiki()
call DeleteFile('$HOME/in_home1.md') call DeleteFile('$HOME/in_home1.md')
@@ -212,7 +226,7 @@ Execute(Clean: temporary):
Execute (Log): Execute (Log):
Log 'Link with dot' Log 'Link with dot'
Given vimwiki (filnames with dots): Given vimwiki (filenames with dots):
part1.part2.part3 part1.part2.part3
part1.part2.part3.md part1.part2.part3.md
noext noext
+14
View File
@@ -29,6 +29,8 @@ Expect (The links with a header):
= Generated Links = = Generated Links =
- [[buzz_bozz]] - [[buzz_bozz]]
- [[index]] - [[index]]
- [[link_syntax]]
- [[link_syntax/nested]]
Execute (VimwikiGenerateLinks x 2): Execute (VimwikiGenerateLinks x 2):
edit $HOME/testwiki/Test.wiki edit $HOME/testwiki/Test.wiki
@@ -42,6 +44,8 @@ Expect (The links with a header (bis)):
= Generated Links = = Generated Links =
- [[buzz_bozz]] - [[buzz_bozz]]
- [[index]] - [[index]]
- [[link_syntax]]
- [[link_syntax/nested]]
Last Line Last Line
@@ -75,6 +79,8 @@ Expect (The links with a header):
- [Buzz Bozz](buzz_bozz) - [Buzz Bozz](buzz_bozz)
- [Test Wiki](index) - [Test Wiki](index)
- [link_syntax](link_syntax)
- [link_syntax/nested](link_syntax/nested)
Do (Save Test.md && Re-GenerateLinks): Do (Save Test.md && Re-GenerateLinks):
:edit $HOME/testmarkdown/Test.md\<CR> :edit $HOME/testmarkdown/Test.md\<CR>
@@ -90,6 +96,8 @@ Expect (The links with a header with file Test):
- [Generated Links](Test) - [Generated Links](Test)
- [Buzz Bozz](buzz_bozz) - [Buzz Bozz](buzz_bozz)
- [Test Wiki](index) - [Test Wiki](index)
- [link_syntax](link_syntax)
- [link_syntax/nested](link_syntax/nested)
Execute (Clean: Remove Test.md): Execute (Clean: Remove Test.md):
call DeleteFile('$HOME/testmarkdown/Test.md') call DeleteFile('$HOME/testmarkdown/Test.md')
@@ -180,6 +188,12 @@ Do (Edit diary.md && GenerateDiaryLinks):
Expect (diary index generated): Expect (diary index generated):
# Diary # Diary
## 2020
### July
- [2020-07-22](2020-07-22)
## 2019 ## 2019
### December ### December
+122
View File
@@ -0,0 +1,122 @@
# Test resolution of as many link types as possible in Markdown syntax
# This relies on the line numbers for each type of link in link_syntax.md and
# link_syntax/nested.md, which seems primitive, but does seem to work.
# Links in a top-level page {{{
Execute (Assure link_syntax.md exists):
Log "Testing links in a top-level page with native syntax."
VimwikiIndex 2
VimwikiGoto link_syntax
AssertEqual $HOME . '/testmarkdown/link_syntax.md', expand('%')
Do (Check plain wiki page link to index):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:1\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/index.md', expand('%')\<CR>
Do (Check absolute-in-wiki page link to index with leading slash):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:2\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/index.md', expand('%')\<CR>
# //foo "absolute" links - these are also checked in link_generation.vader:
Do (Check absolute-on-filesystem page link to /tmp/some_page with 2 leading slashes):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:3\<CR>
\<CR>
:AssertEqual '/tmp/some_page.md', expand('%')\<CR>
Do (Check absolute-on-filesystem page link to index using tilde for homedir):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:4\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/index.md', expand('%')\<CR>
Do (Check diary link):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:5\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/diary/2020-07-22.md', expand('%')\<CR>
Do (Check link to nested page):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:6\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/link_syntax/nested.md', expand('%')\<CR>
Do (Check relative link to nested page with ./link_syntax/nested):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax\<CR>
:7\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/link_syntax/nested.md', expand('%')\<CR>
# }}}
# Links in a nested file {{{
Execute (Assure link_syntax/nested.md exists):
Log "Testing links in a nested page with native syntax."
VimwikiIndex 2
VimwikiGoto link_syntax/nested
AssertEqual $HOME . '/testmarkdown/link_syntax/nested.md', expand('%')
Do (Nested: Check plain wiki page link to self - link_syntax/nested.md):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:1\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/link_syntax/nested.md', expand('%')\<CR>
Do (Nested: Check absolute-in-wiki page link to index with leading slash):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:2\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/index.md', expand('%')\<CR>
# //foo "absolute" links - these are also checked in link_generation.vader:
Do (Nested: Check absolute-on-filesystem page link to /tmp/some_page with 2 leading slashes):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:3\<CR>
\<CR>
:AssertEqual '/tmp/some_page.md', expand('%')\<CR>
Do (Nested: Check absolute-on-filesystem page link to index using tilde for homedir):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:4\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/index.md', expand('%')\<CR>
Do (Nested: Check diary link):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:5\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/diary/2020-07-22.md', expand('%')\<CR>
Do (Nested: Check relative link to page in parent directory):
:VimwikiIndex 2\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:6\<CR>
\<CR>
:AssertEqual $HOME . '/testmarkdown/link_syntax.md', expand('%')\<CR>
# }}}
# To be perfectly honest I don't know why or if this is necessary, but without
# it I was getting leftover tabs for the last file visited here. -- brennen
Execute (Clean):
call ReloadVimwiki()
+122
View File
@@ -0,0 +1,122 @@
# Test resolution of as many link types as possible in VimWiki syntax
# This relies on the line numbers for each type of link in link_syntax.wiki and
# link_syntax/nested.wiki, which seems primitive, but does seem to work.
# Links in a top-level page {{{
Execute (Assure link_syntax.wiki exists):
Log "Testing links in a top-level page with native syntax."
VimwikiIndex 1
VimwikiGoto link_syntax
AssertEqual $HOME . '/testwiki/link_syntax.wiki', expand('%')
Do (Check plain wiki page link to index):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:1\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/index.wiki', expand('%')\<CR>
Do (Check absolute-in-wiki page link to index with leading slash):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:2\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/index.wiki', expand('%')\<CR>
# //foo "absolute" links - these are also checked in link_generation.vader:
Do (Check absolute-on-filesystem page link to /tmp/some_page with 2 leading slashes):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:3\<CR>
\<CR>
:AssertEqual '/tmp/some_page.wiki', expand('%')\<CR>
Do (Check absolute-on-filesystem page link to index using tilde for homedir):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:4\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/index.wiki', expand('%')\<CR>
Do (Check diary link):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:5\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/diary/2020-07-22.wiki', expand('%')\<CR>
Do (Check link to nested page):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:6\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/link_syntax/nested.wiki', expand('%')\<CR>
Do (Check relative link to nested page with ./link_syntax/nested):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax\<CR>
:7\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/link_syntax/nested.wiki', expand('%')\<CR>
# }}}
# Links in a nested file {{{
Execute (Assure link_syntax/nested.wiki exists):
Log "Testing links in a nested page with native syntax."
VimwikiIndex 1
VimwikiGoto link_syntax/nested
AssertEqual $HOME . '/testwiki/link_syntax/nested.wiki', expand('%')
Do (Nested: Check plain wiki page link to self - link_syntax/nested.wiki):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:1\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/link_syntax/nested.wiki', expand('%')\<CR>
Do (Nested: Check absolute-in-wiki page link to index with leading slash):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:2\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/index.wiki', expand('%')\<CR>
# //foo "absolute" links - these are also checked in link_generation.vader:
Do (Nested: Check absolute-on-filesystem page link to /tmp/some_page with 2 leading slashes):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:3\<CR>
\<CR>
:AssertEqual '/tmp/some_page.wiki', expand('%')\<CR>
Do (Nested: Check absolute-on-filesystem page link to index using tilde for homedir):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:4\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/index.wiki', expand('%')\<CR>
Do (Nested: Check diary link):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:5\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/diary/2020-07-22.wiki', expand('%')\<CR>
Do (Nested: Check relative link to page in parent directory):
:VimwikiIndex 1\<CR>
:VimwikiGoto link_syntax/nested\<CR>
:6\<CR>
\<CR>
:AssertEqual $HOME . '/testwiki/link_syntax.wiki', expand('%')\<CR>
# }}}
# To be perfectly honest I don't know why or if this is necessary, but without
# it I was getting leftover tabs for the last file visited here. -- brennen
Execute (Clean):
call ReloadVimwiki()
+27 -24
View File
@@ -353,30 +353,33 @@ Expect (Dec header level):
Given vimwiki (Completion list #813 {{{3): # brennen commenting this out 2021-03-29 - test seems to flap, test failures
complete1 # are difficult to diagnose.
complete2 #
complete3 # Given vimwiki (Completion list #813 {{{3):
# complete1
Do (Insert a list item and complete): # complete2
Go # complete3
* comp\<C-n>\<C-n>\<Cr>\<Esc> #
# -Es -> Delete trailing * # Do (Insert a list item and complete):
:let mode = mode(1)\<Cr> # Go
:Log 'Mode : ' .mode\<Cr> # * comp\<C-n>\<C-n>\<Cr>\<Esc>
:if mode ==# 'ce' || mode ==# 'cv' || v:version < 704\<Cr> # # -Es -> Delete trailing *
Log 'Cheating'\<Cr> # :let mode = mode(1)\<Cr>
try\<Cr> # :Log 'Mode : ' .mode\<Cr>
g/^\* \?$/d\<Cr> # :if mode ==# 'ce' || mode ==# 'cv' || v:version < 704\<Cr>
endtry\<Cr> # Log 'Cheating'\<Cr>
endif\<Cr> # try\<Cr>
# g/^\* \?$/d\<Cr>
Expect (With a completion but no new item): # endtry\<Cr>
complete1 # endif\<Cr>
complete2 #
complete3 # Expect (With a completion but no new list item):
* complete2 # complete1
# complete2
# complete3
# * complete2
#
Given (Number list): Given (Number list):
1. I 1. I
@@ -0,0 +1,7 @@
[index](index)
[/index](/index)
[///tmp/some_page](///tmp/some_page)
[//~/testmarkdown/index](//~/testmarkdown/index)
[diary:2020-07-22](diary:2020-07-22)
[link_syntax/nested](link_syntax/nested)
[./link_syntax/nested](./link_syntax/nested)
@@ -0,0 +1,6 @@
[nested](nested)
[/index](/index)
[///tmp/some_page](///tmp/some_page)
[//~/testmarkdown/index](//~/testmarkdown/index)
[diary:2020-07-22](diary:2020-07-22)
[../link_syntax](../link_syntax)
+7
View File
@@ -0,0 +1,7 @@
[[index]]
[[/index]]
[[///tmp/some_page]]
[[//~/testwiki/index]]
[[diary:2020-07-22]]
[[link_syntax/nested]]
[[./link_syntax/nested]]
@@ -0,0 +1,6 @@
[[nested]]
[[/index]]
[[///tmp/some_page]]
[[//~/testwiki/index]]
[[diary:2020-07-22]]
[[../link_syntax]]
+18 -16
View File
@@ -729,31 +729,33 @@ Execute (Assert math syntax 2):
Given vimwiki (One line): Given vimwiki (One line):
content content
# GetHighlightTerm relies on execute(), which isn't available in all 7.4
# versions. Just test this for 8.0 and up to keep things simple:
Execute (Assert highlight typeface 1): Execute (Assert highlight typeface 1):
" Typeface 1 " Typeface 1
call AssertIfVersion(704, ['bold'], GetHighlightTerm('VimwikiBold', 'term')) call AssertIfVersion(800, ['bold'], GetHighlightTerm('VimwikiBold', 'term'))
call AssertIfVersion(704, ['bold'], GetHighlightTerm('VimwikiBold', 'cterm')) call AssertIfVersion(800, ['bold'], GetHighlightTerm('VimwikiBold', 'cterm'))
call AssertIfVersion(704, ['bold'], GetHighlightTerm('VimwikiBold', 'gui')) call AssertIfVersion(800, ['bold'], GetHighlightTerm('VimwikiBold', 'gui'))
call AssertIfVersion(704, ['italic'], GetHighlightTerm('VimwikiItalic', 'cterm')) call AssertIfVersion(800, ['italic'], GetHighlightTerm('VimwikiItalic', 'cterm'))
call AssertIfVersion(704, ['underline'], GetHighlightTerm('VimwikiUnderline', 'gui')) call AssertIfVersion(800, ['underline'], GetHighlightTerm('VimwikiUnderline', 'gui'))
Execute (Assert highlight typeface 2): Execute (Assert highlight typeface 2):
" Bold > Italic > Underline " Bold > Italic > Underline
call AssertIfVersion(704, sort(['bold', 'italic', '1']), sort(add(GetHighlightTerm('VimwikiBoldItalic', 'gui'), '1'))) call AssertIfVersion(800, sort(['bold', 'italic', '1']), sort(add(GetHighlightTerm('VimwikiBoldItalic', 'gui'), '1')))
call AssertIfVersion(704, sort(['bold', 'italic', '2']), sort(add(GetHighlightTerm('VimwikiBoldItalic', 'term'), '2'))) call AssertIfVersion(800, sort(['bold', 'italic', '2']), sort(add(GetHighlightTerm('VimwikiBoldItalic', 'term'), '2')))
call AssertIfVersion(704, sort(['bold', 'underline', '3']), sort(add(GetHighlightTerm('VimwikiBoldUnderline', 'cterm'), '3'))) call AssertIfVersion(800, sort(['bold', 'underline', '3']), sort(add(GetHighlightTerm('VimwikiBoldUnderline', 'cterm'), '3')))
call AssertIfVersion(704, sort(['bold', 'underline', '4']), sort(add(GetHighlightTerm('VimwikiUnderlineBold', 'term'), '4'))) call AssertIfVersion(800, sort(['bold', 'underline', '4']), sort(add(GetHighlightTerm('VimwikiUnderlineBold', 'term'), '4')))
call AssertIfVersion(704, sort(['italic', 'underline', '5']), sort(add(GetHighlightTerm('VimwikiItalicUnderline', 'cterm'), '5'))) call AssertIfVersion(800, sort(['italic', 'underline', '5']), sort(add(GetHighlightTerm('VimwikiItalicUnderline', 'cterm'), '5')))
Execute (Assert highlight typeface 3): Execute (Assert highlight typeface 3):
call AssertIfVersion(704, sort(['bold', 'italic', 'underline', '1']), sort(add(GetHighlightTerm('VimwikiBoldItalicUnderline', 'gui'), '1'))) call AssertIfVersion(800, sort(['bold', 'italic', 'underline', '1']), sort(add(GetHighlightTerm('VimwikiBoldItalicUnderline', 'gui'), '1')))
call AssertIfVersion(704, sort(['bold', 'italic', 'underline', '2']), sort(add(GetHighlightTerm('VimwikiBoldUnderlineItalic', 'cterm'), '2'))) call AssertIfVersion(800, sort(['bold', 'italic', 'underline', '2']), sort(add(GetHighlightTerm('VimwikiBoldUnderlineItalic', 'cterm'), '2')))
call AssertIfVersion(704, sort(['bold', 'italic', 'underline', '3']), sort(add(GetHighlightTerm('VimwikiItalicBoldUnderline', 'term'), '3'))) call AssertIfVersion(800, sort(['bold', 'italic', 'underline', '3']), sort(add(GetHighlightTerm('VimwikiItalicBoldUnderline', 'term'), '3')))
call AssertIfVersion(704, sort(['bold', 'italic', 'underline', '4']), sort(add(GetHighlightTerm('VimwikiItalicUnderlineBold', 'gui'), '4'))) call AssertIfVersion(800, sort(['bold', 'italic', 'underline', '4']), sort(add(GetHighlightTerm('VimwikiItalicUnderlineBold', 'gui'), '4')))
call AssertIfVersion(704, sort(['bold', 'italic', 'underline', '5']), sort(add(GetHighlightTerm('VimwikiUnderlineBoldItalic', 'cterm'), '5'))) call AssertIfVersion(800, sort(['bold', 'italic', 'underline', '5']), sort(add(GetHighlightTerm('VimwikiUnderlineBoldItalic', 'cterm'), '5')))
call AssertIfVersion(704, sort(['bold', 'italic', 'underline', '6']), sort(add(GetHighlightTerm('VimwikiUnderlineItalicBold', 'term'), '6'))) call AssertIfVersion(800, sort(['bold', 'italic', 'underline', '6']), sort(add(GetHighlightTerm('VimwikiUnderlineItalicBold', 'term'), '6')))
Expect (One line): Expect (One line):
content content
+8 -4
View File
@@ -341,18 +341,22 @@
endfunc endfunc
function! AssertIfVersion(version, one, two) function! AssertIfVersion(version, one, two)
" Run Assert only if vim version higth enough " Run Assert only if vim version is high enough
if v:version < a:version | return | endif if v:version < a:version | return | endif
AssertEqual a:one, a:two AssertEqual a:one, a:two
endfunction endfunction
function! GetHighlightTerm(group, term) function! GetHighlightTerm(group, term)
" Get output of `hi group` " Get output of `hi group`
"
" From: https://vi.stackexchange.com/a/12294/5026 " From: https://vi.stackexchange.com/a/12294/5026
" Return list ['bold','underline'] " Return list ['bold','underline']
" Warning: must be called if version > 704 "
" Clause " Warning: must only be called if has("patch-7.4-2008")
if v:version < 704 | return [] | endif " Or rather: If execute() exists - it's not available for all 7.4
" versions.
" https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
if has('patch-7.4-2008') != 1 | return [] | endif
" Store output of group to variable " Store output of group to variable
let out = execute('hi ' . a:group) let out = execute('hi ' . a:group)