workflow.vader 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742
  1. Execute (Initialize test environment):
  2. Save &rtp, g:plugs, g:plug_home
  3. let first_rtp = split(&rtp, ',')[0]
  4. let last_rtp = split(&rtp, ',')[-1]
  5. let vader = fnamemodify(globpath(&rtp, 'autoload/vader.vim'), ':h:h')
  6. let plug = fnamemodify(globpath(&rtp, 'autoload/plug.vim'), ':h:h')
  7. set rtp=$HOME/.vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,$HOME/.vim/after
  8. execute 'set rtp^='.vader
  9. execute 'set rtp^='.plug
  10. let basertp = &rtp
  11. unlet! g:plugs
  12. unlet! g:plug_home
  13. set t_Co=256
  14. colo default
  15. pclose
  16. function! PlugStatusSorted()
  17. PlugStatus
  18. %y
  19. q
  20. normal! P
  21. %sort
  22. g/^$/d
  23. endfunction
  24. function! AssertExpect(bang, pat, cnt)
  25. let op = a:bang ? '==' : '=~'
  26. AssertEqual a:cnt, len(filter(getline(1, '$'), "v:val ".op." '".a:pat."'"))
  27. endfunction
  28. command! -nargs=+ -bang AssertExpect call AssertExpect('<bang>' == '!', <args>)
  29. Execute (plug#end() before plug#begin() should fail):
  30. redir => out
  31. AssertEqual 0, plug#end()
  32. redir END
  33. Assert stridx(out, 'Call plug#begin() first') >= 0
  34. Execute (plug#begin() without path argument):
  35. call plug#begin()
  36. AssertEqual split(&rtp, ',')[0].'/plugged', g:plug_home
  37. unlet g:plug_home
  38. Execute (plug#begin() without path argument with empty &rtp):
  39. let save_rtp = &rtp
  40. set rtp=
  41. redir => out
  42. AssertEqual 0, plug#begin()
  43. redir END
  44. Assert stridx(out, 'Unable to determine plug home') >= 0
  45. let &rtp = save_rtp
  46. Execute (plug#begin(path)):
  47. let temp_plugged = tempname()
  48. call plug#begin(temp_plugged.'/')
  49. Assert g:plug_home !~ '[/\\]$', 'Trailing / should be stripped from g:plug_home'
  50. AssertEqual 0, len(g:plugs)
  51. AssertEqual temp_plugged, g:plug_home
  52. AssertEqual basertp, &rtp
  53. Execute (Subsequent plug#begin() calls will reuse g:plug_home):
  54. call plug#begin()
  55. AssertEqual temp_plugged, g:plug_home
  56. Execute (Test Plug command):
  57. " Git repo with branch
  58. Plug 'junegunn/seoul256.vim', 'yes-t_co'
  59. AssertEqual 'https://git:@github.com/junegunn/seoul256.vim.git', g:plugs['seoul256.vim'].uri
  60. AssertEqual join([temp_plugged, 'seoul256.vim/'], '/'), g:plugs['seoul256.vim'].dir
  61. AssertEqual 'yes-t_co', g:plugs['seoul256.vim'].branch
  62. Plug 'junegunn/seoul256.vim', { 'branch': 'no-t_co' } " Using branch option
  63. AssertEqual 'no-t_co', g:plugs['seoul256.vim'].branch
  64. " Git repo with tag
  65. Plug 'junegunn/goyo.vim', '1.5.2'
  66. AssertEqual 'https://git:@github.com/junegunn/goyo.vim.git', g:plugs['goyo.vim'].uri
  67. AssertEqual join([temp_plugged, 'goyo.vim/'], '/'), g:plugs['goyo.vim'].dir
  68. AssertEqual '1.5.2', g:plugs['goyo.vim'].branch
  69. Plug 'junegunn/goyo.vim', { 'tag': '1.5.3' } " Using tag option
  70. AssertEqual '1.5.3', g:plugs['goyo.vim'].branch
  71. " Git URI
  72. Plug 'https://bitbucket.org/junegunn/vim-emoji.git'
  73. AssertEqual 'https://bitbucket.org/junegunn/vim-emoji.git', g:plugs['vim-emoji'].uri
  74. AssertEqual 'master', g:plugs['vim-emoji'].branch
  75. AssertEqual join([temp_plugged, 'vim-emoji/'], '/'), g:plugs['vim-emoji'].dir
  76. " vim-scripts/
  77. Plug 'beauty256'
  78. AssertEqual 'https://git:@github.com/vim-scripts/beauty256.git', g:plugs.beauty256.uri
  79. AssertEqual 'master', g:plugs.beauty256.branch
  80. AssertEqual 4, len(g:plugs)
  81. Execute (Plug command with dictionary option):
  82. Log string(g:plugs)
  83. Plug 'junegunn/seoul256.vim', { 'branch': 'no-t_co', 'rtp': '././' }
  84. AssertEqual join([temp_plugged, 'seoul256.vim/'], '/'), g:plugs['seoul256.vim'].dir
  85. AssertEqual '././', g:plugs['seoul256.vim'].rtp
  86. Log string(g:plugs)
  87. AssertEqual 4, len(g:plugs)
  88. Execute (PlugStatus before installation):
  89. PlugStatus
  90. AssertExpect 'Not found', 4
  91. q
  92. Execute (PlugClean before installation):
  93. PlugClean
  94. AssertExpect 'Already clean', 1
  95. q
  96. Execute (plug#end() updates &rtp):
  97. call plug#end()
  98. Assert len(&rtp) > len(basertp)
  99. AssertEqual first_rtp, split(&rtp, ',')[0]
  100. AssertEqual last_rtp, split(&rtp, ',')[-1]
  101. Execute (Yet, plugins are not available):
  102. Assert empty(globpath(&rtp, 'autoload/emoji.vim'))
  103. Execute (PlugInstall):
  104. PlugInstall
  105. q
  106. Execute (Plugin available after installation):
  107. Assert !empty(globpath(&rtp, 'autoload/emoji.vim'))
  108. Execute (PlugClean after installation):
  109. PlugClean
  110. AssertExpect 'Already clean', 1
  111. q
  112. Execute (PlugStatus after installation):
  113. PlugStatus
  114. Log getline(1, '$')
  115. AssertExpect 'OK', 4
  116. q
  117. Execute (Change tag of goyo.vim):
  118. call plug#begin()
  119. Plug 'junegunn/goyo.vim'
  120. call plug#end()
  121. Execute (PlugStatus):
  122. call PlugStatusSorted()
  123. Expect:
  124. Invalid branch/tag: 1.5.3 (expected: master). Try PlugUpdate.
  125. Finished. 1 error(s).
  126. [=]
  127. x goyo.vim:
  128. Execute (PlugUpdate to set the right branch):
  129. PlugUpdate
  130. call PlugStatusSorted()
  131. Expect:
  132. - goyo.vim: OK
  133. Finished. 0 error(s).
  134. [=]
  135. Execute (Change branch of seoul256.vim):
  136. call plug#begin()
  137. Plug 'junegunn/seoul256.vim'
  138. Plug 'https://bitbucket.org/junegunn/vim-emoji.git'
  139. call plug#end()
  140. Execute (PlugStatus):
  141. call PlugStatusSorted()
  142. Expect:
  143. Invalid branch/tag: no-t_co (expected: master). Try PlugUpdate.
  144. - vim-emoji: OK
  145. Finished. 1 error(s).
  146. [==]
  147. x seoul256.vim:
  148. Execute (Change URI of seoul256.vim):
  149. call plug#begin()
  150. Plug 'junegunn.choi/seoul256.vim'
  151. Plug 'https://bitbucket.org/junegunn/vim-emoji.git'
  152. call plug#end()
  153. Execute (PlugStatus):
  154. call PlugStatusSorted()
  155. Expect:
  156. Expected: https://git:@github.com/junegunn.choi/seoul256.vim.git
  157. Invalid URI: https://git:@github.com/junegunn/seoul256.vim.git
  158. PlugClean required.
  159. - vim-emoji: OK
  160. Finished. 1 error(s).
  161. [==]
  162. x seoul256.vim:
  163. # TODO: does not work due to inputsave()
  164. # Do (PlugClean):
  165. # :PlugClean\<Enter>y\<Enter>
  166. # ggyG
  167. # q
  168. # PGdd
  169. Execute (PlugClean! to remove seoul256.vim):
  170. PlugClean!
  171. " Three removed, emoji left
  172. AssertExpect '^- ', 3
  173. AssertExpect 'Removed', 1
  174. Assert empty(globpath(&rtp, 'colors/seoul256.vim'))
  175. Assert !empty(globpath(&rtp, 'autoload/emoji.vim'))
  176. q
  177. Execute (Change GIT URI of vim-emoji):
  178. call plug#begin()
  179. Plug 'junegunn/seoul256.vim'
  180. Plug 'junegunn/vim-emoji'
  181. call plug#end()
  182. Execute (PlugStatus):
  183. call PlugStatusSorted()
  184. Expect:
  185. Expected: https://git:@github.com/junegunn/vim-emoji.git
  186. Invalid URI: https://bitbucket.org/junegunn/vim-emoji.git
  187. Not found. Try PlugInstall.
  188. PlugClean required.
  189. Finished. 2 error(s).
  190. [==]
  191. x seoul256.vim:
  192. x vim-emoji:
  193. Execute (PlugClean! to remove vim-emoji):
  194. PlugClean!
  195. AssertExpect '^- ', 1
  196. AssertExpect 'Removed', 1
  197. Assert empty(globpath(&rtp, 'colors/seoul256.vim'))
  198. Assert empty(globpath(&rtp, 'autoload/emoji.vim'))
  199. q
  200. Execute (PlugUpdate to install both again):
  201. PlugUpdate
  202. AssertExpect '^- [^:]*:', 2
  203. Assert !empty(globpath(&rtp, 'colors/seoul256.vim')), 'seoul256.vim should be found'
  204. Assert !empty(globpath(&rtp, 'autoload/emoji.vim')), 'vim-emoji should be found'
  205. q
  206. Execute (PlugUpdate only to find out plugins are up-to-date, D key to check):
  207. PlugUpdate
  208. AssertExpect 'Already up-to-date', 2
  209. normal D
  210. AssertEqual 'No updates.', getline(1)
  211. q
  212. Execute (PlugDiff - 'No updates.'):
  213. PlugDiff
  214. AssertEqual 'No updates.', getline(1)
  215. q
  216. Execute (Rollback recent updates, PlugUpdate, then PlugDiff):
  217. for repo in ['seoul256.vim', 'vim-emoji']
  218. call system(printf('cd %s/%s && git reset HEAD^^ --hard', g:plug_home, repo))
  219. endfor
  220. PlugUpdate
  221. " Now we have updates
  222. normal D
  223. AssertEqual 'Last update:', getline(1)
  224. " Preview commit
  225. silent! wincmd P
  226. AssertEqual 0, &previewwindow
  227. " ]] motion
  228. execute 'normal ]]'
  229. let lnum = line('.')
  230. AssertEqual 3, col('.')
  231. " Open commit preview
  232. execute "normal j\<cr>"
  233. wincmd P
  234. AssertEqual 1, &previewwindow
  235. AssertEqual 'git', &filetype
  236. " Back to plug window
  237. wincmd p
  238. " ]] motion
  239. execute 'normal $]]'
  240. AssertEqual lnum + 4, line('.')
  241. AssertEqual 3, col('.')
  242. " [[ motion
  243. execute 'normal 0[['
  244. AssertEqual lnum, line('.')
  245. AssertEqual 3, col('.')
  246. " q will close preview window as well
  247. normal q
  248. " We no longer have preview window
  249. silent! wincmd P
  250. AssertEqual 0, &previewwindow
  251. " q should not close preview window if it's already open
  252. pedit
  253. PlugDiff
  254. execute "normal ]]j\<cr>"
  255. normal q
  256. silent! wincmd P
  257. AssertEqual 1, &previewwindow
  258. pclose
  259. Execute (Plug window in a new tab):
  260. PlugDiff
  261. tab new new-tab
  262. set buftype=nofile
  263. PlugUpdate
  264. normal D
  265. AssertEqual 'No updates.', getline(1)
  266. q
  267. AssertEqual 'new-tab', expand('%')
  268. q
  269. q
  270. **********************************************************************
  271. ~ On-demand loading / Partial installation/update ~
  272. **********************************************************************
  273. Execute (Trying to execute on-demand commands when plugin is not installed):
  274. call plug#begin()
  275. Plug 'junegunn/vim-easy-align', { 'on': ['EasyAlign', 'LiveEasyAlign'] }
  276. call plug#end()
  277. Assert exists(':EasyAlign')
  278. Assert exists(':LiveEasyAlign')
  279. AssertThrows EasyAlign
  280. AssertThrows LiveEasyAlign
  281. Assert !exists(':EasyAlign')
  282. Assert !exists(':LiveEasyAlign')
  283. Execute (New set of plugins):
  284. call plug#begin()
  285. Plug 'junegunn/vim-fnr'
  286. Plug 'junegunn/vim-pseudocl'
  287. Plug 'junegunn/vim-easy-align', { 'on': 'EasyAlign' }
  288. Plug 'junegunn/vim-redis', { 'for': 'redis' }
  289. call plug#end()
  290. Execute (Check commands):
  291. Assert !exists(':FNR'), 'FNR command should not be found'
  292. Assert !exists(':RedisExecute'), 'RedisExecute command should not be found'
  293. Execute (Partial PlugInstall):
  294. PlugInstall vim-fnr vim-easy-align
  295. AssertExpect 'vim-fnr', 1
  296. q
  297. PlugInstall vim-fnr vim-easy-align 1
  298. AssertExpect 'vim-fnr', 1
  299. AssertExpect 'vim-easy-align', 1
  300. AssertEqual first_rtp, split(&rtp, ',')[0]
  301. AssertEqual last_rtp, split(&rtp, ',')[-1]
  302. q
  303. Given (Unaligned code):
  304. a=1
  305. aa=2
  306. Execute (Check installed plugins):
  307. if has('vim_starting')
  308. Log 'Vader is run from commandline'
  309. runtime! plugin/**/*.vim
  310. endif
  311. Assert exists(':FNR'), 'FNR command should be found'
  312. Assert !exists(':RedisExecute'), 'RedisExecute command still should not be found'
  313. Assert exists(':EasyAlign'), 'EasyAlign command should be found'
  314. %EasyAlign=
  315. Expect (Aligned code):
  316. a = 1
  317. aa = 2
  318. Given:
  319. Execute (Partial PlugUpdate):
  320. PlugUpdate vim-redis
  321. q
  322. Execute (On-demand loading based on filetypes):
  323. Assert !exists(':RedisExecute'), 'RedisExecute command still should not be found'
  324. set ft=redis
  325. Assert exists(':RedisExecute'), 'RedisExecute command is now found'
  326. **********************************************************************
  327. ~ Local (unmanaged) plugins
  328. **********************************************************************
  329. Execute (Add unmanaged plugin):
  330. let fzf = fnamemodify(g:vader_file, ':h') . '/fzf'
  331. Log fzf
  332. call plug#begin()
  333. Plug fzf, { 'on': 'SomeCommand' }
  334. call plug#end()
  335. " Check uri field
  336. Assert !has_key(g:plugs.fzf, 'uri'), 'Should not have uri field'
  337. " Check dir field
  338. AssertEqual fzf.'/', g:plugs.fzf.dir
  339. " Trailing slashes and backslashes should be stripped
  340. for suffix in ['///', '/\/\/']
  341. call plug#begin()
  342. Plug fzf.suffix, { 'on': 'SomeCommand' }
  343. call plug#end()
  344. " Check dir field
  345. AssertEqual fzf.'/', g:plugs.fzf.dir
  346. endfor
  347. Execute (Plug block for following tests):
  348. call plug#begin()
  349. Plug 'junegunn/vim-easy-align'
  350. Plug fzf, { 'on': 'SomeCommand' }
  351. call plug#end()
  352. " Remove plugins from previous tests
  353. PlugClean!
  354. Execute (PlugInstall will only install vim-easy-align):
  355. PlugInstall
  356. Log getline(1, '$')
  357. AssertExpect 'fzf', 0
  358. q
  359. Execute (PlugUpdate will only update vim-easy-align):
  360. PlugUpdate
  361. Log getline(1, '$')
  362. AssertExpect 'fzf', 0
  363. q
  364. Execute (PlugClean should not care about unmanaged plugins):
  365. PlugClean
  366. Log getline(1, '$')
  367. AssertExpect 'fzf', 0
  368. q
  369. Execute (PlugStatus should point out that the plugin is missing):
  370. PlugStatus
  371. Log getline(1, '$')
  372. AssertExpect 'x fzf', 1
  373. AssertExpect 'Not found', 1
  374. q
  375. Execute (Deploy unmanaged plugin):
  376. Assert !exists(':FZF'), ':FZF command should not exist'
  377. call rename('fzf-staged', 'fzf')
  378. Execute (PlugUpdate still should not care):
  379. PlugUpdate
  380. Log getline(1, '$')
  381. AssertExpect 'fzf', 0
  382. q
  383. Execute (PlugStatus with no error):
  384. PlugStatus
  385. Log getline(1, '$')
  386. AssertExpect 'x fzf', 0
  387. AssertExpect 'Not found', 0
  388. q
  389. Execute (Check &rtp after SomeCommand):
  390. Log &rtp
  391. Assert &rtp !~ 'fzf'
  392. silent! SomeCommand
  393. Assert &rtp =~ 'fzf'
  394. AssertEqual first_rtp, split(&rtp, ',')[0]
  395. AssertEqual last_rtp, split(&rtp, ',')[-1]
  396. Execute (Common parent):
  397. call plug#begin()
  398. Plug 'junegunn/vim-pseudocl'
  399. Plug 'junegunn/vim-fnr'
  400. Plug 'junegunn/vim-oblique'
  401. call plug#end()
  402. PlugInstall
  403. Log getline(1, '$')
  404. AssertExpect! '[===]', 1
  405. q
  406. **********************************************************************
  407. ~ Frozen plugins
  408. **********************************************************************
  409. Execute (Frozen plugin are not installed nor updated):
  410. call plug#begin()
  411. Plug 'junegunn/vim-easy-align', { 'frozen': 1 }
  412. call plug#end()
  413. redir => output
  414. silent PlugInstall
  415. redir END
  416. Assert output =~ 'No plugin to install'
  417. redir => output
  418. silent PlugUpdate
  419. redir END
  420. Assert output =~ 'No plugin to update'
  421. Execute (But you can still install it if the name is given as the argument):
  422. PlugInstall vim-easy-align
  423. Log getline(1, '$')
  424. AssertEqual 1, len(filter(getline(1, '$'), 'v:val =~ "vim-easy-align"'))
  425. q
  426. PlugUpdate vim-easy-align
  427. Log getline(1, '$')
  428. AssertEqual 1, len(filter(getline(1, '$'), 'v:val =~ "vim-easy-align"'))
  429. q
  430. **********************************************************************
  431. ~ Retry
  432. **********************************************************************
  433. Execute (Retry failed tasks):
  434. call plug#begin()
  435. Plug 'junegunn/vim-easy-align'
  436. Plug 'junegunn/aaaaaaaaaaaaaa'
  437. call plug#end()
  438. PlugInstall
  439. Log getline(1, '$')
  440. AssertExpect 'x aaa', 1
  441. AssertExpect '- vim-easy-align', 1
  442. normal R
  443. Log getline(1, '$')
  444. AssertExpect 'x aaa', 1
  445. AssertExpect '- vim-easy-align', 0
  446. AssertExpect! '[x]', 1
  447. q
  448. call plug#begin()
  449. Plug 'junegunn/vim-easy-align'
  450. Plug 'junegunn/aaaaaaaaaaaaaa'
  451. Plug 'junegunn/bbbbbbbbbbbbbb'
  452. Plug 'junegunn/cccccccccccccc'
  453. call plug#end()
  454. " Ruby installer
  455. PlugUpdate
  456. normal R
  457. AssertExpect '- vim-easy-align', 0
  458. AssertExpect! '[xxx]', 1
  459. q
  460. " Vim installer
  461. PlugUpdate 1
  462. normal R
  463. AssertExpect '- vim-easy-align', 0
  464. AssertExpect! '[xxx]', 1
  465. q
  466. **********************************************************************
  467. ~ Post-update hook (`do` option)
  468. **********************************************************************
  469. Execute (Cleanup):
  470. call plug#begin()
  471. call plug#end()
  472. PlugClean!
  473. Execute (On install):
  474. call plug#begin()
  475. Plug 'junegunn/vim-easy-align', { 'do': 'touch installed' }
  476. Plug 'junegunn/vim-pseudocl'
  477. call plug#end()
  478. PlugInstall
  479. q
  480. Assert filereadable(g:plugs['vim-easy-align'].dir.'/installed'),
  481. \ 'vim-easy-align/installed should exist'
  482. Assert !filereadable(g:plugs['vim-pseudocl'].dir.'/installed'),
  483. \ 'vim-pseudocl/installed should not exist'
  484. Execute (On update):
  485. call plug#begin()
  486. Plug 'junegunn/vim-easy-align', { 'do': 'touch updated' }
  487. Plug 'junegunn/vim-pseudocl', { 'do': 'touch updated' }
  488. call plug#end()
  489. " Reset for updates
  490. call system('cd '.g:plugs['vim-pseudocl'].dir.' && git reset --hard HEAD^')
  491. PlugUpdate
  492. Log getline(1, '$')
  493. q
  494. Assert !filereadable(g:plugs['vim-easy-align'].dir.'/updated'),
  495. \ 'vim-easy-align/updated should not exist'
  496. Assert filereadable(g:plugs['vim-pseudocl'].dir.'/updated'),
  497. \ 'vim-pseudocl/updated should exist'
  498. Execute (When already installed):
  499. call plug#begin()
  500. Plug 'junegunn/vim-easy-align', { 'do': 'touch installed2' }
  501. Plug 'junegunn/vim-pseudocl', { 'do': 'touch installed2' }
  502. call plug#end()
  503. PlugInstall
  504. q
  505. Assert !filereadable(g:plugs['vim-easy-align'].dir.'/installed2'),
  506. \ 'vim-easy-align/installed2 should not exist'
  507. Assert !filereadable(g:plugs['vim-pseudocl'].dir.'/installed2'),
  508. \ 'vim-pseudocl/installed2 should exist'
  509. Execute (When already updated):
  510. call plug#begin()
  511. Plug 'junegunn/vim-easy-align', { 'do': 'touch updated2' }
  512. Plug 'junegunn/vim-pseudocl', { 'do': 'touch updated2' }
  513. call plug#end()
  514. PlugUpdate
  515. q
  516. Assert !filereadable(g:plugs['vim-easy-align'].dir.'/updated2'),
  517. \ 'vim-easy-align/updated2 should not exist'
  518. Assert !filereadable(g:plugs['vim-pseudocl'].dir.'/updated2'),
  519. \ 'vim-pseudocl/updated2 should exist'
  520. Execute (Using Funcref):
  521. function! PlugUpdated(info)
  522. call system('touch '. a:info.name . a:info.status . len(a:info))
  523. endfunction
  524. call plug#begin()
  525. Plug 'junegunn/vim-easy-align', { 'do': function('PlugUpdated') }
  526. Plug 'junegunn/vim-pseudocl', { 'do': function('PlugUpdated') }
  527. call plug#end()
  528. call system('cd '.g:plugs['vim-easy-align'].dir.' && git reset --hard HEAD^')
  529. call system('rm -rf '.g:plugs['vim-pseudocl'].dir)
  530. PlugUpdate
  531. Log getline(1, '$')
  532. q
  533. Assert filereadable(g:plugs['vim-easy-align'].dir.'/vim-easy-alignupdated2'),
  534. \ 'vim-easy-align/vim-easy-alignupdated2 should exist'
  535. Assert filereadable(g:plugs['vim-pseudocl'].dir.'/vim-pseudoclinstalled2'),
  536. \ 'vim-pseudocl/vim-pseudoclinstalled2 should exist'
  537. **********************************************************************
  538. ~ Overriding `dir`
  539. **********************************************************************
  540. Execute (Using custom dir):
  541. Assert isdirectory(g:plugs['vim-easy-align'].dir)
  542. call system('rm -rf '.$TMPDIR.'easy-align')
  543. call plug#begin()
  544. Plug 'junegunn/vim-easy-align', { 'dir': $TMPDIR.'easy-align' }
  545. call plug#end()
  546. AssertEqual $TMPDIR.'easy-align/', g:plugs['vim-easy-align'].dir
  547. PlugClean!
  548. Assert !isdirectory(g:plugs['vim-easy-align'].dir)
  549. q
  550. PlugInstall
  551. q
  552. Assert isdirectory(g:plugs['vim-easy-align'].dir)
  553. **********************************************************************
  554. ~ On-demand loading load order
  555. **********************************************************************
  556. Before (Clear global vars):
  557. let g:xxx = []
  558. set rtp-=$PWD/xxx/
  559. set rtp-=$PWD/xxx/after
  560. Execute (Immediate loading):
  561. call plug#begin()
  562. Plug '$PWD/xxx'
  563. call plug#end()
  564. " FIXME:
  565. " Different result when Vader is run from commandline with `-c` option
  566. Log g:xxx
  567. if has('vim_starting')
  568. AssertEqual ['/ftdetect', 'after/ftdetect'], g:xxx
  569. else
  570. AssertEqual ['/plugin', 'after/plugin', '/ftdetect', 'after/ftdetect'], g:xxx
  571. endif
  572. Execute (Command-based on-demand loading):
  573. call plug#begin()
  574. Plug '$PWD/xxx', { 'on': 'XXX' }
  575. call plug#end()
  576. AssertEqual [], g:xxx
  577. silent! XXX
  578. AssertEqual ['/ftdetect', 'after/ftdetect', '/plugin', 'after/plugin'], g:xxx
  579. setf xxx
  580. AssertEqual ['/ftdetect', 'after/ftdetect', '/plugin', 'after/plugin', '/ftplugin', 'after/ftplugin', '/indent', 'after/indent', '/syntax', 'after/syntax'], g:xxx
  581. Execute (Filetype-based on-demand loading):
  582. call plug#begin()
  583. Plug '$PWD/xxx', { 'for': 'xxx' }
  584. call plug#end()
  585. AssertEqual ['/ftdetect', 'after/ftdetect'], g:xxx
  586. setf xxx
  587. AssertEqual ['/ftdetect', 'after/ftdetect', '/plugin', 'after/plugin', '/ftplugin', 'after/ftplugin', '/indent', 'after/indent', '/syntax', 'after/syntax'], g:xxx
  588. Before:
  589. Execute (Cleanup):
  590. silent! call system('rm -rf '.temp_plugged)
  591. silent! call rename('fzf', 'fzf-staged')
  592. silent! unlet g:plugs
  593. silent! unlet g:plug_home
  594. silent! unlet temp_plugged vader plug basertp save_rtp repo lnum fzf out
  595. silent! delf PlugStatusSorted
  596. silent! delf AssertExpect
  597. silent! delf PlugUpdated
  598. silent! delc AssertExpect
  599. silent! unmap /
  600. silent! unmap ?
  601. Restore