aboutsummaryrefslogtreecommitdiffstats
path: root/tests/mason-core/installer/managers
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2023-03-12 08:21:15 +0100
committerGitHub <noreply@github.com>2023-03-12 08:21:15 +0100
commita01d02ad7f680aec98a1e2ec35b04cedd307cfa8 (patch)
tree1a09e274a1f2a4da85b911abcbb182a211035501 /tests/mason-core/installer/managers
parentfeat(golangci-lint): support linux_arm64 (#1089) (diff)
downloadmason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.tar
mason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.tar.gz
mason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.tar.bz2
mason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.tar.lz
mason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.tar.xz
mason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.tar.zst
mason-a01d02ad7f680aec98a1e2ec35b04cedd307cfa8.zip
feat: add github registry source capabilities (#1091)
Diffstat (limited to 'tests/mason-core/installer/managers')
-rw-r--r--tests/mason-core/installer/managers/cargo_spec.lua112
-rw-r--r--tests/mason-core/installer/managers/composer_spec.lua22
-rw-r--r--tests/mason-core/installer/managers/gem_spec.lua50
-rw-r--r--tests/mason-core/installer/managers/golang_spec.lua56
-rw-r--r--tests/mason-core/installer/managers/luarocks_spec.lua63
-rw-r--r--tests/mason-core/installer/managers/npm_spec.lua53
-rw-r--r--tests/mason-core/installer/managers/nuget_spec.lua21
-rw-r--r--tests/mason-core/installer/managers/opam_spec.lua20
-rw-r--r--tests/mason-core/installer/managers/pypi_spec.lua126
-rw-r--r--tests/mason-core/installer/managers/std_spec.lua150
10 files changed, 673 insertions, 0 deletions
diff --git a/tests/mason-core/installer/managers/cargo_spec.lua b/tests/mason-core/installer/managers/cargo_spec.lua
new file mode 100644
index 00000000..63768f4d
--- /dev/null
+++ b/tests/mason-core/installer/managers/cargo_spec.lua
@@ -0,0 +1,112 @@
+local installer = require "mason-core.installer"
+local cargo = require "mason-core.installer.managers.cargo"
+
+describe("cargo manager", function()
+ it("should install", function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.exec_in_context(ctx, function()
+ cargo.install("my-crate", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.cargo).was_called(1)
+ assert.spy(ctx.spawn.cargo).was_called_with {
+ "install",
+ "--root",
+ ".",
+ { "--version", "1.0.0" },
+ vim.NIL, -- features
+ vim.NIL, -- locked
+ "my-crate",
+ }
+ end)
+
+ it("should install locked", function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.exec_in_context(ctx, function()
+ cargo.install("my-crate", "1.0.0", {
+ locked = true,
+ })
+ end)
+
+ assert.spy(ctx.spawn.cargo).was_called(1)
+ assert.spy(ctx.spawn.cargo).was_called_with {
+ "install",
+ "--root",
+ ".",
+ { "--version", "1.0.0" },
+ vim.NIL, -- features
+ "--locked", -- locked
+ "my-crate",
+ }
+ end)
+
+ it("should install provided features", function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.exec_in_context(ctx, function()
+ cargo.install("my-crate", "1.0.0", {
+ features = "lsp,cli",
+ })
+ end)
+
+ assert.spy(ctx.spawn.cargo).was_called(1)
+ assert.spy(ctx.spawn.cargo).was_called_with {
+ "install",
+ "--root",
+ ".",
+ { "--version", "1.0.0" },
+ { "--features", "lsp,cli" }, -- features
+ vim.NIL, -- locked
+ "my-crate",
+ }
+ end)
+
+ it("should install git tag source", function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.exec_in_context(ctx, function()
+ cargo.install("my-crate", "1.0.0", {
+ git = {
+ url = "https://github.com/neovim/neovim",
+ },
+ })
+ end)
+
+ assert.spy(ctx.spawn.cargo).was_called(1)
+ assert.spy(ctx.spawn.cargo).was_called_with {
+ "install",
+ "--root",
+ ".",
+ { "--git", "https://github.com/neovim/neovim", "--tag", "1.0.0" },
+ vim.NIL, -- features
+ vim.NIL, -- locked
+ "my-crate",
+ }
+ end)
+
+ it("should install git rev source", function()
+ local handle = InstallHandleGenerator "dummy"
+ local ctx = InstallContextGenerator(handle)
+ installer.exec_in_context(ctx, function()
+ cargo.install("my-crate", "16dfc89abd413c391e5b63ae5d132c22843ce9a7", {
+ git = {
+ url = "https://github.com/neovim/neovim",
+ rev = true,
+ },
+ })
+ end)
+
+ assert.spy(ctx.spawn.cargo).was_called(1)
+ assert.spy(ctx.spawn.cargo).was_called_with {
+ "install",
+ "--root",
+ ".",
+ { "--git", "https://github.com/neovim/neovim", "--rev", "16dfc89abd413c391e5b63ae5d132c22843ce9a7" },
+ vim.NIL, -- features
+ vim.NIL, -- locked
+ "my-crate",
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/composer_spec.lua b/tests/mason-core/installer/managers/composer_spec.lua
new file mode 100644
index 00000000..a4e1f82f
--- /dev/null
+++ b/tests/mason-core/installer/managers/composer_spec.lua
@@ -0,0 +1,22 @@
+local installer = require "mason-core.installer"
+local composer = require "mason-core.installer.managers.composer"
+
+describe("composer manager", function()
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ composer.install("my-package", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.composer).was_called(2)
+ assert.spy(ctx.spawn.composer).was_called_with {
+ "init",
+ "--no-interaction",
+ "--stability=stable",
+ }
+ assert.spy(ctx.spawn.composer).was_called_with {
+ "require",
+ "my-package:1.0.0",
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/gem_spec.lua b/tests/mason-core/installer/managers/gem_spec.lua
new file mode 100644
index 00000000..580c6432
--- /dev/null
+++ b/tests/mason-core/installer/managers/gem_spec.lua
@@ -0,0 +1,50 @@
+local installer = require "mason-core.installer"
+local gem = require "mason-core.installer.managers.gem"
+
+describe("gem manager", function()
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ gem.install("my-gem", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.gem).was_called(1)
+ assert.spy(ctx.spawn.gem).was_called_with {
+ "install",
+ "--no-user-install",
+ "--no-format-executable",
+ "--install-dir=.",
+ "--bindir=bin",
+ "--no-document",
+ "my-gem:1.0.0",
+ vim.NIL, -- extra_packages
+ env = {
+ GEM_HOME = ctx.cwd:get(),
+ },
+ }
+ end)
+
+ it("should install extra packages", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ gem.install("my-gem", "1.0.0", {
+ extra_packages = { "extra-gem" },
+ })
+ end)
+
+ assert.spy(ctx.spawn.gem).was_called(1)
+ assert.spy(ctx.spawn.gem).was_called_with {
+ "install",
+ "--no-user-install",
+ "--no-format-executable",
+ "--install-dir=.",
+ "--bindir=bin",
+ "--no-document",
+ "my-gem:1.0.0",
+ { "extra-gem" },
+ env = {
+ GEM_HOME = ctx.cwd:get(),
+ },
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/golang_spec.lua b/tests/mason-core/installer/managers/golang_spec.lua
new file mode 100644
index 00000000..cdad6e25
--- /dev/null
+++ b/tests/mason-core/installer/managers/golang_spec.lua
@@ -0,0 +1,56 @@
+local installer = require "mason-core.installer"
+local golang = require "mason-core.installer.managers.golang"
+
+describe("golang manager", function()
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ golang.install("my-golang", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.go).was_called(1)
+ assert.spy(ctx.spawn.go).was_called_with {
+ "install",
+ "-v",
+ "my-golang@1.0.0",
+ env = {
+ GOBIN = ctx.cwd:get(),
+ },
+ }
+ end)
+
+ it("should install extra packages", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ golang.install("my-golang", "1.0.0", {
+ extra_packages = { "extra", "package" },
+ })
+ end)
+
+ assert.spy(ctx.spawn.go).was_called(3)
+ assert.spy(ctx.spawn.go).was_called_with {
+ "install",
+ "-v",
+ "my-golang@1.0.0",
+ env = {
+ GOBIN = ctx.cwd:get(),
+ },
+ }
+ assert.spy(ctx.spawn.go).was_called_with {
+ "install",
+ "-v",
+ "extra@latest",
+ env = {
+ GOBIN = ctx.cwd:get(),
+ },
+ }
+ assert.spy(ctx.spawn.go).was_called_with {
+ "install",
+ "-v",
+ "package@latest",
+ env = {
+ GOBIN = ctx.cwd:get(),
+ },
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/luarocks_spec.lua b/tests/mason-core/installer/managers/luarocks_spec.lua
new file mode 100644
index 00000000..69ac3946
--- /dev/null
+++ b/tests/mason-core/installer/managers/luarocks_spec.lua
@@ -0,0 +1,63 @@
+local installer = require "mason-core.installer"
+local stub = require "luassert.stub"
+local luarocks = require "mason-core.installer.managers.luarocks"
+
+describe("luarocks manager", function()
+ it("should install", function()
+ local ctx = create_dummy_context()
+ stub(ctx, "promote_cwd")
+ installer.exec_in_context(ctx, function()
+ luarocks.install("my-rock", "1.0.0")
+ end)
+
+ assert.spy(ctx.promote_cwd).was_called(1)
+ assert.spy(ctx.spawn.luarocks).was_called(1)
+ assert.spy(ctx.spawn.luarocks).was_called_with {
+ "install",
+ { "--tree", ctx.cwd:get() },
+ vim.NIL, -- dev
+ vim.NIL, -- server
+ { "my-rock", "1.0.0" },
+ }
+ end)
+
+ it("should install dev mode", function()
+ local ctx = create_dummy_context()
+ stub(ctx, "promote_cwd")
+ installer.exec_in_context(ctx, function()
+ luarocks.install("my-rock", "1.0.0", {
+ dev = true,
+ })
+ end)
+
+ assert.spy(ctx.promote_cwd).was_called(1)
+ assert.spy(ctx.spawn.luarocks).was_called(1)
+ assert.spy(ctx.spawn.luarocks).was_called_with {
+ "install",
+ { "--tree", ctx.cwd:get() },
+ "--dev",
+ vim.NIL, -- server
+ { "my-rock", "1.0.0" },
+ }
+ end)
+
+ it("should install using provided server", function()
+ local ctx = create_dummy_context()
+ stub(ctx, "promote_cwd")
+ installer.exec_in_context(ctx, function()
+ luarocks.install("my-rock", "1.0.0", {
+ server = "https://luarocks.org/dev",
+ })
+ end)
+
+ assert.spy(ctx.promote_cwd).was_called(1)
+ assert.spy(ctx.spawn.luarocks).was_called(1)
+ assert.spy(ctx.spawn.luarocks).was_called_with {
+ "install",
+ { "--tree", ctx.cwd:get() },
+ vim.NIL, -- dev
+ "--server=https://luarocks.org/dev",
+ { "my-rock", "1.0.0" },
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/npm_spec.lua b/tests/mason-core/installer/managers/npm_spec.lua
new file mode 100644
index 00000000..655acb64
--- /dev/null
+++ b/tests/mason-core/installer/managers/npm_spec.lua
@@ -0,0 +1,53 @@
+local installer = require "mason-core.installer"
+local stub = require "luassert.stub"
+local match = require "luassert.match"
+local npm = require "mason-core.installer.managers.npm"
+
+describe("npm manager", function()
+ it("should init package.json", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "append_file")
+ installer.exec_in_context(ctx, function()
+ npm.init()
+ end)
+
+ assert.spy(ctx.spawn.npm).was_called(1)
+ assert.spy(ctx.spawn.npm).was_called_with {
+ "init",
+ "--yes",
+ "--scope=mason",
+ }
+ assert.spy(ctx.fs.append_file).was_called(1)
+ assert.spy(ctx.fs.append_file).was_called_with(match.is_ref(ctx.fs), ".npmrc", "global-style=true")
+ end)
+
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ npm.install("my-package", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.npm).was_called(1)
+ assert.spy(ctx.spawn.npm).was_called_with {
+ "install",
+ "my-package@1.0.0",
+ vim.NIL, -- extra_packages
+ }
+ end)
+
+ it("should install extra packages", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ npm.install("my-package", "1.0.0", {
+ extra_packages = { "extra-package" },
+ })
+ end)
+
+ assert.spy(ctx.spawn.npm).was_called(1)
+ assert.spy(ctx.spawn.npm).was_called_with {
+ "install",
+ "my-package@1.0.0",
+ { "extra-package" },
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/nuget_spec.lua b/tests/mason-core/installer/managers/nuget_spec.lua
new file mode 100644
index 00000000..1bdecf37
--- /dev/null
+++ b/tests/mason-core/installer/managers/nuget_spec.lua
@@ -0,0 +1,21 @@
+local installer = require "mason-core.installer"
+local nuget = require "mason-core.installer.managers.nuget"
+
+describe("nuget manager", function()
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ nuget.install("nuget-package", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.dotnet).was_called(1)
+ assert.spy(ctx.spawn.dotnet).was_called_with {
+ "tool",
+ "update",
+ "--tool-path",
+ ".",
+ { "--version", "1.0.0" },
+ "nuget-package",
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/opam_spec.lua b/tests/mason-core/installer/managers/opam_spec.lua
new file mode 100644
index 00000000..c1fe59f6
--- /dev/null
+++ b/tests/mason-core/installer/managers/opam_spec.lua
@@ -0,0 +1,20 @@
+local installer = require "mason-core.installer"
+local opam = require "mason-core.installer.managers.opam"
+
+describe("opam manager", function()
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ opam.install("opam-package", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn.opam).was_called(1)
+ assert.spy(ctx.spawn.opam).was_called_with {
+ "install",
+ "--destdir=.",
+ "--yes",
+ "--verbose",
+ "opam-package.1.0.0",
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/pypi_spec.lua b/tests/mason-core/installer/managers/pypi_spec.lua
new file mode 100644
index 00000000..f0a6cdc6
--- /dev/null
+++ b/tests/mason-core/installer/managers/pypi_spec.lua
@@ -0,0 +1,126 @@
+local installer = require "mason-core.installer"
+local stub = require "luassert.stub"
+local path = require "mason-core.path"
+local pypi = require "mason-core.installer.managers.pypi"
+
+---@param ctx InstallContext
+local function venv_py(ctx)
+ return path.concat {
+ ctx.cwd:get(),
+ "venv",
+ "bin",
+ "python",
+ }
+end
+
+describe("pypi manager", function()
+ it("should init venv without upgrading pip", function()
+ local ctx = create_dummy_context()
+ stub(ctx, "promote_cwd")
+ installer.exec_in_context(ctx, function()
+ pypi.init { upgrade_pip = false }
+ end)
+
+ assert.spy(ctx.promote_cwd).was_called(1)
+ assert.spy(ctx.spawn.python3).was_called(1)
+ assert.spy(ctx.spawn.python3).was_called_with {
+ "-m",
+ "venv",
+ "venv",
+ }
+ end)
+
+ it("should init venv and upgrade pip", function()
+ local ctx = create_dummy_context()
+ stub(ctx, "promote_cwd")
+ installer.exec_in_context(ctx, function()
+ pypi.init { upgrade_pip = true, install_extra_args = { "--proxy", "http://localhost" } }
+ end)
+
+ assert.spy(ctx.promote_cwd).was_called(1)
+ assert.spy(ctx.spawn.python3).was_called(1)
+ assert.spy(ctx.spawn.python3).was_called_with {
+ "-m",
+ "venv",
+ "venv",
+ }
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called(1)
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called_with {
+ "-m",
+ "pip",
+ "--disable-pip-version-check",
+ "install",
+ "-U",
+ { "--proxy", "http://localhost" },
+ { "pip" },
+ }
+ end)
+
+ it("should install", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ pypi.install("pypi-package", "1.0.0")
+ end)
+
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called(1)
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called_with {
+ "-m",
+ "pip",
+ "--disable-pip-version-check",
+ "install",
+ "-U",
+ vim.NIL, -- install_extra_args
+ {
+ "pypi-package==1.0.0",
+ vim.NIL, -- extra_packages
+ },
+ }
+ end)
+
+ it("should install extra specifier", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ pypi.install("pypi-package", "1.0.0", {
+ extra = "lsp",
+ })
+ end)
+
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called(1)
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called_with {
+ "-m",
+ "pip",
+ "--disable-pip-version-check",
+ "install",
+ "-U",
+ vim.NIL, -- install_extra_args
+ {
+ "pypi-package[lsp]==1.0.0",
+ vim.NIL, -- extra_packages
+ },
+ }
+ end)
+
+ it("should install extra packages", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ pypi.install("pypi-package", "1.0.0", {
+ extra_packages = { "extra-package" },
+ install_extra_args = { "--proxy", "http://localhost:9000" },
+ })
+ end)
+
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called(1)
+ assert.spy(ctx.spawn[venv_py(ctx)]).was_called_with {
+ "-m",
+ "pip",
+ "--disable-pip-version-check",
+ "install",
+ "-U",
+ { "--proxy", "http://localhost:9000" },
+ {
+ "pypi-package==1.0.0",
+ { "extra-package" },
+ },
+ }
+ end)
+end)
diff --git a/tests/mason-core/installer/managers/std_spec.lua b/tests/mason-core/installer/managers/std_spec.lua
new file mode 100644
index 00000000..feff9abe
--- /dev/null
+++ b/tests/mason-core/installer/managers/std_spec.lua
@@ -0,0 +1,150 @@
+local installer = require "mason-core.installer"
+local stub = require "luassert.stub"
+local match = require "luassert.match"
+local std = require "mason-core.installer.managers.std"
+
+describe("std unpack [Unix]", function()
+ it("should unpack .gz", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.gz"
+ end)
+
+ assert.spy(ctx.spawn.gzip).was_called(1)
+ assert.spy(ctx.spawn.gzip).was_called_with { "-d", "file.gz" }
+ end)
+
+ it("should unpack .tar", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.tar"
+ end)
+
+ assert.spy(ctx.spawn.tar).was_called(1)
+ assert.spy(ctx.spawn.tar).was_called_with { "--no-same-owner", "-xvf", "file.tar" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.tar")
+ end)
+
+ it("should unpack .tar.bz2", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.tar.bz2"
+ end)
+
+ assert.spy(ctx.spawn.tar).was_called(1)
+ assert.spy(ctx.spawn.tar).was_called_with { "--no-same-owner", "-xvf", "file.tar.bz2" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.tar.bz2")
+ end)
+
+ it("should unpack .tar.gz", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.tar.gz"
+ end)
+
+ assert.spy(ctx.spawn.tar).was_called(1)
+ assert.spy(ctx.spawn.tar).was_called_with { "--no-same-owner", "-xvf", "file.tar.gz" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.tar.gz")
+ end)
+
+ it("should unpack .tar.xz", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.tar.xz"
+ end)
+
+ assert.spy(ctx.spawn.tar).was_called(1)
+ assert.spy(ctx.spawn.tar).was_called_with { "--no-same-owner", "-xvf", "file.tar.xz" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.tar.xz")
+ end)
+
+ it("should unpack .tar.zst", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.tar.zst"
+ end)
+
+ assert.spy(ctx.spawn.tar).was_called(1)
+ assert.spy(ctx.spawn.tar).was_called_with { "--no-same-owner", "-xvf", "file.tar.zst" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.tar.zst")
+ end)
+
+ it("should unpack .vsix", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.vsix"
+ end)
+
+ assert.spy(ctx.spawn.unzip).was_called(1)
+ assert.spy(ctx.spawn.unzip).was_called_with { "-d", ".", "file.vsix" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.vsix")
+ end)
+
+ it("should unpack .zip", function()
+ local ctx = create_dummy_context()
+ stub(ctx.fs, "unlink")
+ installer.exec_in_context(ctx, function()
+ std.unpack "file.zip"
+ end)
+
+ assert.spy(ctx.spawn.unzip).was_called(1)
+ assert.spy(ctx.spawn.unzip).was_called_with { "-d", ".", "file.zip" }
+ assert.spy(ctx.fs.unlink).was_called(1)
+ assert.spy(ctx.fs.unlink).was_called_with(match.is_ref(ctx.fs), "file.zip")
+ end)
+end)
+
+describe("std clone", function()
+ it("should clone", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ std.clone "https://github.com/williamboman/mason.nvim"
+ end)
+
+ assert.spy(ctx.spawn.git).was_called(1)
+ assert.spy(ctx.spawn.git).was_called_with {
+ "clone",
+ "--depth",
+ "1",
+ vim.NIL, -- recursive
+ "https://github.com/williamboman/mason.nvim",
+ ".",
+ }
+ end)
+
+ it("should clone and checkout rev", function()
+ local ctx = create_dummy_context()
+ installer.exec_in_context(ctx, function()
+ std.clone("https://github.com/williamboman/mason.nvim", {
+ rev = "e1fd03b1856cb5ad8425f49e18353dc524b02f91",
+ recursive = true,
+ })
+ end)
+
+ assert.spy(ctx.spawn.git).was_called(3)
+ assert.spy(ctx.spawn.git).was_called_with {
+ "clone",
+ "--depth",
+ "1",
+ "--recursive",
+ "https://github.com/williamboman/mason.nvim",
+ ".",
+ }
+ assert
+ .spy(ctx.spawn.git)
+ .was_called_with { "fetch", "--depth", "1", "origin", "e1fd03b1856cb5ad8425f49e18353dc524b02f91" }
+ assert.spy(ctx.spawn.git).was_called_with { "checkout", "FETCH_HEAD" }
+ end)
+end)