import { test, expect } from "bun:test"
import { createPngUrl, createSvgUrl } from "lib"
import { gunzipSync, strFromU8 } from "fflate"
test("create pcb svg url", () => {
const url = createSvgUrl(
`
export default () => (
)
`,
"pcb",
)
expect(url).toMatchInlineSnapshot(
`"https://svg.tscircuit.com/?svg_type=pcb&code=H4sIAJsBqGcAAy2NTQ7CIBhE9z3FhFW7KlWXhUO4ckuBClF%2BAp%2FRxHh30Xb3JvMyY185FYKxq3rcCf0AIdF3wLwkVQye3pATbOIhMDjrr472JJvUtGKrr5QKNlBR2ybcGNaUKBcfm89P%2FMAQVWjVeWKo2l3E%2B%2FhB1ssG429tHv%2Bfshu%2BlSYxzJYAAAA%3D"`,
)
})
test("create svg url using fs map", () => {
const url = createSvgUrl(
{
"index.tsx": `export default () => (\n \n)`,
},
"pcb",
)
const parsed = new URL(url)
expect(parsed.searchParams.get("code")).toBeNull()
const fsMapParam = parsed.searchParams.get("fs_map")
expect(fsMapParam).not.toBeNull()
const encodedFsMap = Buffer.from(fsMapParam!, "base64")
const decodedFsMap = JSON.parse(
strFromU8(gunzipSync(Uint8Array.from(encodedFsMap))),
)
expect(decodedFsMap).toEqual({
"index.tsx": "export default () => (\n \n)",
})
})
test("fs map svg url passes entrypoint", () => {
const url = createSvgUrl(
{
"index.tsx": "export default () => null",
"App.tsx": "export default () => null",
},
"schematic",
{ entrypoint: "App.tsx" },
)
const parsed = new URL(url)
expect(parsed.searchParams.get("entrypoint")).toBe("App.tsx")
expect(parsed.searchParams.get("fs_map")).not.toBeNull()
expect(parsed.searchParams.get("code")).toBeNull()
})
test("create svg url with png options", () => {
const url = createSvgUrl(
`
export default () => (
)
`,
"pcb",
{
format: "png",
pngWidth: 800,
pngHeight: 600,
pngDensity: 2,
},
)
const parsed = new URL(url)
expect(parsed.searchParams.get("format")).toBe("png")
expect(parsed.searchParams.get("png_width")).toBe("800")
expect(parsed.searchParams.get("png_height")).toBe("600")
expect(parsed.searchParams.get("png_density")).toBe("2")
expect(parsed.searchParams.get("code")).not.toBeNull()
})
test("create png url uses svg.tscircuit.com", () => {
const url = createPngUrl(
`
export default () => (
)
`,
"pcb",
)
const parsed = new URL(url)
expect(parsed.origin).toBe("https://svg.tscircuit.com")
expect(parsed.searchParams.get("svg_type")).toBe("pcb")
expect(parsed.searchParams.get("format")).toBe("png")
expect(parsed.searchParams.get("code")).not.toBeNull()
})
test("create pinout svg url", () => {
const url = createSvgUrl(
`
export default () => (
)
`,
"pinout",
)
expect(url).toMatchInlineSnapshot(
`"https://svg.tscircuit.com/?svg_type=pinout&code=H4sIAJsBqGcAAy2NTQ7CIBhE9z3FhFW7KlWXhUO4ckuBClF%2BAp%2FRxHh30Xb3JvMyY185FYKxq3rcCf0AIdF3wLwkVQye3pATbOIhMDjrr472JJvUtGKrr5QKNlBR2ybcGNaUKBcfm89P%2FMAQVWjVeWKo2l3E%2B%2FhB1ssG429tHv%2Bfshu%2BlSYxzJYAAAA%3D"`,
)
})
test("create schsim svg url", () => {
const url = createSvgUrl(
`
export default () => (
)
`,
"schsim",
)
expect(url).toMatchInlineSnapshot(
`"https://svg.tscircuit.com/?svg_type=schsim&code=H4sIAJsBqGcAAy2NTQ7CIBhE9z3FhFW7KlWXhUO4ckuBClF%2BAp%2FRxHh30Xb3JvMyY185FYKxq3rcCf0AIdF3wLwkVQye3pATbOIhMDjrr472JJvUtGKrr5QKNlBR2ybcGNaUKBcfm89P%2FMAQVWjVeWKo2l3E%2B%2FhB1ssG429tHv%2Bfshu%2BlSYxzJYAAAA%3D"`,
)
})
test("create schsim svg url with simulation experiment id", () => {
const url = createSvgUrl(
`
export default () => (
)
`,
"schsim",
{
simulationExperimentId: "my-exp-1",
},
)
const parsed = new URL(url)
expect(parsed.searchParams.get("simulation_experiment_id")).toBe("my-exp-1")
})