" Author: rymdbar <https://rymdbar.x20.se/>

Before:
  call ale#assert#SetUpLinterTest('perl', 'languageserver')

After:
  call ale#assert#TearDownLinterTest()

Execute(The default Perl command callback should be correct):
  AssertLinter 'perl',
  \ ale#Escape('perl') . ' -MPerl::LanguageServer -ePerl::LanguageServer::run'

Execute(Overriding the executable should work):
  let b:ale_perl_perl_executable = 'plls'

  AssertLinter 'plls', ale#Escape('plls') .
  \ ' -MPerl::LanguageServer -ePerl::LanguageServer::run'
  unlet b:ale_perl_perl_executable

Execute(The project root should be detected correctly in from build files):
  for mod in ['extutils-makemaker', 'module-build', 'dist-zilla']
    call ale#test#SetFilename('../test-files/perl/' . mod . '/subdir/empty.pl')

    AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/perl/' . mod)
  endfor

Execute(The project root should be globally configurable):
  for mod in ['extutils-makemaker', 'module-build', 'dist-zilla']
    call ale#test#SetFilename('../test-files/perl/'. mod . '/subdir/empty.pl')
    " Configuring g:ale_root using a Dictionary works.
    let g:ale_root.languageserver =
    \ ale#path#Simplify(g:dir . '/../test-files/perl')

    AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/perl')
    unlet g:ale_root.languageserver
    " As tracked by <https://github.com/dense-analysis/ale/issues/5002>, there
    " is a bug with g:ale_root.
    " While attempting to configure g:ale_root using a String might be a quite
    " limiting setup, it would be handy for debugging. However the test case is
    " missing here. It would unfortunately just fail.
  endfor

Execute(The project root should be per buffer configurable):
  for mod in ['extutils-makemaker', 'module-build', 'dist-zilla']
    call ale#test#SetFilename('../test-files/perl/'. mod . '/subdir/empty.pl')
    " Configuring b:ale_root using a String works.
    let b:ale_root = ale#path#Simplify(g:dir . '/../test-files/perl')

    AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/perl')
    unlet b:ale_root

    " Configuring b:ale_root using a Dictionary works.
    let b:ale_root = {
    \ 'languageserver': ale#path#Simplify(g:dir . '/../test-files/perl')
    \ }

    AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/perl')
    unlet b:ale_root.languageserver
  endfor

Execute(The LSP values should be set correctly):

  AssertLSPLanguage 'perl'

  AssertLSPOptions {}

  AssertLSPConfig {'perl': {'enable': 1}}

Execute(Should accept configuration settings):
  let b:ale_perl_languageserver_config = {
  \   'perl': {
  \     'perlInc': ['/usr/share/perl5/', '/usr/local/share/perl5/' ],
  \     'fileFilter': [''],
  \   },
  \ }

  AssertLSPConfig {
  \   'perl': {
  \     'perlInc': ['/usr/share/perl5/', '/usr/local/share/perl5/' ],
  \     'fileFilter': [''],
  \   },
  \ }
