aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-12-05 17:48:34 +0100
committerGitHub <noreply@github.com>2022-12-05 17:48:34 +0100
commit2381f507189e3e10a43c3932a3ec6c2847180abc (patch)
treeaf51bec9c83583b6033bd193effc289c2c2b590a /tests
parentchore: update generated code (#728) (diff)
downloadmason-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.lua1
-rw-r--r--tests/mason-core/package/package_spec.lua136
-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()