aboutsummaryrefslogtreecommitdiffstats
path: root/tests/dispatcher_spec.lua
blob: 0a2384e90c733cc316f7565068197714c5827bcf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
local dispatcher = require "nvim-lsp-installer.dispatcher"
local spy = require "luassert.spy"
local match = require "luassert.match"

describe("dispatcher", function()
    it("calls registered callbacks", function()
        local server = {}
        local callback = spy.new()
        dispatcher.register_server_ready_callback(callback)
        dispatcher.dispatch_server_ready(server)

        assert.spy(callback).was_called(1)
        assert.spy(callback).was_called_with(server)
    end)

    it("deregisters callbacks", function()
        local server = {}
        local callback = spy.new()
        local deregister = dispatcher.register_server_ready_callback(callback)
        deregister()
        dispatcher.dispatch_server_ready(server)

        assert.spy(callback).was_not_called()
    end)

    it("calls all registers callbacks, even if one errors", function()
        local server = {}
        local callback1 = spy.new()
        local callback2 = spy.new(function()
            error "I have an error"
        end)
        local callback3 = spy.new()
        local notify = spy.on(vim, "notify")
        dispatcher.register_server_ready_callback(callback1)
        dispatcher.register_server_ready_callback(callback2)
        dispatcher.register_server_ready_callback(callback3)
        dispatcher.dispatch_server_ready(server)

        assert.spy(callback1).was_called(1)
        assert.spy(callback1).was_called_with(server)
        assert.spy(callback2).was_called(1)
        assert.spy(callback2).was_called_with(server)
        assert.spy(callback3).was_called(1)
        assert.spy(callback3).was_called_with(server)
        assert.spy(notify).was_called(1)
        assert.spy(notify).was_called_with(match.has_match "^.*I have an error$", vim.log.levels.ERROR)
    end)
end)