diff options
| author | William Boman <william@redwill.se> | 2022-12-05 17:48:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-05 17:48:34 +0100 |
| commit | 2381f507189e3e10a43c3932a3ec6c2847180abc (patch) | |
| tree | af51bec9c83583b6033bd193effc289c2c2b590a /tests | |
| parent | chore: update generated code (#728) (diff) | |
| download | mason-2381f507189e3e10a43c3932a3ec6c2847180abc.tar mason-2381f507189e3e10a43c3932a3ec6c2847180abc.tar.gz mason-2381f507189e3e10a43c3932a3ec6c2847180abc.tar.bz2 mason-2381f507189e3e10a43c3932a3ec6c2847180abc.tar.lz mason-2381f507189e3e10a43c3932a3ec6c2847180abc.tar.xz mason-2381f507189e3e10a43c3932a3ec6c2847180abc.tar.zst mason-2381f507189e3e10a43c3932a3ec6c2847180abc.zip | |
fix(package): don't call vim API functions inside fast event (#730)
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/mason-core/managers/pip3_spec.lua | 1 | ||||
| -rw-r--r-- | tests/mason-core/package/package_spec.lua | 136 | ||||
| -rw-r--r-- | tests/mason-core/terminator_spec.lua (renamed from tests/mason/terminator_spec.lua) | 6 |
3 files changed, 86 insertions, 57 deletions
diff --git a/tests/mason-core/managers/pip3_spec.lua b/tests/mason-core/managers/pip3_spec.lua index 601ee839..7ed29b4d 100644 --- a/tests/mason-core/managers/pip3_spec.lua +++ b/tests/mason-core/managers/pip3_spec.lua @@ -146,7 +146,6 @@ describe("pip3 manager", function() local handle = InstallHandleGenerator "dummy" local ctx = InstallContextGenerator(handle) installer.run_installer(ctx, pip3.packages { "package" }) - vim.pretty_print(ctx.spawn.python) assert.spy(ctx.spawn.python).was_called(2) assert.spy(ctx.spawn.python).was_called_with { "-m", diff --git a/tests/mason-core/package/package_spec.lua b/tests/mason-core/package/package_spec.lua index 875ce3c6..1eee3ed5 100644 --- a/tests/mason-core/package/package_spec.lua +++ b/tests/mason-core/package/package_spec.lua @@ -2,12 +2,13 @@ local spy = require "luassert.spy" local mock = require "luassert.mock" local stub = require "luassert.stub" local match = require "luassert.match" +local a = require "mason-core.async" local Pkg = require "mason-core.package" local registry = require "mason-registry" -local Result = require "mason-core.result" describe("package", function() before_each(function() + registry.get_package("dummy"):uninstall() package.loaded["dummy_package"] = nil end) @@ -78,7 +79,6 @@ describe("package", function() end) it("should create new handle", function() - ---@type Package local dummy = registry.get_package "dummy" -- yo dawg local handle_handler = spy.new() @@ -89,7 +89,6 @@ describe("package", function() end) it("should not create new handle if one already exists", function() - ---@type Package local dummy = registry.get_package "dummy" dummy.handle = mock.new { is_closed = mockx.returns(false), @@ -103,57 +102,92 @@ describe("package", function() assert.spy(handle_handler).was_called(0) end) - it("should successfully install package", function() - local installer = require "mason-core.installer" - stub(installer, "execute") - installer.execute.returns(Result.success "Yay!") - ---@type Package - local dummy = registry.get_package "dummy" - local package_install_success_handler = spy.new() - local package_install_failed_handler = spy.new() - local install_success_handler = spy.new() - local install_failed_handler = spy.new() - registry:once("package:install:success", package_install_success_handler) - registry:once("package:install:failed", package_install_failed_handler) - dummy:once("install:success", install_success_handler) - dummy:once("install:failed", install_failed_handler) + it( + "should successfully install package", + async_test(function() + local dummy = registry.get_package "dummy" + local package_install_success_handler = spy.new() + local package_install_failed_handler = spy.new() + local install_success_handler = spy.new() + local install_failed_handler = spy.new() + registry:once("package:install:success", package_install_success_handler) + registry:once("package:install:failed", package_install_failed_handler) + dummy:once("install:success", install_success_handler) + dummy:once("install:failed", install_failed_handler) - local handle = dummy:install { version = "1337" } + local handle = dummy:install { version = "1337" } - assert.spy(installer.execute).was_called(1) - assert.spy(installer.execute).was_called_with(match.is_ref(handle), { requested_version = "1337" }) - assert.spy(install_success_handler).was_called(1) - assert.spy(install_success_handler).was_called_with(match.is_ref(handle)) - assert.spy(package_install_success_handler).was_called(1) - assert.spy(package_install_success_handler).was_called_with(match.is_ref(dummy), match.is_ref(handle)) - assert.spy(package_install_failed_handler).was_called(0) - assert.spy(install_failed_handler).was_called(0) - end) + assert.wait_for(function() + assert.is_true(handle:is_closed()) + assert.is_true(dummy:is_installed()) + end) - it("should fail to install package", function() - local installer = require "mason-core.installer" - stub(installer, "execute") - installer.execute.returns(Result.failure "Oh no.") - ---@type Package - local dummy = registry.get_package "dummy" - local package_install_success_handler = spy.new() - local package_install_failed_handler = spy.new() - local install_success_handler = spy.new() - local install_failed_handler = spy.new() - registry:once("package:install:success", package_install_success_handler) - registry:once("package:install:failed", package_install_failed_handler) - dummy:once("install:success", install_success_handler) - dummy:once("install:failed", install_failed_handler) + assert.spy(install_success_handler).was_called(1) + assert.spy(install_success_handler).was_called_with(match.is_ref(handle)) + assert.spy(package_install_success_handler).was_called(1) + assert.spy(package_install_success_handler).was_called_with(match.is_ref(dummy), match.is_ref(handle)) + assert.spy(package_install_failed_handler).was_called(0) + assert.spy(install_failed_handler).was_called(0) + end) + ) - local handle = dummy:install { version = "1337" } + it( + "should fail to install package", + async_test(function() + local dummy = registry.get_package "dummy" + stub(dummy.spec, "install") + dummy.spec.install.invokes(function() + error "I simply refuse to be installed." + end) + local package_install_success_handler = spy.new() + local package_install_failed_handler = spy.new() + local install_success_handler = spy.new() + local install_failed_handler = spy.new() + registry:once("package:install:success", package_install_success_handler) + registry:once("package:install:failed", package_install_failed_handler) + dummy:once("install:success", install_success_handler) + dummy:once("install:failed", install_failed_handler) - assert.spy(installer.execute).was_called(1) - assert.spy(installer.execute).was_called_with(match.is_ref(handle), { requested_version = "1337" }) - assert.spy(install_failed_handler).was_called(1) - assert.spy(install_failed_handler).was_called_with(match.is_ref(handle)) - assert.spy(package_install_failed_handler).was_called(1) - assert.spy(package_install_failed_handler).was_called_with(match.is_ref(dummy), match.is_ref(handle)) - assert.spy(package_install_success_handler).was_called(0) - assert.spy(install_success_handler).was_called(0) - end) + local handle = dummy:install { version = "1337" } + + assert.wait_for(function() + assert.is_true(handle:is_closed()) + assert.is_false(dummy:is_installed()) + end) + + assert.spy(install_failed_handler).was_called(1) + assert.spy(install_failed_handler).was_called_with(match.is_ref(handle)) + assert.spy(package_install_failed_handler).was_called(1) + assert.spy(package_install_failed_handler).was_called_with(match.is_ref(dummy), match.is_ref(handle)) + assert.spy(package_install_success_handler).was_called(0) + assert.spy(install_success_handler).was_called(0) + end) + ) + + it( + "should be able to start package installation outside of main loop", + async_test(function() + local dummy = registry.get_package "dummy" + + -- Move outside the main loop + a.wait(function(resolve) + local timer = vim.loop.new_timer() + timer:start(0, 0, function() + timer:close() + resolve() + end) + end) + + assert.is_true(vim.in_fast_event()) + + local handle = assert.is_not.has_error(function() + return dummy:install() + end) + + assert.wait_for(function() + assert.is_true(handle:is_closed()) + assert.is_true(dummy:is_installed()) + end) + end) + ) end) diff --git a/tests/mason/terminator_spec.lua b/tests/mason-core/terminator_spec.lua index 2058d4e2..f40b2746 100644 --- a/tests/mason/terminator_spec.lua +++ b/tests/mason-core/terminator_spec.lua @@ -3,15 +3,11 @@ local match = require "luassert.match" local spy = require "luassert.spy" local a = require "mason-core.async" local registry = require "mason-registry" -local terminator = require "mason.terminator" +local terminator = require "mason-core.terminator" local _ = require "mason-core.functional" local InstallHandle = require "mason-core.installer.handle" describe("terminator", function() - before_each(function() - terminator.setup() - end) - it( "should terminate all active handles on nvim exit", async_test(function() |
