Add a unit test for the loclist comparison function.

This commit is contained in:
w0rp 2016-10-13 20:56:18 +01:00
parent 5ca7cc14f3
commit f506887b28
3 changed files with 42 additions and 21 deletions

View File

@ -103,7 +103,7 @@ function! s:HandleExit(job) abort
" Sort the loclist again.
" We need a sorted list so we can run a binary search against it
" for efficient lookup of the messages in the cursor handler.
call sort(g:ale_buffer_loclist_map[l:buffer], 's:LocItemCompare')
call sort(g:ale_buffer_loclist_map[l:buffer], 'ale#util#LocItemCompare')
if g:ale_set_loclist
call setloclist(0, g:ale_buffer_loclist_map[l:buffer])
@ -149,26 +149,6 @@ function! s:FixLocList(buffer, loclist) abort
endfor
endfunction
function! s:LocItemCompare(left, right) abort
if a:left['lnum'] < a:right['lnum']
return -1
endif
if a:left['lnum'] > a:right['lnum']
return 1
endif
if a:left['col'] < a:right['col']
return -1
endif
if a:left['col'] > a:right['col']
return 1
endif
return 0
endfunction
function! ale#engine#Invoke(buffer, linter) abort
if has_key(a:linter, 'job')
" Stop previous jobs for the same linter.

View File

@ -43,3 +43,23 @@ function! ale#util#GetFunction(string_or_ref) abort
return a:string_or_ref
endfunction
function! ale#util#LocItemCompare(left, right) abort
if a:left['lnum'] < a:right['lnum']
return -1
endif
if a:left['lnum'] > a:right['lnum']
return 1
endif
if a:left['col'] < a:right['col']
return -1
endif
if a:left['col'] > a:right['col']
return 1
endif
return 0
endfunction

View File

@ -0,0 +1,21 @@
Before:
let g:loclist = [
\ {'lnum': 5, 'col': 5},
\ {'lnum': 5, 'col': 4},
\ {'lnum': 2, 'col': 10},
\ {'lnum': 3, 'col': 2},
\]
Execute (Sort loclist with comparison function):
call sort(g:loclist, 'ale#util#LocItemCompare')
Then (loclist item should be sorted):
AssertEqual g:loclist, [
\ {'lnum': 2, 'col': 10},
\ {'lnum': 3, 'col': 2},
\ {'lnum': 5, 'col': 4},
\ {'lnum': 5, 'col': 5},
\]
After:
unlet g:loclist