diff options
| author | William Boman <william@redwill.se> | 2022-07-13 16:21:16 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-13 16:21:16 +0200 |
| commit | fa78d7cf0445083243cdd8feee4923f99d984e30 (patch) | |
| tree | 79d684df539b3a39dc14742335c38d5b19a0e072 /tests/mason-core | |
| parent | fix(api): fix the :MasonUninstall command (#66) (diff) | |
| download | mason-fa78d7cf0445083243cdd8feee4923f99d984e30.tar mason-fa78d7cf0445083243cdd8feee4923f99d984e30.tar.gz mason-fa78d7cf0445083243cdd8feee4923f99d984e30.tar.bz2 mason-fa78d7cf0445083243cdd8feee4923f99d984e30.tar.lz mason-fa78d7cf0445083243cdd8feee4923f99d984e30.tar.xz mason-fa78d7cf0445083243cdd8feee4923f99d984e30.tar.zst mason-fa78d7cf0445083243cdd8feee4923f99d984e30.zip | |
tests: add some InstallHandle tests (#67)
Diffstat (limited to 'tests/mason-core')
| -rw-r--r-- | tests/mason-core/installer/handle_spec.lua | 100 | ||||
| -rw-r--r-- | tests/mason-core/installer/installer_spec.lua (renamed from tests/mason-core/installer_spec.lua) | 0 |
2 files changed, 100 insertions, 0 deletions
diff --git a/tests/mason-core/installer/handle_spec.lua b/tests/mason-core/installer/handle_spec.lua new file mode 100644 index 00000000..02fcc358 --- /dev/null +++ b/tests/mason-core/installer/handle_spec.lua @@ -0,0 +1,100 @@ +local a = require "mason-core.async" +local mock = require "luassert.mock" +local stub = require "luassert.stub" +local spy = require "luassert.spy" +local InstallHandle = require "mason-core.installer.handle" + +describe("installer handle", function() + it("should register spawn handle", function() + local handle = InstallHandle.new(mock.new {}) + local spawn_handle_change_handler = spy.new() + handle:once("spawn_handles:change", spawn_handle_change_handler) + local luv_handle = mock.new {} + handle:register_spawn_handle(luv_handle, 1337, "tar", { "-xvf", "file" }) + assert.same({ + uv_handle = luv_handle, + pid = 1337, + cmd = "tar", + args = { "-xvf", "file" }, + }, handle:peek_spawn_handle():get()) + assert.spy(spawn_handle_change_handler).was_called(1) + end) + + it("should deregister spawn handle", function() + local handle = InstallHandle.new(mock.new {}) + local spawn_handle_change_handler = spy.new() + handle:once("spawn_handles:change", spawn_handle_change_handler) + local luv_handle1 = mock.new {} + local luv_handle2 = mock.new {} + handle:register_spawn_handle(luv_handle1, 42, "curl", { "someurl" }) + handle:register_spawn_handle(luv_handle2, 1337, "tar", { "-xvf", "file" }) + assert.is_true(handle:deregister_spawn_handle(luv_handle1)) + assert.equals(1, #handle.spawn_handles) + assert.same({ + uv_handle = luv_handle2, + pid = 1337, + cmd = "tar", + args = { "-xvf", "file" }, + }, handle:peek_spawn_handle():get()) + assert.spy(spawn_handle_change_handler).was_called(3) + end) + + it("should change state", function() + local handle = InstallHandle.new(mock.new {}) + local state_change_handler = spy.new() + handle:once("state:change", state_change_handler) + handle:set_state "QUEUED" + assert.equals("QUEUED", handle.state) + assert.spy(state_change_handler).was_called(1) + assert.spy(state_change_handler).was_called_with("QUEUED", "IDLE") + end) + + it("should send signals to registered handles", function() + local process = require "mason-core.process" + stub(process, "kill") + local uv_handle = {} + local handle = InstallHandle.new(mock.new {}) + local kill_handler = spy.new() + handle:once("kill", kill_handler) + handle.state = "ACTIVE" + handle.spawn_handles = { { uv_handle = uv_handle } } + + handle:kill(9) + assert.spy(process.kill).was_called(1) + assert.spy(process.kill).was_called_with(uv_handle, 9) + assert.spy(kill_handler).was_called(1) + assert.spy(kill_handler).was_called_with(9) + end) + + it( + "should terminate handle", + async_test(function() + local process = require "mason-core.process" + stub(process, "kill") + local uv_handle1 = {} + local uv_handle2 = {} + local handle = InstallHandle.new(mock.new {}) + local kill_handler = spy.new() + local terminate_handler = spy.new() + local closed_handler = spy.new() + handle:once("kill", kill_handler) + handle:once("terminate", terminate_handler) + handle:once("closed", closed_handler) + handle.state = "ACTIVE" + handle.spawn_handles = { { uv_handle = uv_handle2 }, { uv_handle = uv_handle2 } } + + handle:terminate() + assert.spy(process.kill).was_called(2) + assert.spy(process.kill).was_called_with(uv_handle1, 15) + assert.spy(process.kill).was_called_with(uv_handle2, 15) + assert.spy(kill_handler).was_called(1) + assert.spy(kill_handler).was_called_with(15) + assert.spy(terminate_handler).was_called(1) + assert.is_true(handle.is_terminated) + assert.wait_for(function() + assert.is_true(handle:is_closed()) + assert.spy(closed_handler).was_called(1) + end) + end) + ) +end) diff --git a/tests/mason-core/installer_spec.lua b/tests/mason-core/installer/installer_spec.lua index 8dc9b516..8dc9b516 100644 --- a/tests/mason-core/installer_spec.lua +++ b/tests/mason-core/installer/installer_spec.lua |
