mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-01-24 03:00:06 +08:00
110 lines
5.0 KiB
VimL
110 lines
5.0 KiB
VimL
let s:suite = themis#suite('Test for nerdtree-git-plugin')
|
|
let s:assert = themis#helper('assert')
|
|
call themis#helper('command').with(s:)
|
|
|
|
function! s:suite.Initializing() abort
|
|
NERDTreeFocus
|
|
call s:assert.exists('g:NERDTree')
|
|
call s:assert.exists('g:loaded_nerdtree_git_status')
|
|
call g:NERDTree.CursorToTreeWin()
|
|
call s:assert.exists('b:NERDTree')
|
|
endfunction
|
|
|
|
function! s:suite.BuildGitWorkdirCommand() abort
|
|
let l:cmd = gitstatus#util#BuildGitWorkdirCommand('/workdir', {})
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'rev-parse', '--show-toplevel'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitWorkdirCommand('/workdir', {'NERDTreeGitStatusGitBinPath': '/path/to/git'})
|
|
call s:assert.equal(l:cmd, ['/path/to/git', '-C', '/workdir', 'rev-parse', '--show-toplevel'])
|
|
endfunction
|
|
|
|
function! s:suite.BuildGitStatusCommand() abort
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {})
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain=v2', '-z'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {
|
|
\ 'NERDTreeGitStatusPorcelainVersion': 1
|
|
\ })
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain', '-z'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {
|
|
\ 'NERDTreeGitStatusUntrackedFilesMode': 'all'
|
|
\ })
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain=v2', '-z', '--untracked-files=all'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {
|
|
\ 'NERDTreeGitStatusShowIgnored': 1
|
|
\ })
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain=v2', '-z', '--ignored=traditional'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {
|
|
\ 'NERDTreeGitStatusShowIgnored': 0
|
|
\ })
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain=v2', '-z'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {
|
|
\ 'NERDTreeGitStatusIgnoreSubmodules': 'dirty'
|
|
\ })
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain=v2', '-z', '--ignore-submodules=dirty'])
|
|
|
|
let l:cmd = gitstatus#util#BuildGitStatusCommand('/workdir', {
|
|
\ 'NERDTreeGitStatusPorcelainVersion': 1,
|
|
\ 'NERDTreeGitStatusUntrackedFilesMode': 'all',
|
|
\ 'NERDTreeGitStatusShowIgnored': 1,
|
|
\ 'NERDTreeGitStatusIgnoreSubmodules': 'dirty'
|
|
\ })
|
|
call s:assert.equal(l:cmd, ['git', '-C', '/workdir', 'status', '--porcelain', '-z',
|
|
\ '--untracked-files=all',
|
|
\ '--ignored=traditional',
|
|
\ '--ignore-submodules=dirty'])
|
|
endfunction
|
|
|
|
function! s:suite.Logger() abort
|
|
let l:logger = gitstatus#log#NewLogger(1) " info
|
|
let l:messages = execute('messages')
|
|
|
|
call l:logger.debug('debug')
|
|
call s:assert.equal(execute('messages'), l:messages)
|
|
|
|
call l:logger.error('error')
|
|
call s:assert.equal(execute('messages'), l:messages . "\n[nerdtree-git-status] error")
|
|
endfunction
|
|
|
|
function! s:suite.CustomIndicator() abort
|
|
let g:NERDTreeGitStatusIndicatorMapCustom = {'Untracked': '~'}
|
|
|
|
let l:staged = gitstatus#getIndicator('Staged')
|
|
|
|
call s:assert.equal(gitstatus#getIndicator('Staged'), l:staged)
|
|
call s:assert.equal(gitstatus#getIndicator('Untracked'), '~')
|
|
|
|
" Vim(return):E716: Key not present in Dictionary
|
|
Throws /E716/ gitstatus#getIndicator('no such status')
|
|
endfunction
|
|
|
|
function! s:suite.UpdateParentDirsStatus() abort
|
|
let l:opts = {'NERDTreeGitStatusDirDirtyOnly': 1}
|
|
let l:root = '/root'
|
|
let l:cache = {}
|
|
let l:pathStr = '/root/dir1/dir2/dir3'
|
|
let l:cache[l:pathStr] = 'Untracked'
|
|
call gitstatus#util#UpdateParentDirsStatus(l:cache, l:root, l:pathStr, 'Untracked', l:opts)
|
|
call s:assert.equal({'/root/dir1': 'Dirty', '/root/dir1/dir2': 'Dirty', '/root/dir1/dir2/dir3': 'Untracked'}, l:cache)
|
|
|
|
let l:pathStr = '/root/dir1/dir2/file0'
|
|
let l:cache[l:pathStr] = 'Staged'
|
|
call gitstatus#util#UpdateParentDirsStatus(l:cache, l:root, l:pathStr, 'Staged', l:opts)
|
|
call s:assert.equal({'/root/dir1': 'Dirty', '/root/dir1/dir2': 'Dirty', '/root/dir1/dir2/dir3': 'Untracked', '/root/dir1/dir2/file0': 'Staged'}, l:cache)
|
|
|
|
let l:opts = {'NERDTreeGitStatusDirDirtyOnly': 0}
|
|
let l:cache = {}
|
|
let l:pathStr = '/root/dir1/dir2/dir3'
|
|
let l:cache[l:pathStr] = 'Untracked'
|
|
call gitstatus#util#UpdateParentDirsStatus(l:cache, l:root, l:pathStr, 'Untracked', l:opts)
|
|
call s:assert.equal({'/root/dir1': 'Untracked', '/root/dir1/dir2': 'Untracked', '/root/dir1/dir2/dir3': 'Untracked'}, l:cache)
|
|
|
|
let l:cache['/root/dir1/file1'] = 'Staged'
|
|
call gitstatus#util#UpdateParentDirsStatus(l:cache, l:root, '/root/dir1/file1', 'Staged', l:opts)
|
|
call s:assert.equal({'/root/dir1': 'Dirty','/root/dir1/file1': 'Staged', '/root/dir1/dir2': 'Untracked', '/root/dir1/dir2/dir3': 'Untracked'}, l:cache)
|
|
endfunction
|