2022-05-27 08:16:55 -04:00
" don't spam the user when Vim is started in Vi compatibility mode
let s :cpo_save = &cpo
set cpo &vim
func ! Test_GoTest ( ) abort
let expected = [
\ {'lnum' : 12 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'log message' },
\ {'lnum' : 13 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'sub badness' },
\ {'lnum' : 15 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'badness' },
\ {'lnum' : 16 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'helper badness' },
\ {'lnum' : 20 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'this is an error' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'and a second line, too' },
\ {'lnum' : 21 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : '' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'this is another error' },
\ {'lnum' : 26 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'this is a sub-test error' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'and a second line, too' },
\ {'lnum' : 6 , 'bufnr' : 3 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'another package badness' },
\ {'lnum' : 43 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'panic: worst ever [recovered]' }
\ ]
call s :test ( 'play/play_test.go' , expected )
endfunc
func ! Test_GoTestConcurrentPanic ( )
let expected = [
\ {'lnum' : 50 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'panic: concurrent fail' }
\ ]
call s :test ( 'play/play_test.go' , expected , "-run" , "TestConcurrentPanic" )
endfunc
func ! Test_GoTestVerbose ( ) abort
let expected = [
\ {'lnum' : 12 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'log message' },
\ {'lnum' : 13 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'sub badness' },
\ {'lnum' : 15 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'badness' },
\ {'lnum' : 16 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'helper badness' },
\ {'lnum' : 20 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'this is an error' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'and a second line, too' },
\ {'lnum' : 21 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : '' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'this is another error' },
\ {'lnum' : 26 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'this is a sub-test error' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'and a second line, too' },
\ {'lnum' : 32 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'goodness' },
\ {'lnum' : 6 , 'bufnr' : 3 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'another package badness' },
\ {'lnum' : 43 , 'bufnr' : 2 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'panic: worst ever [recovered]' }
\ ]
call s :test ( 'play/play_test.go' , expected , "-v" )
endfunc
func ! Test_GoTestCompilerError ( ) abort
let expected = [
2022-08-08 04:41:37 -04:00
\ {'lnum' : 6 , 'bufnr' : 6 , 'col' : 22 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'syntax error: unexpected newline in argument list; possibly missing comma or )' }
2022-05-27 08:16:55 -04:00
\ ]
2022-08-08 04:41:37 -04:00
let [l :goversion , l :err ] = go #util #Exec ( ['go' , 'env' , 'GOVERSION' ])
let l :goversion = split ( l :goversion , "\n" ) [0 ]
if l :goversion < 'go1.19'
let expected = [
\ {'lnum' : 6 , 'bufnr' : 6 , 'col' : 22 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'syntax error: unexpected newline, expecting comma or )' }
\ ]
endif
2022-05-27 08:16:55 -04:00
call s :test ( 'compilerror/compilerror_test.go' , expected )
endfunc
func ! Test_GoTestTimeout ( ) abort
let expected = [
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'panic: test timed out after 500ms' }
\ ]
let g :go_test_timeout = "500ms"
call s :test ( 'timeout/timeout_test.go' , expected )
unlet g :go_test_timeout
endfunc
func ! Test_GoTestShowName ( ) abort
let expected = [
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'TestHelloWorld' },
\ {'lnum' : 6 , 'bufnr' : 8 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'so long' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'TestHelloWorld/sub' },
\ {'lnum' : 9 , 'bufnr' : 8 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'thanks for all the fish' },
\ ]
let g :go_test_show_name = 1
call s :test ( 'showname/showname_test.go' , expected )
unlet g :go_test_show_name
endfunc
func ! Test_GoTestVet ( ) abort
let expected = [
\ {'lnum' : 6 , 'bufnr' : 11 , 'col' : 2 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'fmt.Errorf format %v reads arg #1, but call has 0 args' },
\ ]
let [l :goversion , l :err ] = go #util #Exec ( ['go' , 'env' , 'GOVERSION' ])
let l :goversion = split ( l :goversion , "\n" ) [0 ]
if l :goversion < 'go1.18'
let expected = [
\ {'lnum' : 6 , 'bufnr' : 11 , 'col' : 2 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'Errorf format %v reads arg #1, but call has 0 args' },
\ ]
endif
call s :test ( 'veterror/veterror.go' , expected )
endfunc
func ! Test_GoTestTestCompilerError ( ) abort
let expected = [
\ {'lnum' : 10 , 'bufnr' : 9 , 'col' : 17 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'cannot use r (variable of type struct{}) as type io.Reader in argument to ioutil.ReadAll:' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'struct{} does not implement io.Reader (missing Read method)' }
\ ]
let [l :goversion , l :err ] = go #util #Exec ( ['go' , 'env' , 'GOVERSION' ])
let l :goversion = split ( l :goversion , "\n" ) [0 ]
if l :goversion < 'go1.18'
let expected = [
\ {'lnum' : 10 , 'bufnr' : 9 , 'col' : 16 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'cannot use r (type struct {}) as type io.Reader in argument to ioutil.ReadAll:' },
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'struct {} does not implement io.Reader (missing Read method)' }
\ ]
endif
call s :test ( 'testcompilerror/testcompilerror_test.go' , expected )
endfunc
func ! Test_GoTestExample ( ) abort
let expected = [
\ {'lnum' : 0 , 'bufnr' : 0 , 'col' : 0 , 'valid' : 1 , 'vcol' : 0 , 'nr' : -1 , 'type' : '' , 'pattern' : '' , 'text' : 'ExampleHelloWorld' }
\ ]
call s :test ( 'example/example_test.go' , expected )
endfunc
func ! s :test ( file , expected , ...) abort
let $GOPATH = fnameescape ( fnamemodify ( getcwd ( ) , ':p' ) ) . 'test-fixtures/test'
call go #util #Chdir ( printf ( '%s/src/%s' , $GOPATH , fnamemodify ( a :file , ':h' ) ) )
silent exe 'e ' . $GOPATH . '/src/' . a :file
" clear the quickfix lists
call setqflist ( [], 'r' )
let args = [1 , 0 ]
if a :0
let args + = a :000
endif
" run the tests
silent call call ( function ( 'go#test#Test' ) , args )
let actual = getqflist ( )
let start = reltime ( )
while len ( actual ) = = 0 && reltimefloat ( reltime ( start ) ) < 10
sleep 100 m
let actual = getqflist ( )
endwhile
for item in actual
let item .text = s :normalize_durations ( item .text )
endfor
for item in a :expected
let item .text = s :normalize_durations ( item .text )
endfor
call gotest #assert_quickfix ( actual , a :expected )
endfunc
func ! s :normalize_durations ( str ) abort
return substitute ( a :str , '[0-9]\+\(\.[0-9]\+\)\?s' , '0.000s' , 'g' )
endfunc
" restore Vi compatibility settings
let &cpo = s :cpo_save
unlet s :cpo_save
" vim: sw=2 ts=2 et