Skip to content

Instantly share code, notes, and snippets.

@lcmen
Created April 17, 2020 17:37
Show Gist options
  • Save lcmen/b9ab933e443a67f63d9720b8ed39b1cb to your computer and use it in GitHub Desktop.
Save lcmen/b9ab933e443a67f63d9720b8ed39b1cb to your computer and use it in GitHub Desktop.
Make custom vim-test runner to run ember qunit tests
" vim-test for ember
" make sure ember.vim file exists in .vim/autoload/test/ember.vim
let test#custom_runners = {'javascript': ['Ember']}
if !exists('g:test#javascript#ember#file_pattern')
let g:test#javascript#ember#file_pattern = '\vtests?/.*\.(js)$'
endif
function! test#javascript#ember#test_file(file) abort
return a:file =~# g:test#javascript#ember#file_pattern
\ && test#javascript#has_package('ember-cli')
endfunction
function! test#javascript#ember#build_position(type, position) abort
let name = s:nearest_test(a:position)
let module = s:nearest_module(a:position)
let args = []
if a:type ==# 'nearest'
if !empty(name)
call add(args, '--filter '.shellescape(name, 1))
endif
if !empty(module)
call add(args, '--module '.shellescape(module, 1))
endif
elseif a:type ==# 'file'
if !empty(module)
call add(args, '--module '.shellescape(module, 1))
endif
endif
return args
endfunction
function! test#javascript#ember#executable() abort
if filereadable('node_modules/.bin/ember')
return 'npx ember test'
else
return 'ember test'
endif
endfunction
function! s:nearest_test(position) abort
let name = test#base#nearest_test(a:position, g:test#javascript#patterns)
return join(name['test'])
endfunction
function! s:nearest_module(position) abort
let patterns = {
\ 'test': [],
\ 'namespace': [
\'\v^\s*module.*\s*[(]\s*[^,]+\s*,\s*["|''|`](.*)["|''|`]+',
\'\v^\s*%(QUnit\.module|module)\s*[(]\s*["|''|`](.*)["|''|`]'
\],
\}
let name = test#base#nearest_test(a:position, l:patterns)
return join(name['namespace'])
endfunction
function! test#javascript#ember#build_args(args) abort
let args = a:args
return args
endfunction
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment