code-server/test/unit/common/util.test.ts
Asher 4b4ec37880
Fix relative paths (#4594)
* Add tests for relativeRoot

* Remove path.posix.join

Since this is for file system paths it feels incorrect to use it on
URL paths as they are different in many ways.

* Rewrite cookie path logic

Before we relied on the client to resolve the base given to it by the
backend against the path.

Instead have the client pass that information along so we can resolve it
on the backend.  This means the client has to do less work.

* Do not remove out directory before watch

This is re-used for incremental compilation.

Also remove del since that was the only use (and we can use fs.rmdir in
the future if we need something like this).

* Remove unused function resolveBase
2021-12-08 15:52:15 -06:00

125 lines
3.7 KiB
TypeScript

import { JSDOM } from "jsdom"
import * as util from "../../../src/common/util"
import { createLoggerMock } from "../../utils/helpers"
const dom = new JSDOM()
global.document = dom.window.document
export type LocationLike = Pick<Location, "pathname" | "origin">
describe("util", () => {
describe("normalize", () => {
it("should remove multiple slashes", () => {
expect(util.normalize("//foo//bar//baz///mumble")).toBe("/foo/bar/baz/mumble")
})
it("should remove trailing slashes", () => {
expect(util.normalize("qux///")).toBe("qux")
})
it("should preserve trailing slash if it exists", () => {
expect(util.normalize("qux///", true)).toBe("qux/")
expect(util.normalize("qux", true)).toBe("qux")
})
})
describe("split", () => {
it("should split at a comma", () => {
expect(util.split("Hello,world", ",")).toStrictEqual(["Hello", "world"])
})
it("shouldn't split if the delimiter doesn't exist", () => {
expect(util.split("Hello world", ",")).toStrictEqual(["Hello world", ""])
})
})
describe("plural", () => {
it("should add an s if count is greater than 1", () => {
expect(util.plural(2, "dog")).toBe("dogs")
})
it("should NOT add an s if the count is 1", () => {
expect(util.plural(1, "dog")).toBe("dog")
})
})
describe("generateUuid", () => {
it("should generate a unique uuid", () => {
const uuid = util.generateUuid()
const uuid2 = util.generateUuid()
expect(uuid).toHaveLength(24)
expect(typeof uuid).toBe("string")
expect(uuid).not.toBe(uuid2)
})
it("should generate a uuid of a specific length", () => {
const uuid = util.generateUuid(10)
expect(uuid).toHaveLength(10)
})
})
describe("trimSlashes", () => {
it("should remove leading slashes", () => {
expect(util.trimSlashes("/hello-world")).toBe("hello-world")
})
it("should remove trailing slashes", () => {
expect(util.trimSlashes("hello-world/")).toBe("hello-world")
})
it("should remove both leading and trailing slashes", () => {
expect(util.trimSlashes("/hello-world/")).toBe("hello-world")
})
it("should remove multiple leading and trailing slashes", () => {
expect(util.trimSlashes("///hello-world////")).toBe("hello-world")
})
})
describe("arrayify", () => {
it("should return value it's already an array", () => {
expect(util.arrayify(["hello", "world"])).toStrictEqual(["hello", "world"])
})
it("should wrap the value in an array if not an array", () => {
expect(
util.arrayify({
name: "Coder",
version: "3.8",
}),
).toStrictEqual([{ name: "Coder", version: "3.8" }])
})
it("should return an empty array if the value is undefined", () => {
expect(util.arrayify(undefined)).toStrictEqual([])
})
})
describe("logError", () => {
afterEach(() => {
jest.clearAllMocks()
})
afterAll(() => {
jest.restoreAllMocks()
})
const loggerModule = createLoggerMock()
it("should log an error with the message and stack trace", () => {
const message = "You don't have access to that folder."
const error = new Error(message)
util.logError(loggerModule.logger, "ui", error)
expect(loggerModule.logger.error).toHaveBeenCalled()
expect(loggerModule.logger.error).toHaveBeenCalledWith(`ui: ${error.message} ${error.stack}`)
})
it("should log an error, even if not an instance of error", () => {
util.logError(loggerModule.logger, "api", "oh no")
expect(loggerModule.logger.error).toHaveBeenCalled()
expect(loggerModule.logger.error).toHaveBeenCalledWith("api: oh no")
})
})
})