summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/command_callback/test_c_clang_tidy_command_callback.vader6
-rw-r--r--test/command_callback/test_clang_tidy_command_callback.vader6
-rw-r--r--test/command_callback/test_xo_command_callback.vader6
-rw-r--r--test/handler/test_eslint_json_handler.vader360
-rw-r--r--test/handler/test_mypy_handler.vader2
-rw-r--r--test/lsp/test_read_lsp_diagnostics.vader6
-rw-r--r--test/test_eslint_executable_detection.vader4
-rw-r--r--test/test_ignoring_linters.vader4
-rw-r--r--test/test_path_equality.vader27
9 files changed, 410 insertions, 11 deletions
diff --git a/test/command_callback/test_c_clang_tidy_command_callback.vader b/test/command_callback/test_c_clang_tidy_command_callback.vader
index f78d0ea7..fa76c66c 100644
--- a/test/command_callback/test_c_clang_tidy_command_callback.vader
+++ b/test/command_callback/test_c_clang_tidy_command_callback.vader
@@ -29,6 +29,12 @@ Execute(You should be able to manually set compiler flags for clang-tidy):
AssertLinter 'clang-tidy',
\ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall'
+Execute(You should be able to manually set flags for clang-tidy):
+ let b:ale_c_clangtidy_extra_options = '-config='
+
+ AssertLinter 'clang-tidy',
+ \ ale#Escape('clang-tidy') . ' ' . ale#Escape('-config=') . ' %s'
+
Execute(The build directory should be configurable):
let b:ale_c_clangtidy_checks = ['*']
let b:ale_c_build_dir = '/foo/bar'
diff --git a/test/command_callback/test_clang_tidy_command_callback.vader b/test/command_callback/test_clang_tidy_command_callback.vader
index 3297a4cb..53ae311b 100644
--- a/test/command_callback/test_clang_tidy_command_callback.vader
+++ b/test/command_callback/test_clang_tidy_command_callback.vader
@@ -29,6 +29,12 @@ Execute(You should be able to manually set compiler flags for clang-tidy):
AssertLinter 'clang-tidy',
\ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall'
+Execute(You should be able to manually set flags for clang-tidy):
+ let b:ale_cpp_clangtidy_extra_options = '-config='
+
+ AssertLinter 'clang-tidy',
+ \ ale#Escape('clang-tidy') . ' ' . ale#Escape('-config=') . ' %s'
+
Execute(The build directory should be configurable):
let b:ale_cpp_clangtidy_checks = ['*']
let b:ale_c_build_dir = '/foo/bar'
diff --git a/test/command_callback/test_xo_command_callback.vader b/test/command_callback/test_xo_command_callback.vader
index 12de595d..65cb4f8a 100644
--- a/test/command_callback/test_xo_command_callback.vader
+++ b/test/command_callback/test_xo_command_callback.vader
@@ -7,14 +7,14 @@ After:
call ale#assert#TearDownLinterTest()
Execute(The XO executable should be called):
- AssertLinter 'xo', ale#Escape('xo') . ' --reporter unix --stdin --stdin-filename %s'
+ AssertLinter 'xo', ale#Escape('xo') . ' --reporter json --stdin --stdin-filename %s'
Execute(The XO executable should be configurable):
let b:ale_typescript_xo_executable = 'foobar'
- AssertLinter 'foobar', ale#Escape('foobar') . ' --reporter unix --stdin --stdin-filename %s'
+ AssertLinter 'foobar', ale#Escape('foobar') . ' --reporter json --stdin --stdin-filename %s'
Execute(The XO options should be configurable):
let b:ale_typescript_xo_options = '--wat'
- AssertLinter 'xo', ale#Escape('xo') . ' --wat --reporter unix --stdin --stdin-filename %s'
+ AssertLinter 'xo', ale#Escape('xo') . ' --wat --reporter json --stdin --stdin-filename %s'
diff --git a/test/handler/test_eslint_json_handler.vader b/test/handler/test_eslint_json_handler.vader
new file mode 100644
index 00000000..8e07bd80
--- /dev/null
+++ b/test/handler/test_eslint_json_handler.vader
@@ -0,0 +1,360 @@
+Before:
+ Save g:ale_javascript_eslint_suppress_eslintignore
+ Save g:ale_javascript_eslint_suppress_missing_config
+ Save g:ale_warn_about_trailing_whitespace
+ Save g:ale_warn_about_trailing_blank_lines
+
+ let g:ale_javascript_eslint_suppress_eslintignore = 0
+ let g:ale_javascript_eslint_suppress_missing_config = 0
+ let g:ale_warn_about_trailing_whitespace = 1
+ let g:ale_warn_about_trailing_blank_lines = 1
+ unlet! b:ale_warn_about_trailing_whitespace
+ unlet! b:ale_warn_about_trailing_blank_lines
+
+After:
+ Restore
+
+ unlet! b:ale_javascript_eslint_suppress_eslintignore
+ unlet! b:ale_javascript_eslint_suppress_missing_config
+ unlet! b:ale_warn_about_trailing_whitespace
+ unlet! b:ale_warn_about_trailing_blank_lines
+ unlet! g:config_error_lines
+
+Execute(The eslint handler should parse json correctly):
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'end_lnum': 1,
+ \ 'col': 7,
+ \ 'end_col': 14,
+ \ 'text': '''variable'' is assigned a value but never used.',
+ \ 'code': 'no-unused-vars',
+ \ 'type': 'W',
+ \ },
+ \ {
+ \ 'lnum': 5,
+ \ 'col': 15,
+ \ 'text': 'Missing semicolon.',
+ \ 'code': 'semi',
+ \ 'type': 'W',
+ \ },
+ \ {
+ \ 'lnum': 7,
+ \ 'end_lnum': 7,
+ \ 'col': 7,
+ \ 'end_col': 14,
+ \ 'text': '''variable'' is already defined.',
+ \ 'code': 'no-redeclare',
+ \ 'type': 'E',
+ \ },
+ \ ],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-unused-vars","severity":1,"message":"''variable'' is assigned a value but never used.","line":1,"column":7,"nodeType":"Identifier","endLine":1,"endColumn":15},{"ruleId":"semi","severity":1,"message":"Missing semicolon.","line":5,"column":15,"nodeType":"ExpressionStatement","fix":{"range":[46,46],"text":";"}},{"ruleId":"no-redeclare","severity":2,"message":"''variable'' is already defined.","line":7,"column":7,"nodeType":"Identifier","endLine":7,"endColumn":15}],"errorCount":1,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":1,"source":"const variable = {\n a: 3\n};\n\nconsole.log(1)\n\nclass variable {\n}\n"}]'
+ \ ])
+
+Execute(The eslint handler should print a message about a missing configuration file):
+ let g:config_error_lines = [
+ \ '',
+ \ 'Oops! Something went wrong! :(',
+ \ '',
+ \ 'ESLint couldn''t find a configuration file. To set up a configuration file for this project, please run:',
+ \ ' eslint --init',
+ \ '',
+ \ 'ESLint looked for configuration files in /some/path/or/other and its ancestors.',
+ \ '',
+ \ 'If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint',
+ \ '',
+ \ ]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(The eslint handler should allow the missing config error to be suppressed):
+ let b:ale_javascript_eslint_suppress_missing_config = 1
+ let g:config_error_lines = [
+ \ '',
+ \ 'Oops! Something went wrong! :(',
+ \ '',
+ \ 'ESLint couldn''t find a configuration file. To set up a configuration file for this project, please run:',
+ \ ' eslint --init',
+ \ '',
+ \ 'ESLint looked for configuration files in /some/path/or/other and its ancestors.',
+ \ '',
+ \ 'If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint',
+ \ '',
+ \ ]
+
+ AssertEqual
+ \ [],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(The eslint handler should print a message for config parsing errors):
+ let g:config_error_lines = [
+ \ 'Cannot read config file: /some/path/or/other/.eslintrc.js',
+ \ 'Error: Unexpected token <<',
+ \ '/some/path/or/other/.eslintrc.js:1',
+ \ '(function (exports, require, module, __filename, __dirname) { <<<>>>',
+ \ ' ^^',
+ \ 'SyntaxError: Unexpected token <<',
+ \ ' at Object.exports.runInThisContext (vm.js:76:16)',
+ \ ' at Module._compile (module.js:528:28)',
+ \ ' at Object.Module._extensions..js (module.js:565:10)',
+ \ ' at Module.load (module.js:473:32)',
+ \ ' at tryModuleLoad (module.js:432:12)',
+ \ ' at Function.Module._load (module.js:424:3)',
+ \ ' at Module.require (module.js:483:17)',
+ \ ' at require (internal/module.js:20:19)',
+ \ ' at module.exports (/usr/local/lib/node_modules/eslint/node_modules/require-uncached/index.js:14:12)',
+ \ ' at loadJSConfigFile (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:160:16)',
+ \]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(Suppressing missing configs shouldn't suppress parsing errors):
+ let b:ale_javascript_eslint_suppress_missing_config = 1
+ let g:config_error_lines = [
+ \ 'Cannot read config file: /some/path/or/other/.eslintrc.js',
+ \ 'Error: Unexpected token <<',
+ \ '/some/path/or/other/.eslintrc.js:1',
+ \ '(function (exports, require, module, __filename, __dirname) { <<<>>>',
+ \ ' ^^',
+ \ 'SyntaxError: Unexpected token <<',
+ \ ' at Object.exports.runInThisContext (vm.js:76:16)',
+ \ ' at Module._compile (module.js:528:28)',
+ \ ' at Object.Module._extensions..js (module.js:565:10)',
+ \ ' at Module.load (module.js:473:32)',
+ \ ' at tryModuleLoad (module.js:432:12)',
+ \ ' at Function.Module._load (module.js:424:3)',
+ \ ' at Module.require (module.js:483:17)',
+ \ ' at require (internal/module.js:20:19)',
+ \ ' at module.exports (/usr/local/lib/node_modules/eslint/node_modules/require-uncached/index.js:14:12)',
+ \ ' at loadJSConfigFile (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:160:16)',
+ \]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(The eslint handler should print a message for invalid configuration settings):
+ let g:config_error_lines = [
+ \ '/home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:',
+ \ ' Configuration for rule "indent" is invalid:',
+ \ ' Value "off" is the wrong type.',
+ \ '',
+ \ 'Error: /home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:',
+ \ ' Configuration for rule "indent" is invalid:',
+ \ ' Value "off" is the wrong type.',
+ \ '',
+ \ ' at validateRuleOptions (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:115:15)',
+ \ ' at /usr/local/lib/node_modules/eslint/lib/config/config-validator.js:162:13',
+ \ ' at Array.forEach (native)',
+ \ ' at Object.validate (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:161:35)',
+ \ ' at Object.load (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:522:19)',
+ \ ' at loadConfig (/usr/local/lib/node_modules/eslint/lib/config.js:63:33)',
+ \ ' at getLocalConfig (/usr/local/lib/node_modules/eslint/lib/config.js:130:29)',
+ \ ' at Config.getConfig (/usr/local/lib/node_modules/eslint/lib/config.js:256:22)',
+ \ ' at processText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:224:33)',
+ \ ' at CLIEngine.executeOnText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:756:26)',
+ \]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(Suppressing missing configs shouldn't suppress invalid config errors):
+ let b:ale_javascript_eslint_suppress_missing_config = 1
+ let g:config_error_lines = [
+ \ '/home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:',
+ \ ' Configuration for rule "indent" is invalid:',
+ \ ' Value "off" is the wrong type.',
+ \ '',
+ \ 'Error: /home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:',
+ \ ' Configuration for rule "indent" is invalid:',
+ \ ' Value "off" is the wrong type.',
+ \ '',
+ \ ' at validateRuleOptions (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:115:15)',
+ \ ' at /usr/local/lib/node_modules/eslint/lib/config/config-validator.js:162:13',
+ \ ' at Array.forEach (native)',
+ \ ' at Object.validate (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:161:35)',
+ \ ' at Object.load (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:522:19)',
+ \ ' at loadConfig (/usr/local/lib/node_modules/eslint/lib/config.js:63:33)',
+ \ ' at getLocalConfig (/usr/local/lib/node_modules/eslint/lib/config.js:130:29)',
+ \ ' at Config.getConfig (/usr/local/lib/node_modules/eslint/lib/config.js:256:22)',
+ \ ' at processText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:224:33)',
+ \ ' at CLIEngine.executeOnText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:756:26)',
+ \]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(The eslint handler should print a message when import is not used in a module):
+ let g:config_error_lines = [
+ \ 'ImportDeclaration should appear when the mode is ES6 and in the module context.',
+ \ 'AssertionError: ImportDeclaration should appear when the mode is ES6 and in the module context.',
+ \ ' at Referencer.ImportDeclaration (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:597:9)',
+ \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)',
+ \ ' at Referencer.Visitor.visitChildren (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:101:38)',
+ \ ' at Referencer.Program (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:449:14)',
+ \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)',
+ \ ' at Object.analyze (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/index.js:138:16)',
+ \ ' at EventEmitter.module.exports.api.verify (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/eslint.js:887:40)',
+ \ ' at processText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:278:31)',
+ \ ' at CLIEngine.executeOnText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:734:26)',
+ \ ' at Object.execute (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli.js:171:42) ',
+ \]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(Suppressing missing configs shouldn't suppress module import errors):
+ let b:ale_javascript_eslint_suppress_missing_config = 1
+ let g:config_error_lines = [
+ \ 'ImportDeclaration should appear when the mode is ES6 and in the module context.',
+ \ 'AssertionError: ImportDeclaration should appear when the mode is ES6 and in the module context.',
+ \ ' at Referencer.ImportDeclaration (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:597:9)',
+ \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)',
+ \ ' at Referencer.Visitor.visitChildren (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:101:38)',
+ \ ' at Referencer.Program (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:449:14)',
+ \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)',
+ \ ' at Object.analyze (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/index.js:138:16)',
+ \ ' at EventEmitter.module.exports.api.verify (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/eslint.js:887:40)',
+ \ ' at processText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:278:31)',
+ \ ' at CLIEngine.executeOnText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:734:26)',
+ \ ' at Object.execute (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli.js:171:42) ',
+ \]
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 1,
+ \ 'text': 'eslint configuration error (type :ALEDetail for more information)',
+ \ 'detail': join(g:config_error_lines, "\n"),
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:])
+
+Execute(The eslint handler should hint about using typescript-eslint-parser):
+ silent! noautocmd file foo.ts
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 2,
+ \ 'col': 1,
+ \ 'text': 'Parsing error (You may need configure typescript-eslint-parser): The keyword ''interface'' is reserved',
+ \ 'type': 'E',
+ \ },
+ \ ],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"foo.ts","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: The keyword ''interface'' is reserved","line":2,"column":1}],"errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\ninterface test {}\n"}]',
+ \ ])
+
+Execute(eslint should warn about ignored files by default):
+ AssertEqual
+ \ [{
+ \ 'lnum': 0,
+ \ 'type': 'W',
+ \ 'text': 'File ignored because of a matching ignore pattern. Use "--no-ignore" to override.'
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]',
+ \ ])
+
+ AssertEqual
+ \ [{
+ \ 'lnum': 0,
+ \ 'type': 'W',
+ \ 'text': 'File ignored by default. Use "--ignore-pattern ''!node_modules/*''" to override.',
+ \ }],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use \"--ignore-pattern ''!node_modules/*''\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]',
+ \ ])
+
+Execute(eslint should not warn about ignored files when explicitly disabled):
+ let g:ale_javascript_eslint_suppress_eslintignore = 1
+
+ AssertEqual
+ \ [],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]',
+ \ ])
+
+ AssertEqual
+ \ [],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use \"--ignore-pattern ''!node_modules/*''\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]',
+ \ ])
+
+Execute(Failing to connect to eslint_d should be handled correctly):
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 1,
+ \ 'text': 'Could not connect to eslint_d. Try updating eslint_d or killing it.',
+ \ },
+ \ ],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ 'Could not connect',
+ \ ])
+
+Execute(Disabling warnings about trailing spaces should work):
+ silent! noautocmd file foo.ts
+
+ AssertEqual
+ \ [
+ \ {
+ \ 'lnum': 2,
+ \ 'col': 16,
+ \ 'code': 'no-trailing-spaces',
+ \ 'type': 'W',
+ \ 'text': 'Trailing spaces not allowed.',
+ \ },
+ \ ],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-trailing-spaces","severity":1,"message":"Trailing spaces not allowed.","line":2,"column":16,"nodeType":"Program","fix":{"range":[16,17],"text":""}}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"\nconsole.log(1); \n"}]'
+ \ ])
+
+ let g:ale_warn_about_trailing_whitespace = 0
+
+ AssertEqual
+ \ [],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-trailing-spaces","severity":1,"message":"Trailing spaces not allowed.","line":2,"column":16,"nodeType":"Program","fix":{"range":[16,17],"text":""}}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"\nconsole.log(1); \n"}]'
+ \ ])
+
+ let g:ale_warn_about_trailing_whitespace = 1
+ let b:ale_warn_about_trailing_whitespace = 0
+
+ AssertEqual
+ \ [],
+ \ ale#handlers#eslint#HandleJSON(bufnr(''), [
+ \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-trailing-spaces","severity":1,"message":"Trailing spaces not allowed.","line":2,"column":16,"nodeType":"Program","fix":{"range":[16,17],"text":""}}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"\nconsole.log(1); \n"}]'
+ \ ])
diff --git a/test/handler/test_mypy_handler.vader b/test/handler/test_mypy_handler.vader
index f3d4cbf8..6e96f3f3 100644
--- a/test/handler/test_mypy_handler.vader
+++ b/test/handler/test_mypy_handler.vader
@@ -78,7 +78,7 @@ Execute(The mypy handler should handle Windows names with spaces):
\ {
\ 'lnum': 4,
\ 'col': 0,
- \ 'filename': 'C:\something\with spaces.py',
+ \ 'filename': ale#path#Simplify('C:\something\with spaces.py'),
\ 'type': 'E',
\ 'text': 'No library stub file for module ''django.db''',
\ },
diff --git a/test/lsp/test_read_lsp_diagnostics.vader b/test/lsp/test_read_lsp_diagnostics.vader
index 377e73d9..61ffc73f 100644
--- a/test/lsp/test_read_lsp_diagnostics.vader
+++ b/test/lsp/test_read_lsp_diagnostics.vader
@@ -219,7 +219,7 @@ Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle tsserver respon
\ 'lnum': 1,
\ 'col': 11,
\ 'end_lnum': 1,
- \ 'end_col': 17,
+ \ 'end_col': 16,
\ },
\ ],
\ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/bar/foo.ts","diagnostics":[{"start":{"line":1,"offset":11},"end":{"line":1,"offset":17},"text":"Operator ''+'' cannot be applied to types ''3'' and ''{}''.","code":2365}]}})
@@ -234,7 +234,7 @@ Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle warnings from t
\ 'code': '2515',
\ 'end_lnum': 27,
\ 'type': 'W',
- \ 'end_col': 14,
+ \ 'end_col': 13,
\ 'text': 'Calls to ''console.log'' are not allowed. (no-console)',
\ }
\ ],
@@ -250,7 +250,7 @@ Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle suggestions fro
\ 'code': '2515',
\ 'end_lnum': 27,
\ 'type': 'I',
- \ 'end_col': 14,
+ \ 'end_col': 13,
\ 'text': 'Some info',
\ }
\ ],
diff --git a/test/test_eslint_executable_detection.vader b/test/test_eslint_executable_detection.vader
index 5599576e..64383dcb 100644
--- a/test/test_eslint_executable_detection.vader
+++ b/test/test_eslint_executable_detection.vader
@@ -59,11 +59,11 @@ Execute(eslint.js executables should be run with node on Windows):
AssertEqual
\ ale#Escape('node.exe') . ' '
\ . ale#Escape(ale#path#Simplify(g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'))
- \ . ' -f unix --stdin --stdin-filename %s',
+ \ . ' -f json --stdin --stdin-filename %s',
\ ale#handlers#eslint#GetCommand(bufnr(''))
else
AssertEqual
\ ale#Escape(ale#path#Simplify(g:dir . '/eslint-test-files/react-app/node_modules/eslint/bin/eslint.js'))
- \ . ' -f unix --stdin --stdin-filename %s',
+ \ . ' -f json --stdin --stdin-filename %s',
\ ale#handlers#eslint#GetCommand(bufnr(''))
endif
diff --git a/test/test_ignoring_linters.vader b/test/test_ignoring_linters.vader
index d758af5c..19f45add 100644
--- a/test/test_ignoring_linters.vader
+++ b/test/test_ignoring_linters.vader
@@ -249,7 +249,7 @@ Execute(Buffer ignore lists should be applied for tsserver):
\ 'nr': 1005,
\ 'code': '1005',
\ 'type': 'E',
- \ 'end_col': 15,
+ \ 'end_col': 14,
\ 'end_lnum': 2,
\ 'text': ''','' expected.',
\ },
@@ -344,7 +344,7 @@ Execute(ale_disable_lsp should be applied for tsserver):
\ 'nr': 1005,
\ 'code': '1005',
\ 'type': 'E',
- \ 'end_col': 15,
+ \ 'end_col': 14,
\ 'end_lnum': 2,
\ 'text': ''','' expected.',
\ },
diff --git a/test/test_path_equality.vader b/test/test_path_equality.vader
index 4ec9bd64..ee6ae2c5 100644
--- a/test/test_path_equality.vader
+++ b/test/test_path_equality.vader
@@ -6,6 +6,22 @@ Before:
After:
delfunction CheckPath
+Execute(ale#path#Simplify should adjust paths correctly):
+ if has('unix')
+ " Multiple slashes should be removed correctly.
+ AssertEqual '/foo/bar/baz', ale#path#Simplify('////foo///bar///baz')
+ " Back slashes should be converted to forward slashes.
+ " This means some valid filenames are adjusted incorrectly, but in practice
+ " no filenames for code should contain back slashes, and adjusting slashes
+ " like this makes ALE work in MSYS.
+ AssertEqual 'foo/bar/baz', ale#path#Simplify('foo\bar\baz')
+ else
+ " Multiple slashes should be removed correctly.
+ AssertEqual '\foo\bar\baz', ale#path#Simplify('\\\foo\bar\baz')
+ " Forward slashes should be replaced with back slashes.
+ AssertEqual 'foo\bar\baz', ale#path#Simplify('foo/bar/baz')
+ endif
+
Execute(ale#path#IsBufferPath should match simple relative paths):
call ale#test#SetFilename('app/foo.txt')
@@ -53,3 +69,14 @@ Execute(ale#path#IsBufferPath should match files in /tmp):
call ale#test#SetFilename('app/test.ts')
Assert ale#path#IsBufferPath(bufnr(''), tempname() . '/test.ts')
+
+Execute(ale#path#IsBufferPath should match Windows paths on Unix):
+ " This test should pass Unix.
+ "
+ " Back slashes in paths should be replaced with forward slashes, even though
+ " back slashes are valid in filenames on Unix.
+ if has('unix')
+ call ale#test#SetFilename('app/foo/test.ts')
+
+ Assert ale#path#IsBufferPath(bufnr(''), 'foo\test.ts')
+ endif