mirror of
https://github.com/pyscript/pyscript.git
synced 2025-12-21 11:15:36 -05:00
* Add beforePyScriptExec, afterPyScriptExec lifecycle hooks * Add stdiodirector plugin for `output`, `stderr` attributes of py-script tag * Add docs on `output` and `stderr` attributes of py-script tag * Tests * Removed output deprecation warning for `output` attribute * Add createSingularWarning(), with createDeprecationWarning as alias
74 lines
2.9 KiB
TypeScript
74 lines
2.9 KiB
TypeScript
import { beforeEach, expect, describe, it } from "@jest/globals"
|
|
import { ensureUniqueId, joinPaths, createSingularWarning} from "../../src/utils"
|
|
|
|
describe("Utils", () => {
|
|
|
|
let element: HTMLElement;
|
|
|
|
beforeEach(() => {
|
|
element = document.createElement("div");
|
|
})
|
|
|
|
it("ensureUniqueId sets unique id on element", async () => {
|
|
expect(element.id).toBe("")
|
|
|
|
ensureUniqueId(element)
|
|
|
|
expect(element.id).toBe("py-internal-0")
|
|
})
|
|
|
|
it("ensureUniqueId sets unique id with increasing counter", async () => {
|
|
const secondElement = document.createElement("div")
|
|
|
|
expect(element.id).toBe("")
|
|
expect(secondElement.id).toBe("")
|
|
|
|
ensureUniqueId(element)
|
|
ensureUniqueId(secondElement)
|
|
|
|
// The counter will have been incremented on
|
|
// the previous test, make sure it keeps increasing
|
|
expect(element.id).toBe("py-internal-1")
|
|
expect(secondElement.id).toBe("py-internal-2")
|
|
})
|
|
})
|
|
|
|
describe("JoinPaths", () => {
|
|
it("should remove trailing slashes from the beginning and the end", () => {
|
|
const paths: string[] = ['///abc/d/e///'];
|
|
const joinedPath = joinPaths(paths);
|
|
expect(joinedPath).toStrictEqual('/abc/d/e');
|
|
})
|
|
|
|
it("should not remove slashes from the middle to preserve protocols such as http", () => {
|
|
const paths: string[] = ['http://google.com', '///data.txt'];
|
|
const joinedPath = joinPaths(paths);
|
|
expect(joinedPath).toStrictEqual('http://google.com/data.txt');
|
|
})
|
|
|
|
it("should not join paths when they are empty strings", () => {
|
|
const paths: string[] = ['', '///hhh/ll/pp///', '', 'kkk'];
|
|
const joinedPath = joinPaths(paths);
|
|
expect(joinedPath).toStrictEqual('hhh/ll/pp/kkk');
|
|
})
|
|
|
|
describe("createSingularBanner", () => {
|
|
it("should create one and new banner containing the sentinel text, and not duplicate it", () => {
|
|
//One warning banner with the desired text should be created
|
|
createSingularWarning("A unique error message", "unique")
|
|
expect(document.getElementsByClassName("alert-banner")?.length).toEqual(1)
|
|
expect(document.getElementsByClassName("alert-banner")[0].textContent).toEqual(expect.stringContaining("A unique error message"))
|
|
|
|
//Should still only be one banner, since the second uses the existing sentinel value "unique"
|
|
createSingularWarning("This banner should not appear", "unique")
|
|
expect(document.getElementsByClassName("alert-banner")?.length).toEqual(1)
|
|
expect(document.getElementsByClassName("alert-banner")[0].textContent).toEqual(expect.stringContaining("A unique error message"))
|
|
|
|
//If the sentinel value is not provided, the entire msg is used as the sentinel
|
|
createSingularWarning("A unique error message", null)
|
|
expect(document.getElementsByClassName("alert-banner")?.length).toEqual(1)
|
|
expect(document.getElementsByClassName("alert-banner")[0].textContent).toEqual(expect.stringContaining("A unique error message"))
|
|
})
|
|
})
|
|
})
|