Before:
  runtime ale_linters/elm/make.vim

After:
  unlet! g:config_error_lines

  call ale#linter#Reset()


" Elm 0.19

Execute(The elm-make handler should parse Elm 0.19 general problems correctly):
  AssertEqual
  \ [
  \   {
  \     'lnum': 1,
  \     'type': 'E',
  \     'text': "error details\n\nstyled details"
  \   }
  \ ],
  \ ale_linters#elm#make#Handle(347, [
  \   json_encode({
  \     'type': 'error',
  \     'path': ale#util#Tempname() . '/Module.elm',
  \     'title': 'UNKNOWN IMPORT',
  \     'message': ["error details\n\n", { 'string': 'styled details' }]
  \   }),
  \ ])

Execute(The elm-make handler should parse Elm 0.19 compilation errors correctly):
  AssertEqual
  \ [
  \   {
  \     'lnum': 404,
  \     'col': 1,
  \     'end_lnum': 408,
  \     'end_col': 18,
  \     'type': 'E',
  \     'text': "error details 1\n\nstyled details"
  \   },
  \   {
  \     'lnum': 406,
  \     'col': 5,
  \     'end_lnum': 407,
  \     'end_col': 17,
  \     'type': 'E',
  \     'text': 'error details 2',
  \   },
  \   {
  \     'lnum': 406,
  \     'col': 5,
  \     'end_lnum': 406,
  \     'end_col': 93,
  \     'type': 'E',
  \     'text': 'error details 3',
  \   },
  \ ],
  \ ale_linters#elm#make#Handle(347, [
  \   json_encode({
  \      'type': 'compile-errors',
  \      'errors': [
  \        {
  \          'path': ale#util#Tempname() . '/Module.elm',
  \          'problems': [
  \            {
  \              'title': 'TYPE MISMATCH',
  \              'message': ["error details 1\n\n", { 'string': 'styled details' }],
  \              'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } }
  \            },
  \            {
  \              'title': 'TYPE MISMATCH',
  \              'message': ['error details 2'],
  \              'region': { 'start': {'line': 406, 'column': 5}, 'end': {'line': 407, 'column': 17 } }
  \            },
  \            {
  \              'title': 'TYPE MISMATCH',
  \              'message': ['error details 3'],
  \              'region': { 'start': { 'line': 406, 'column': 5}, 'end': {'line': 406, 'column': 93 } }
  \            }
  \          ]
  \        }
  \      ]
  \    }),
  \ ])

Execute(The elm-make handler should handle errors in Elm 0.19 imported modules):
  AssertEqual
  \ [
  \   {
  \     'lnum': 1,
  \     'type': 'E',
  \     'text': "src/Module.elm - error details\n\nstyled details",
  \     'detail': "src/Module.elm ----------\n\nerror details\n\nstyled details"
  \   },
  \   {
  \     'lnum': 1,
  \     'type': 'E',
  \     'text': "Elm - error details\n\nstyled details",
  \     'detail': "Elm ----------\n\nerror details\n\nstyled details"
  \   },
  \   {
  \     'lnum': 1,
  \     'type': 'E',
  \     'text': "src/Module.elm:404 - error details\n\nstyled details",
  \     'detail': "src/Module.elm:404 ----------\n\nerror details\n\nstyled details"
  \   },
  \ ],
  \ ale_linters#elm#make#Handle(347, [
  \   json_encode({
  \      'type': 'error',
  \      'path': 'src/Module.elm',
  \      'title': 'UNKNOWN IMPORT',
  \      'message': ["error details\n\n", { 'string': 'styled details' }]
  \    }),
  \   json_encode({
  \      'type': 'error',
  \      'path': v:null,
  \      'title': 'UNKNOWN IMPORT',
  \      'message': ["error details\n\n", { 'string': 'styled details' }]
  \    }),
  \   json_encode({
  \      'type': 'compile-errors',
  \      'errors': [
  \        {
  \          'path': 'src/Module.elm',
  \          'problems': [
  \            {
  \              'title': 'TYPE MISMATCH',
  \              'message': ["error details\n\n", { 'string': 'styled details' }],
  \              'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } }
  \            }
  \          ]
  \        }
  \      ]
  \    }),
  \ ])


" Elm 0.18

Execute(The elm-make handler should parse Elm 0.18 compilation errors correctly):
  AssertEqual
  \ [
  \   {
  \     'lnum': 33,
  \     'col': 1,
  \     'end_lnum': 33,
  \     'end_col': 19,
  \     'type': 'W',
  \     'text': 'warning overview',
  \     'detail': "warning overview\n\nwarning details",
  \   },
  \   {
  \     'lnum': 404,
  \     'col': 1,
  \     'end_lnum': 408,
  \     'end_col': 18,
  \     'type': 'E',
  \     'text': 'error overview 1',
  \     'detail': "error overview 1\n\nerror details 1",
  \   },
  \   {
  \     'lnum': 406,
  \     'col': 5,
  \     'end_lnum': 407,
  \     'end_col': 17,
  \     'type': 'E',
  \     'text': 'error overview 2',
  \     'detail': "error overview 2\n\nerror details 2",
  \   },
  \   {
  \     'lnum': 406,
  \     'col': 5,
  \     'end_lnum': 406,
  \     'end_col': 93,
  \     'type': 'E',
  \     'text': 'error overview 3',
  \     'detail': "error overview 3\n\nerror details 3",
  \   },
  \ ],
  \ ale_linters#elm#make#Handle(347, [
  \   json_encode([
  \      {
  \         'tag': 'unused import',
  \         'overview': 'warning overview',
  \         'details': 'warning details',
  \         'region': {'start': { 'line': 33, 'column': 1 }, 'end': { 'line': 33, 'column': 19 } },
  \         'type': 'warning',
  \         'file': ale#util#Tempname() . '/Module.elm',
  \      }
  \    ]),
  \   json_encode([
  \      {
  \        'tag': 'TYPE MISMATCH',
  \        'overview': 'error overview 1',
  \        'subregion': { 'start': { 'line': 406, 'column': 5 }, 'end': { 'line': 408, 'column': 18 } },
  \        'details': 'error details 1',
  \        'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } },
  \        'type': 'error',
  \        'file': ale#util#Tempname() . '/Module.elm',
  \      },
  \      {
  \        'tag': 'TYPE MISMATCH',
  \        'overview': 'error overview 2',
  \        'subregion': { 'start': { 'line': 407, 'column': 12 }, 'end': { 'line': 407, 'column': 17 } },
  \        'details': 'error details 2',
  \        'region': { 'start': { 'line': 406, 'column': 5}, 'end': { 'line': 407, 'column': 17 } },
  \        'type':'error',
  \        'file': ale#util#Tempname() . '/Module.elm',
  \      },
  \      {
  \        'tag': 'TYPE MISMATCH',
  \        'overview': 'error overview 3',
  \        'subregion': { 'start': { 'line': 406, 'column': 88 }, 'end': { 'line': 406, 'column': 93 } },
  \        'details': 'error details 3',
  \        'region': { 'start': { 'line': 406, 'column': 5 }, 'end': { 'line': 406, 'column': 93 } },
  \        'type':'error',
  \        'file': ale#util#Tempname() . '/Module.elm',
  \      }
  \    ]),
  \ ])

Execute(The elm-make handler should handle errors in Elm 0.18 imported modules):
  AssertEqual
  \ [
  \   {
  \     'lnum': 1,
  \     'type': 'E',
  \     'text': 'src/Module.elm:33 - error overview',
  \     'detail': "src/Module.elm:33 ----------\n\nerror overview\n\nerror details"
  \   }
  \ ],
  \ ale_linters#elm#make#Handle(347, [
  \   json_encode([
  \      {
  \         'tag': 'unused import',
  \         'overview': 'warning overview',
  \         'details': 'warning details',
  \         'region': {'start': { 'line': 33, 'column': 1 }, 'end': { 'line': 33, 'column': 19 } },
  \         'type': 'warning',
  \         'file': 'src/Module.elm',
  \      },
  \      {
  \         'tag': 'type error',
  \         'overview': 'error overview',
  \         'details': 'error details',
  \         'region': {'start': { 'line': 33, 'column': 1 }, 'end': { 'line': 33, 'column': 19 } },
  \         'type': 'error',
  \         'file': 'src/Module.elm',
  \      }
  \    ]),
  \ ])

" Generic

Execute(The elm-make handler should put an error on the first line if a line cannot be parsed):
  AssertEqual
  \ [
  \   {
  \     'lnum': 404,
  \     'col': 1,
  \     'end_lnum': 408,
  \     'end_col': 18,
  \     'type': 'E',
  \     'text': "error details 1\n\nstyled details"
  \   },
  \   {
  \     'lnum': 1,
  \     'type': 'E',
  \     'text': 'Not JSON',
  \     'detail': "Not JSON\nAlso not JSON",
  \   },
  \ ],
  \ ale_linters#elm#make#Handle(347, [
  \   json_encode({
  \      'type': 'compile-errors',
  \      'errors': [
  \        {
  \          'path': ale#util#Tempname() . '/Module.elm',
  \          'problems': [
  \            {
  \              'title': 'TYPE MISMATCH',
  \              'message': ["error details 1\n\n", { 'string': 'styled details' }],
  \              'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } }
  \            }
  \          ]
  \        }
  \      ]
  \    }),
  \    'Not JSON',
  \    'Also not JSON',
  \ ])

Execute(The elm-make handler should ignore success lines):
  AssertEqual
  \ [],
  \ ale_linters#elm#make#Handle(347, [
  \    'Successfully generated /dev/null',
  \ ])
