1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425
|
" TODO treat if local (see $HOME in all tests)
" TODO mutualise (to prettify output) mode(1) to check if in -Es or not
" TODO test tabnext in at least one travis job (without -Es)
" Declare tipical Vim preambule
" vint: -ProhibitSetNoCompatible
set nocompatible
filetype plugin indent on
syntax enable
" Usefull var: for one day, making tests on local
let $TPLUGIN = '/testplugin'
let $THOME = $HOME
" Set chrooted virtual runtime path
let rtp = $ROOT . '/rtp.vim'
if filereadable(rtp)
execute 'source ' . rtp
endif
" Load Vader
let vader = $ROOT.'/vader'
exe 'set runtimepath+='.vader
" Wikis configuration
" Declare default syntax
let vimwiki_default = {}
let vimwiki_default.path = $HOME . '/testwiki'
let vimwiki_default.path_html = $HOME . '/html/default'
let vimwiki_default.template_path = $HOME . '/testwiki/templates/'
let vimwiki_default.syntax = 'default'
let vimwiki_default.ext = '.wiki'
let vimwiki_default.name = 'DefaultSyntax'
let vimwiki_default.base_url = 'https://example.com/'
" Declare markdown syntax - https://github.github.com/gfm/
let vimwiki_markdown = {}
let vimwiki_markdown.path = $HOME . '/testmarkdown'
let vimwiki_markdown.path_html = $HOME . '/html/markdown'
let vimwiki_markdown.syntax = 'markdown'
let vimwiki_markdown.ext = '.md'
let vimwiki_markdown.name = 'MarkdownSyntax'
" Declare mediawiki syntax - https://www.mediawiki.org/wiki/Help:Formatting
let vimwiki_mediawiki = {}
let vimwiki_mediawiki.path = $HOME . '/testmediawiki'
let vimwiki_mediawiki.path_html = $HOME . '/html/mediawiki'
let vimwiki_mediawiki.syntax = 'media'
let vimwiki_mediawiki.ext = '.mw'
let vimwiki_mediawiki.name = 'MediaWikiSyntax'
" Declare default syntax with spaces
let vimwiki_default_space = {}
let vimwiki_default_space.path = $HOME . '/testwiki space'
let vimwiki_default_space.path_html = $HOME . '/html/testwiki space'
let vimwiki_default_space.template_path = $HOME . '/testwiki space/templates/'
let vimwiki_default_space.syntax = 'default'
let vimwiki_default_space.ext = '.wiki'
let vimwiki_default_space.name = 'DefaultSyntax'
let vimwiki_default_space.base_url = 'https://example.com/'
" Register the 4 wikis
let g:vimwiki_list = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki, vimwiki_default_space]
let g:vimwiki_list_vimrc = [vimwiki_default, vimwiki_markdown, vimwiki_mediawiki, vimwiki_default_space]
" Test VimwikiColorize and ,wc
let g:vimwiki_color_dic = {
\ 'default': ['', '#d79921'],
\ 'red': ['#cc241d', ''],
\ 'bred': ['', '#cc241d'],
\ 'green': ['#98971a', ''],
\ 'bgreen': ['', '#98971a'],
\ 'yellow': ['#d79921', ''],
\ 'byellow': ['', '#d79921'],
\ 'blue': ['#458588', ''],
\ 'bblue': ['', '#458588'],
\ 'purple': ['#b16286', ''],
\ 'bpurple': ['', '#b16286'],
\ 'orange': ['#d65d0e', ''],
\ 'borange': ['', '#d65d0e'],
\ 'gray': ['#a89984', ''],
\ 'bgray': ['', '#a89984']}
" Set basic settings
" Avoid more prompt
set nomore
set backspace=indent,eol,start
set wildmode=longest:full,full
set wildmenu
set wildignorecase
set splitbelow
set splitright
set timeoutlen=600
set ignorecase
set smartcase
set hidden
set laststatus=2
set hlsearch
" Map
" Map ctrl-p/n for history completion instead of up/down arrows
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
" Map jj to go back to command mode
inoremap jj <esc>
" Use <C-L> to clear the highlighting of :set hlsearch and also preserve the
" default behavior of redrawing the screen
if maparg('<C-L>', 'n') ==# ''
nnoremap <silent> <C-L> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
endif
" Define functions
function! CommentLine(msg)
" Log current line and argument message
" Called: in GFM copying like: https://github.github.com/gfm/#example-360 in syntax_markdown_gfm_typeface.vader
Log 'Content: `' . getline('.') . '`'
Log 'Comment: ' . a:msg
endfunction
command! -nargs=1 CommentLine call CommentLine(<args>)
function! SetSyntax(vw_syn)
" Change the syntax using a temporary wiki
" Change extension and wiki_nr
let index=0
if a:vw_syn ==# 'default'
let ext = 'wiki'
let index=0
elseif a:vw_syn ==# 'markdown'
let ext = 'md'
let index=1
elseif a:vw_syn ==# 'media'
let ext = 'mw'
let index=2
else
Log 'ERROR: Invalid syntax "' . a:vw_syn . '" in SetSyntax()'
Log 'NOTE: function only accepts "media" for setting mediawiki syntax'
return
endif
" Change temporary wiki
let path = expand('%:p:h')
let new_temp_wiki_settings = {
\ 'path': path,
\ 'ext': ext,
\ 'syntax': a:vw_syn,
\ 'bullet_types': g:vimwiki_wikilocal_vars[index]['bullet_types'],
\ }
" Remove any temporary wikis each time this function is called.
" This is necessary to ensure syntax is properly set when running multiple tests
" NOTE: this assumes there are 3 defined wikis in the vimrc. The last wiki
" contains default settings for temporary wikis (so there are always
" num wikis in vimrc + 1)
let num_wikis = len(g:vimwiki_wikilocal_vars)
while num_wikis > 4
call remove(g:vimwiki_wikilocal_vars, num_wikis - 1)
let num_wikis = num_wikis - 1
endwhile
" Add the new wiki
call vimwiki#vars#add_temporary_wiki(new_temp_wiki_settings)
call vimwiki#vars#set_bufferlocal('wiki_nr', 3)
" Verify syntax was set correctly
Assert vimwiki#vars#get_wikilocal('syntax') ==# a:vw_syn,
\ 'ERROR: Vimwiki syntax not set correctly: '
\ . 'Want: ' . a:vw_syn . ' '
\ . 'Have: ' . vimwiki#vars#get_wikilocal('syntax')
endfunction
function! UnloadVimwiki()
" Clear mappings so plugin can be reloaded
" this is needed if running manually multiple times
nmapclear
" UNlet what can be
" -- Note: getcompletion not present on vim7.3
for i in ['g:vimwiki_commentstring',
\ 'b:did_ftplugin',
\ 'g:loaded_vimwiki',
\ 'g:vimwiki_global_vars',
\ 'g:vimwiki_wikilocal_vars',
\ 'g:vimwiki_syntaxlocal_vars',
\ 'g:vimwiki_list',
\ ]
if exists(i)
exe 'unlet ' . i
endif
endfor
" Unlet ftplugin:
" -- Vader often staty in same buffer: [Vader-workbench]
if exists('b:did_ftplugin')
unlet b:did_ftplugin
endif
endfunction
function! LoadVimwiki()
" Source plugin
runtime! plugin/vimwiki.vim
endfunction
function! ReloadVimwiki()
" Reload plugin to change settings
call UnloadVimwiki()
" Reset list
let g:vimwiki_list = g:vimwiki_list_vimrc
call LoadVimwiki()
endfunction
function! ReloadVars()
" vars#init will not reload syntax varaible if not set
unlet g:vimwiki_syntaxlocal_vars
call vimwiki#vars#init()
endfunction
function! CopyResources()
" Copy wiki test resources so that vimtest user can write them
call system('cp -r /testplugin/test/resources/* $HOME/')
" Make diary directory
call system('mkdir $HOME/testwiki/diary')
call system('mkdir $HOME/testmarkdown/diary')
endfunction
function! DeleteHiddenBuffers()
" Delete Hidden buffer, usefull to clean
" See: https://stackoverflow.com/a/8459043/2544873
let tpbl=[]
call map(range(1, tabpagenr('$')), 'extend(tpbl, tabpagebuflist(v:val))')
for buf in filter(range(1, bufnr('$')), 'bufexists(v:val) && index(tpbl, v:val)==-1')
if bufname(buf) =~? 'Vader'
continue
endif
silent execute 'bwipeout!' buf
endfor
endfunction
function! WriteMe()
" Write current file: helper to hide `set bt=`
set buftype=
write! %
endfunction
function! DeleteFile(path)
" Delete a file <- path <string>
let path = expand(a:path)
" Delete file
try
call delete(path)
catch | endtry
" Delete Buffer
try
execute 'bwipeout! ' . path
catch | endtry
endfunction
function! PrintCommand(cmd)
" Print a command output to the buffer
redir => message
silent execute a:cmd
redir END
if empty(message)
Log 'no output'
else
silent put=message
endif
endfunction
function! DestroyVar(var)
" Destroy a variable is exists (unlet)
if ! exists(a:var) | return | endif
execute 'unlet ' . a:var
endfunction
function! AssertTab(nr)
" Assert current tab is desired tab
" Vader is creating 2 tabs
AssertEqual a:nr + 2, tabpagenr()
endfunction
function! ConvertWiki2Html()
" Convert current buffer: wiki -> html
" No side effect (if no bug)
" Save fbuffer number (to come back)
let g:buf_vader = bufnr('%')
" Cut wiki content
let wiki_content = getline(1, '$')
1,$delete
" Paste to a named file
" Edit a new file in wiki_root
edit $HOME/testwiki/test_Convert2Html.wiki
" Ensure it is void
1,$delete
" Write wiki content
call setline(1, wiki_content)
" Dump buffer to disk
call WriteMe()
" Convert
"""""""""
Vimwiki2HTML
" Cut output
edit $HOME/html/default/test_Convert2Html.html
let html_content = getline(1, '$')
1,$delete
" Paste output in [Vader] buffer
execute 'buffer ' . g:buf_vader
call setline(1, html_content)
" Delete files
call DeleteFile('$HOME/html/default/test_Convert2Html.html')
call DeleteFile('$HOME/testwiki/test_Convert2Html.wiki')
endfunction
function! ConvertWiki2Body()
" Get only body
call ConvertWiki2Html()
" Empty b register
let @b = ''
" Copy body
/<body>/+1,/<.body>/-1:g/^/y B
" Delete All lines
1,$d
" Paste body
0put! b
" Remove last line
0d
endfunction
function! GetSyntaxVimwiki(line, col)
let res = GetSyntaxStack(a:line, a:col)
if empty(res)
return 'normal'
endif
return res[0]
endfunction
function! GetSyntaxGroup(...)
" Get normalized syntax group: usefull for boldItalic Vs italicBold
" Arg1: line
" Arg2: column
" -- Here, Vader's SyntaxAt is not enough
" From: https://stackoverflow.com/questions/9464844
let line = a:0 >= 1 ? a:1 : '.'
let col = a:0 >= 2 ? a:2 : '.'
let l:s = synID(line, col, 1)
return synIDattr(synIDtrans(l:s), 'name')
endfun
function! GetSyntaxStack(...)
" Debug helper
" Arg1: line
" Arg2: column
let line = a:0 >= 1 ? a:1 : '.'
let col = a:0 >= 2 ? a:2 : '.'
if !exists('*synstack')
return []
endif
let res = map(synstack(line, col), 'synIDattr(v:val, "name")')
" For old vim version returning 0
if type(res) == type(0) && res == 0
return []
endif
return res
endfunction
function! AssertIfVersion(version, one, two)
" Run Assert only if vim version is high enough
if v:version < a:version | return | endif
AssertEqual a:one, a:two
endfunction
function! GetHighlightTerm(group, term)
" Get output of `hi group`
"
" From: https://vi.stackexchange.com/a/12294/5026
" Return list ['bold','underline']
"
" Warning: must only be called if has("patch-7.4-2008")
" Or rather: If execute() exists - it's not available for all 7.4
" versions.
" https://github.com/vim/vim/commit/79815f1ec77406f2f21a618c053e5793b597db7a
" Clause: Dot not work if not able
if v:version < 800 && has('patch-7.4-2008') != 1 | return [] | endif
" Store output of group to variable
let out = execute('hi ' . a:group)
" If links to, call parent
let parent = matchstr(out, 'links to *\zs[^ \t\n\r]*')
if parent !=# ''
" Return list_of_parent, parent
return GetHighlightTerm(parent, a:term)
endif
" Return the unique term we are looking for
let stg = matchstr(out, a:term . '=\zs[^[:space:]]*')
return split(stg, ',')
endfunction
" Copy Wiki's Resources
call CopyResources()
" vim: ft=vim:sw=2
|