2017-02-04 18:30:30 +00:00
|
|
|
Before:
|
|
|
|
let g:linter = {}
|
|
|
|
|
|
|
|
After:
|
|
|
|
unlet g:linter
|
|
|
|
|
2016-12-13 13:33:19 +00:00
|
|
|
Execute (PreProcess should throw when the linter object is not a Dictionary):
|
|
|
|
AssertThrows call ale#linter#PreProcess('')
|
|
|
|
AssertEqual 'The linter object must be a Dictionary', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when there is no name):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual '`name` must be defined to name the linter', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when there is no callback):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual '`callback` must be defined with a callback to accept output', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when then callback is not a function):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 1,
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual '`callback` must be defined with a callback to accept output', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when there is no executable or executable_callback):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual 'Either `executable` or `executable_callback` must be defined', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when executable is not a string):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 123,
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual '`executable` must be a string if defined', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when executable_callback is not a callback):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable_callback': 123,
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual '`executable_callback` must be a callback if defined', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when there is no command):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\})
|
|
|
|
AssertEqual 'Either `command`, `executable_callback`, `command_chain` must be defined', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when command is not a string):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': [],
|
|
|
|
\})
|
|
|
|
AssertEqual '`command` must be a string if defined', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should throw when command_callback is not a callback):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command_callback': 123,
|
|
|
|
\})
|
|
|
|
AssertEqual '`command_callback` must be a callback if defined', g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should when the output stream isn't a valid string):
|
|
|
|
AssertThrows call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\ 'output_stream': 'xxx',
|
|
|
|
\})
|
|
|
|
AssertEqual "`output_stream` must be 'stdout', 'stderr', or 'both'", g:vader_exception
|
|
|
|
|
|
|
|
Execute (PreProcess should not throw when everything is correct):
|
|
|
|
call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\})
|
|
|
|
|
|
|
|
Execute (PreProcess should accept an stdout output_stream):
|
|
|
|
call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\ 'output_stream': 'stdout',
|
|
|
|
\})
|
|
|
|
|
|
|
|
Execute (PreProcess should accept an stderr output_stream):
|
|
|
|
call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\ 'output_stream': 'stderr',
|
|
|
|
\})
|
|
|
|
|
|
|
|
Execute (PreProcess should accept a 'both' output_stream):
|
|
|
|
call ale#linter#PreProcess({
|
|
|
|
\ 'name': 'foo',
|
|
|
|
\ 'callback': 'SomeFunction',
|
|
|
|
\ 'executable': 'echo',
|
|
|
|
\ 'command': 'echo',
|
|
|
|
\ 'output_stream': 'both',
|
|
|
|
\})
|
2017-02-04 18:30:30 +00:00
|
|
|
|
|
|
|
Execute(PreProcess should complain if the command_chain is not a List):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': 'x',
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual '`command_chain` must be a List', g:vader_exception
|
|
|
|
|
|
|
|
Execute(PreProcess should complain if the command_chain is empty):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [],
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual '`command_chain` must contain at least one item', g:vader_exception
|
|
|
|
|
|
|
|
Execute(PreProcess should complain if the command_chain has no callback):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [{}],
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual 'The `command_chain` item 0 must define a `callback` function', g:vader_exception
|
|
|
|
|
|
|
|
Execute(PreProcess should complain if the command_chain callback is not a function):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [{'callback': 2}],
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual 'The `command_chain` item 0 must define a `callback` function', g:vader_exception
|
|
|
|
|
|
|
|
Execute(PreProcess should accept a chain with one callback):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [{'callback': 'foo'}],
|
|
|
|
\}
|
|
|
|
call ale#linter#PreProcess(g:linter)
|
|
|
|
|
|
|
|
Execute(PreProcess should complain about invalid output_stream values in the chain):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [{'callback': 'foo', 'output_stream': ''}],
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual "The `command_chain` item 0 `output_stream` flag must be 'stdout', 'stderr', or 'both'", g:vader_exception
|
|
|
|
|
|
|
|
Execute(PreProcess should complain about valid output_stream values in the chain):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [{'callback': 'foo', 'output_stream': 'stdout'}],
|
|
|
|
\}
|
|
|
|
call ale#linter#PreProcess(g:linter)
|
|
|
|
let g:linter.command_chain[0].output_stream = 'stderr'
|
|
|
|
call ale#linter#PreProcess(g:linter)
|
|
|
|
let g:linter.command_chain[0].output_stream = 'both'
|
|
|
|
call ale#linter#PreProcess(g:linter)
|
|
|
|
|
|
|
|
Execute(PreProcess should complain about invalid chain items at higher indices):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command_chain': [{'callback': 'foo'}, {'callback': 123}],
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual 'The `command_chain` item 1 must define a `callback` function', g:vader_exception
|
2017-02-09 20:44:13 +00:00
|
|
|
|
|
|
|
Execute(PreProcess should complain when conflicting command options are used):
|
|
|
|
let g:linter = {
|
|
|
|
\ 'name': 'x',
|
|
|
|
\ 'callback': 'x',
|
|
|
|
\ 'executable': 'x',
|
|
|
|
\ 'command': 'foo',
|
|
|
|
\ 'command_chain': [{'callback': 'foo'}],
|
|
|
|
\}
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual 'Only one of `command`, `command_callback`, or `command_chain` should be set', g:vader_exception
|
|
|
|
|
|
|
|
unlet g:linter.command
|
|
|
|
let g:linter.command_callback = 'foo'
|
|
|
|
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual 'Only one of `command`, `command_callback`, or `command_chain` should be set', g:vader_exception
|
|
|
|
|
|
|
|
let g:linter.command = 'foo'
|
|
|
|
unlet g:linter.command_chain
|
|
|
|
|
|
|
|
AssertThrows call ale#linter#PreProcess(g:linter)
|
|
|
|
AssertEqual 'Only one of `command`, `command_callback`, or `command_chain` should be set', g:vader_exception
|