You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

129 lines
4.4 KiB

import { script } from "./shellcode/script.js"
import { Bash, Fish, PowerShell, Zsh } from "./shellcode/shells.js"
import describe from "./describe.js"
import { writeFile } from "node:fs/promises"
import path from "node:path"
import testCwd from "./shellcode/test-cwd.js"
import getStderr from "./shellcode/get-stderr.js"
import testNodeVersion from "./shellcode/test-node-version.js"
for (const shell of [Bash, Zsh, Fish, PowerShell]) {
describe(shell, () => {
test(`allows to install an lts if version missing`, async () => {
await writeFile(path.join(testCwd(), ".node-version"), "lts/*")
await script(shell)
.then(shell.env({}))
.then(shell.call("fnm", ["use", "--install-if-missing"]))
.then(
shell.scriptOutputContains(shell.call("fnm", ["ls"]), "lts-latest")
)
.takeSnapshot(shell)
.execute(shell)
})
test(`errors when alias is not found`, async () => {
await writeFile(path.join(testCwd(), ".node-version"), "lts/*")
await script(shell)
.then(shell.env({ logLevel: "error" }))
.then(
shell.scriptOutputContains(
getStderr(shell.call("fnm", ["use"])),
"'Requested version lts-latest is not'"
)
)
.takeSnapshot(shell)
.execute(shell)
})
test(`unalias a version`, async () => {
await script(shell)
.then(shell.env({}))
.then(shell.call("fnm", ["install", "11.10.0"]))
.then(shell.call("fnm", ["install", "8.11.3"]))
.then(shell.call("fnm", ["alias", "8.11.3", "version8"]))
.then(shell.scriptOutputContains(shell.call("fnm", ["ls"]), "version8"))
.then(shell.call("fnm", ["unalias", "version8"]))
.then(
shell.scriptOutputContains(
getStderr(shell.call("fnm", ["use", "version8"])),
"'Requested version version8 is not currently installed'"
)
)
.takeSnapshot(shell)
.execute(shell)
})
test(`unalias errors if alias not found`, async () => {
await script(shell)
.then(shell.env({ logLevel: "error" }))
.then(
shell.scriptOutputContains(
getStderr(shell.call("fnm", ["unalias", "lts"])),
"'Requested alias lts not found'"
)
)
.takeSnapshot(shell)
.execute(shell)
})
test(`can alias the system node`, async () => {
await script(shell)
.then(shell.env({}))
.then(shell.call("fnm", ["alias", "system", "my_system"]))
.then(
shell.scriptOutputContains(shell.call("fnm", ["ls"]), "my_system")
)
.then(shell.call("fnm", ["alias", "system", "default"]))
.then(shell.call("fnm", ["alias", "my_system", "my_system2"]))
.then(
shell.scriptOutputContains(shell.call("fnm", ["ls"]), "my_system2")
)
.then(
shell.scriptOutputContains(
shell.call("fnm", ["use", "my_system"]),
"'Bypassing fnm'"
)
)
.then(shell.call("fnm", ["unalias", "my_system"]))
.then(
shell.scriptOutputContains(
getStderr(shell.call("fnm", ["use", "my_system"])),
"'Requested version my_system is not currently installed'"
)
)
.takeSnapshot(shell)
.execute(shell)
})
test(`aliasing versions`, async () => {
const installedVersions = shell.call("fnm", ["ls"])
await script(shell)
.then(shell.env({}))
.then(shell.call("fnm", ["install", "6.11.3"]))
.then(shell.call("fnm", ["install", "8.11.3"]))
.then(shell.call("fnm", ["alias", "8.11", "oldie"]))
.then(shell.call("fnm", ["alias", "6", "older"]))
.then(shell.call("fnm", ["default", "older"]))
.then(
shell.scriptOutputContains(
shell.scriptOutputContains(installedVersions, "8.11.3"),
"oldie"
)
)
.then(
shell.scriptOutputContains(
shell.scriptOutputContains(installedVersions, "6.11.3"),
"older"
)
)
.then(shell.call("fnm", ["use", "older"]))
.then(testNodeVersion(shell, "v6.11.3"))
.then(shell.call("fnm", ["use", "oldie"]))
.then(testNodeVersion(shell, "v8.11.3"))
.then(shell.call("fnm", ["use", "default"]))
.then(testNodeVersion(shell, "v6.11.3"))
.takeSnapshot(shell)
.execute(shell)
})
})
}