--- /dev/null
+Describe lsp#internal#diagnostics#state
+ Before
+ %bwipeout!
+ let g:lsp_diagnostics_enabled = 1
+ call lsp#internal#diagnostics#state#_disable()
+ call lsp#internal#diagnostics#state#_enable()
+ End
+
+ After all
+ %bwipeout!
+ let g:lsp_diagnostics_enabled = 0
+ call lsp#internal#diagnostics#state#_disable()
+ End
+
+ It should be able to subscribe to textDocument/publishDiagnostics stream and update state correctly
+ let l:uri = 'file://some/uri'
+
+ let l:server1_response1 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
+ \ {'severity': 1, 'message': 'm1', 'range': { 'start': { 'line': 1, 'character': 1, 'end': { 'line': 1, 'character': 1 } } }},
+ \ {'severity': 1, 'message': 'm2', 'range': { 'start': { 'line': 1, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
+ \ ]}}
+ let l:server2_response1 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
+ \ {'severity': 1, 'message': 's2', 'range': { 'start': { 'line': 2, 'character': 3, 'end': { 'line': 4, 'character': 5 } } }},
+ \ ]}}
+ let l:server1_response2 = {'method': 'textDocument/publishDiagnostics', 'params': {'uri': l:uri, 'diagnostics': [
+ \ {'severity': 1, 'message': 'm2', 'range': { 'start': { 'line': 1, 'character': 2, 'end': { 'line': 1, 'character': 3 } } }},
+ \ ]}}
+
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), {})
+
+ call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response1 })
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), { 'server1': l:server1_response1 })
+ let l:want = {}
+ let l:want[l:uri] = { 'server1': l:server1_response1 }
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
+
+ call lsp#stream(1, { 'server': 'server2', 'response': l:server2_response1 })
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), { 'server1': l:server1_response1, 'server2': l:server2_response1 })
+ let l:want = {}
+ let l:want[l:uri] = { 'server1': l:server1_response1, 'server2': l:server2_response1 }
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
+
+ call lsp#stream(1, { 'server': 'server1', 'response': l:server1_response2 })
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_server_for_uri(l:uri), { 'server1': l:server1_response2, 'server2': l:server2_response1 })
+ let l:want = {}
+ let l:want[l:uri] = { 'server1': l:server1_response2, 'server2': l:server2_response1 }
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
+
+ call lsp#stream(1, { 'server': '$vimlsp',
+ \ 'response': { 'method': '$/vimlsp/lsp_server_exit', 'params': { 'server': 'server1' } } })
+ let l:want = {}
+ let l:want[l:uri] = { 'server2': l:server2_response1 }
+ Assert Equals(lsp#internal#diagnostics#state#_get_all_diagnostics_grouped_by_uri_and_server(), l:want)
+ End
+
+
+ It should correctly return the state of buffer
+ call lsp#internal#diagnostics#state#_disable()
+ call lsp#internal#diagnostics#state#_enable()
+
+ let l:bufnr = bufnr('%')
+ Assert True(lsp#internal#diagnostics#state#_is_enabled_for_buffer(l:bufnr))
+
+ call lsp#internal#diagnostics#state#_disable_for_buffer(l:bufnr)
+ Assert False(lsp#internal#diagnostics#state#_is_enabled_for_buffer(l:bufnr))
+
+ call lsp#internal#diagnostics#state#_enable_for_buffer(l:bufnr)
+ Assert True(lsp#internal#diagnostics#state#_is_enabled_for_buffer(l:bufnr))
+ End
+End