254 lines
7.9 KiB
VimL
254 lines
7.9 KiB
VimL
" Author: Eric Van Dewoestine
|
|
"
|
|
" Description: {{{
|
|
" see http://eclim.org/vim/java/junit.html
|
|
"
|
|
" License:
|
|
"
|
|
" Copyright (C) 2005 - 2014 Eric Van Dewoestine
|
|
"
|
|
" This program is free software: you can redistribute it and/or modify
|
|
" it under the terms of the GNU General Public License as published by
|
|
" the Free Software Foundation, either version 3 of the License, or
|
|
" (at your option) any later version.
|
|
"
|
|
" This program is distributed in the hope that it will be useful,
|
|
" but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
" GNU General Public License for more details.
|
|
"
|
|
" You should have received a copy of the GNU General Public License
|
|
" along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
"
|
|
" }}}
|
|
|
|
" Script Variables {{{
|
|
let s:command_junit = '-command java_junit -p "<project>"'
|
|
let s:command_tests = '-command java_junit_tests -p "<project>"'
|
|
let s:command_find_test =
|
|
\ '-command java_junit_find_test -p "<project>" -f "<file>" ' .
|
|
\ '-o <offset> -e <encoding>'
|
|
let s:command_impl = '-command java_junit_impl -p "<project>" -f "<file>"'
|
|
let s:command_insert =
|
|
\ '-command java_junit_impl -p "<project>" -f "<file>" ' .
|
|
\ '-t "<type>" -s "<superType>" <methods>'
|
|
" }}}
|
|
|
|
function! eclim#java#junit#JUnit(test, bang) " {{{
|
|
let project = eclim#project#util#GetCurrentProjectName()
|
|
if project == '' && exists('b:project')
|
|
let project = b:project
|
|
endif
|
|
|
|
if project == ''
|
|
call eclim#project#util#IsCurrentFileInProject()
|
|
return
|
|
endif
|
|
|
|
Validate
|
|
if len(getloclist(0)) > 0
|
|
call eclim#util#EchoError('Test case contains validation errors.')
|
|
return
|
|
endif
|
|
|
|
let command = s:command_junit
|
|
let command = substitute(command, '<project>', project, '')
|
|
if a:test != ''
|
|
if a:test == '%'
|
|
let command .= ' -f "' . eclim#project#util#GetProjectRelativeFilePath() . '"'
|
|
elseif a:test != '*'
|
|
let command .= ' -t "' . a:test . '"'
|
|
endif
|
|
else
|
|
let command .= ' -f "' . eclim#project#util#GetProjectRelativeFilePath() . '"'
|
|
let command .= ' -o ' . eclim#util#GetOffset()
|
|
let command .= ' -e ' . eclim#util#GetEncoding()
|
|
endif
|
|
|
|
let curbuf = bufnr('%')
|
|
let result = eclim#Execute(command, {'project': project, 'exec': 1, 'raw': 1})
|
|
let results = split(substitute(result, "^\n*", '', 'g'), "\n")
|
|
call eclim#util#TempWindow('[JUnit Output]', results)
|
|
let b:project = project
|
|
|
|
if exists(":JUnit") != 2
|
|
command -buffer -nargs=? -complete=customlist,eclim#java#junit#CommandCompleteTest
|
|
\ JUnit :call eclim#java#junit#JUnit('<args>', '<bang>')
|
|
endif
|
|
|
|
exec bufwinnr(curbuf) . 'winc w'
|
|
endfunction " }}}
|
|
|
|
function! eclim#java#junit#JUnitFindTest() " {{{
|
|
if !eclim#project#util#IsCurrentFileInProject()
|
|
return
|
|
endif
|
|
|
|
runtime eclim/autoload/eclim/java/search.vim
|
|
|
|
let project = eclim#project#util#GetCurrentProjectName()
|
|
let file = eclim#lang#SilentUpdate()
|
|
let command = s:command_find_test
|
|
let command = substitute(command, '<project>', project, '')
|
|
let command = substitute(command, '<file>', file, '')
|
|
let command = substitute(command, '<offset>', eclim#util#GetOffset(), '')
|
|
let command = substitute(command, '<encoding>', eclim#util#GetEncoding(), '')
|
|
let result = eclim#Execute(command)
|
|
if type(result) == g:STRING_TYPE
|
|
call eclim#util#EchoError(result)
|
|
return
|
|
endif
|
|
|
|
if type(result) != g:DICT_TYPE
|
|
return
|
|
endif
|
|
|
|
call eclim#util#SetLocationList(eclim#util#ParseLocationEntries([result]))
|
|
let entry = getloclist(0)[0]
|
|
let name = substitute(bufname(entry.bufnr), '\', '/', 'g')
|
|
if g:EclimJavaSearchSingleResult != 'lopen'
|
|
call eclim#util#GoToBufferWindowOrOpen(name, g:EclimJavaSearchSingleResult)
|
|
call eclim#util#SetLocationList(eclim#util#ParseLocationEntries([result]))
|
|
call eclim#display#signs#Update()
|
|
call cursor(entry.lnum, entry.col)
|
|
else
|
|
exec 'lopen ' . g:EclimLocationListHeight
|
|
endif
|
|
endfunction " }}}
|
|
|
|
function! eclim#java#junit#JUnitResult(test) " {{{
|
|
" Argument test can be one of the following:
|
|
" Empty string: Use the current file to determine the test result file.
|
|
" Class name of a test: Locate the results for class (ex. 'TestMe').
|
|
" The results dir relative results file name: TEST-org.foo.TestMe.xml
|
|
|
|
let path = s:GetResultsDir()
|
|
if path == ''
|
|
call eclim#util#EchoWarning(
|
|
\ "Output directory setting for 'junit' not set. " .
|
|
\ "Use :WorkspaceSettings or :ProjectSettings to set it.")
|
|
return
|
|
endif
|
|
|
|
if a:test != ''
|
|
let file = a:test
|
|
if file !~ '^TEST-'
|
|
let file = '*' . file
|
|
endif
|
|
else
|
|
let file = substitute(eclim#java#util#GetFullyQualifiedClassname(), '\.', '/', 'g')
|
|
endif
|
|
|
|
if file !~ '^TEST-'
|
|
let file = substitute(file, '\/', '.', 'g')
|
|
let file = 'TEST-' . file . '.xml'
|
|
endif
|
|
|
|
let found = eclim#util#Globpath(path, file)
|
|
|
|
" try text version if xml not found.
|
|
if found == ""
|
|
let file = fnamemodify(file, ':r') . '.txt'
|
|
let found = eclim#util#Globpath(path, file)
|
|
endif
|
|
|
|
if found != ""
|
|
let filename = expand('%:p')
|
|
exec "below split " . escape(found, ' ')
|
|
|
|
augroup temp_window
|
|
autocmd! BufWinLeave <buffer>
|
|
call eclim#util#GoToBufferWindowRegister(filename)
|
|
augroup END
|
|
|
|
return
|
|
endif
|
|
call eclim#util#Echo("Test result file not found for: " . fnamemodify(file, ':r'))
|
|
endfunction " }}}
|
|
|
|
function! eclim#java#junit#JUnitImpl() " {{{
|
|
if !eclim#project#util#IsCurrentFileInProject()
|
|
return
|
|
endif
|
|
|
|
call eclim#lang#SilentUpdate()
|
|
|
|
let project = eclim#project#util#GetCurrentProjectName()
|
|
let file = eclim#project#util#GetProjectRelativeFilePath()
|
|
let command = s:command_impl
|
|
let command = substitute(command, '<project>', project, '')
|
|
let command = substitute(command, '<file>', file, '')
|
|
call eclim#java#junit#JUnitImplWindow(command)
|
|
endfunction " }}}
|
|
|
|
function! eclim#java#junit#JUnitImplWindow(command) " {{{
|
|
if (eclim#java#impl#Window(a:command, "impl"))
|
|
nnoremap <silent> <buffer> <cr> :call <SID>AddTestImpl(0)<cr>
|
|
vnoremap <silent> <buffer> <cr> :<C-U>call <SID>AddTestImpl(1)<cr>
|
|
endif
|
|
endfunction " }}}
|
|
|
|
function! s:AddTestImpl(visual) " {{{
|
|
call eclim#java#impl#Add
|
|
\ (s:command_insert, function("eclim#java#junit#JUnitImplWindow"), a:visual)
|
|
endfunction " }}}
|
|
|
|
function! s:GetResultsDir() " {{{
|
|
let path = eclim#project#util#GetProjectSetting("org.eclim.java.junit.output_dir")
|
|
if type(path) == g:NUMBER_TYPE
|
|
return
|
|
endif
|
|
|
|
let root = eclim#project#util#GetCurrentProjectRoot()
|
|
let path = substitute(path, '<project>', root, '')
|
|
let path = path != '' && path !~ '/$' ? path . '/' : path
|
|
if path != '' && has('win32unix')
|
|
let path = eclim#cygwin#CygwinPath(path)
|
|
endif
|
|
return path
|
|
endfunction " }}}
|
|
|
|
function! eclim#java#junit#CommandCompleteTest(argLead, cmdLine, cursorPos) " {{{
|
|
let cmdTail = strpart(a:cmdLine, a:cursorPos)
|
|
let argLead = substitute(a:argLead, cmdTail . '$', '', '')
|
|
|
|
let project = eclim#project#util#GetCurrentProjectName()
|
|
if project == '' && exists('b:project')
|
|
let project = b:project
|
|
endif
|
|
if project == ''
|
|
return []
|
|
endif
|
|
|
|
let command = s:command_tests
|
|
let command = substitute(command, '<project>', project, '')
|
|
let results = eclim#Execute(command)
|
|
if type(results) != g:LIST_TYPE
|
|
return []
|
|
endif
|
|
|
|
call filter(results, 'v:val =~ "' . argLead . '"')
|
|
return results
|
|
endfunction " }}}
|
|
|
|
function! eclim#java#junit#CommandCompleteResult(argLead, cmdLine, cursorPos) " {{{
|
|
let cmdTail = strpart(a:cmdLine, a:cursorPos)
|
|
let argLead = substitute(a:argLead, cmdTail . '$', '', '')
|
|
|
|
let path = s:GetResultsDir()
|
|
if path == ''
|
|
call eclim#util#EchoWarning(
|
|
\ "Output directory setting for 'junit' not set. " .
|
|
\ "Use :WorkspaceSettings or :ProjectSettings to set it.")
|
|
return []
|
|
endif
|
|
|
|
let results = split(eclim#util#Globpath(path, '*'), '\n')
|
|
call map(results, 'fnamemodify(v:val, ":r:e")')
|
|
call filter(results, 'v:val =~ "^' . argLead . '"')
|
|
|
|
return results
|
|
endfunction " }}}
|
|
|
|
" vim:ft=vim:fdm=marker
|