--- /dev/null
+Execute(Invalid responses should be handled):
+ AssertEqual '', ale#lsp#response#GetErrorMessage({})
+ AssertEqual '', ale#lsp#response#GetErrorMessage({'error': 0})
+ AssertEqual '', ale#lsp#response#GetErrorMessage({'error': {}})
+ AssertEqual '', ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': 0,
+ \ 'message': 'x',
+ \ },
+ \})
+ AssertEqual '', ale#lsp#response#GetErrorMessage({'error': {'code': -32602}})
+ AssertEqual '', ale#lsp#response#GetErrorMessage({'error': {'code': -32603}})
+
+Execute(Messages without tracebacks should be handled):
+ AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32602,
+ \ 'message': 'xyz',
+ \ },
+ \})
+ AssertEqual 'abc', ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32603,
+ \ 'message': 'abc',
+ \ },
+ \})
+
+Execute(Invalid traceback data should be tolerated):
+ AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32602,
+ \ 'message': 'xyz',
+ \ 'data': {
+ \ },
+ \ },
+ \})
+ AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32602,
+ \ 'message': 'xyz',
+ \ 'data': {
+ \ 'traceback': 0,
+ \ },
+ \ },
+ \})
+ AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32602,
+ \ 'message': 'xyz',
+ \ 'data': {
+ \ 'traceback': [],
+ \ },
+ \ },
+ \})
+
+Execute(Messages with tracebacks should be handled):
+ AssertEqual "xyz\n123\n456", ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32602,
+ \ 'message': 'xyz',
+ \ 'data': {
+ \ 'traceback': ['123', '456'],
+ \ },
+ \ },
+ \})
+
+Execute(Messages with string data should be handled):
+ AssertEqual "xyz\nUncaught Exception", ale#lsp#response#GetErrorMessage({
+ \ 'error': {
+ \ 'code': -32602,
+ \ 'message': 'xyz',
+ \ 'data': 'Uncaught Exception',
+ \ },
+ \})