Before:
  runtime ale_linters/prolog/swipl.vim

After:
  call ale#linter#Reset()

Execute (The swipl handler should handle oneline warning / error):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [
  \   {
  \     'lnum': 5,
  \     'col': 1,
  \     'text': 'Syntax error: Operator expected',
  \     'type': 'E',
  \   },
  \ ],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'ERROR: /path/to/test.pl:5:1: Syntax error: Operator expected',
  \ ])

Execute (The swipl handler should handle a warning / error of two lines):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [
  \   {
  \     'lnum': 9,
  \     'col': 0,
  \     'text': 'Singleton variables: [M]',
  \     'type': 'W',
  \   },
  \ ],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'Warning: /path/to/test.pl:9:',
  \   '        Singleton variables: [M]',
  \ ])

Execute (The swipl handler should handle a warning / error of two lines in the new format):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [
  \   {
  \     'lnum': 9,
  \     'col': 0,
  \     'text': 'Singleton variables: [M]',
  \     'type': 'W',
  \   },
  \ ],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'Warning: /path/to/test.pl:9:',
  \   'Warning:        Singleton variables: [M]',
  \ ])

Execute (The swipl handler should join three or more lines with '. '):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [
  \   {
  \     'lnum': 10,
  \     'col': 0,
  \     'text': 'Clauses of fib/2 are not together in the source-file. Earlier definition at /path/to/test.pl:7. Current predicate: f/0. Use :- discontiguous fib/2. to suppress this message',
  \     'type': 'W',
  \   },
  \ ],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'Warning: /path/to/test.pl:10:',
  \   '        Clauses of fib/2 are not together in the source-file',
  \   '          Earlier definition at /path/to/test.pl:7',
  \   '          Current predicate: f/0',
  \   '          Use :- discontiguous fib/2. to suppress this message',
  \ ])

Execute (The swipl handler should ignore warnings / errors 'No permission to call sandboxed ...'):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'ERROR: /path/to/test.pl:11:',
  \   '        No permission to call sandboxed `''$set_predicate_attribute''(_G3416:_G3417,_G3413,_G3414)''',
  \   '        Reachable from:',
  \   '                  system:''$set_pattr''(A,B,C,D)',
  \   '                  system:''$set_pattr''(vimscript:A,B,C)',
  \   '                  vimscript: (multifile A)',
  \   'ERROR: /path/to/test.pl:12:',
  \   '        No permission to call sandboxed `''$set_predicate_attribute''(_G205:_G206,_G202,_G203)''',
  \   '        Reachable from:',
  \   '                  system:''$set_pattr''(A,B,C,D)',
  \   '                  system:''$set_pattr''(vimscript:A,B,C)',
  \   '                  vimscript: (multifile A)',
  \   'ERROR: /path/to/test.pl:13:',
  \   '        No permission to call sandboxed `''$set_predicate_attribute''(_G1808:_G1809,_G1805,_G1806)''',
  \   '        Reachable from:',
  \   '                  system:''$set_pattr''(A,B,C,D)',
  \   '                  system:''$set_pattr''(vimscript:A,B,C)',
  \   '                  vimscript: (multifile A)',
  \ ])

Execute (The swipl handler should join three or more lines with '. ' on latest swipl):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [
  \   {
  \     'lnum': 10,
  \     'col': 0,
  \     'text': 'Clauses of fib/2 are not together in the source-file. Earlier definition at /path/to/test.pl:7. Current predicate: f/0. Use :- discontiguous fib/2. to suppress this message',
  \     'type': 'W',
  \   },
  \ ],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'Warning: /path/to/test.pl:10:',
  \   'Warning:        Clauses of fib/2 are not together in the source-file',
  \   'Warning:          Earlier definition at /path/to/test.pl:7',
  \   'Warning:          Current predicate: f/0',
  \   'Warning:          Use :- discontiguous fib/2. to suppress this message',
  \ ])

Execute (The swipl handler should ignore warnings / errors 'No permission to call sandboxed with latest swpl...'):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'ERROR: /path/to/test.pl:11:',
  \   'ERROR:        No permission to call sandboxed `''$set_predicate_attribute''(_G3416:_G3417,_G3413,_G3414)''',
  \   'ERROR:        Reachable from:',
  \   'ERROR:                  system:''$set_pattr''(A,B,C,D)',
  \   'ERROR:                  system:''$set_pattr''(vimscript:A,B,C)',
  \   'ERROR:                  vimscript: (multifile A)',
  \   'ERROR: /path/to/test.pl:12:',
  \   'ERROR:        No permission to call sandboxed `''$set_predicate_attribute''(_G205:_G206,_G202,_G203)''',
  \   'ERROR:        Reachable from:',
  \   'ERROR:                  system:''$set_pattr''(A,B,C,D)',
  \   'ERROR:                  system:''$set_pattr''(vimscript:A,B,C)',
  \   'ERROR:                  vimscript: (multifile A)',
  \   'ERROR: /path/to/test.pl:13:',
  \   'ERROR:        No permission to call sandboxed `''$set_predicate_attribute''(_G1808:_G1809,_G1805,_G1806)''',
  \   'ERROR:        Reachable from:',
  \   'ERROR:                  system:''$set_pattr''(A,B,C,D)',
  \   'ERROR:                  system:''$set_pattr''(vimscript:A,B,C)',
  \   'ERROR:                  vimscript: (multifile A)',
  \ ])

Execute (The swipl handler should handle a warning / error with no line number):
  call ale#test#SetFilename('test.pl')
  AssertEqual
  \ [
  \   {
  \     'lnum': 1,
  \     'col': 0,
  \     'text': 'Exported procedure module_name:pred/0 is not defined',
  \     'type': 'E',
  \   },
  \ ],
  \ ale_linters#prolog#swipl#Handle(bufnr(''), [
  \   'ERROR: Exported procedure module_name:pred/0 is not defined',
  \ ])
