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:
@@ -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)
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
@@ -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
@@ -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)
|
||||||
@@ -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
@@ -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
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user