UNPKG

one

Version:

One is a new React Framework that makes Vite serve both native and web.

150 lines (149 loc) 7.61 kB
import { describe, expect, it } from "vitest"; import { getNameFromFilePath, matchArrayGroupName, matchDeepDynamicRouteName, matchDirectoryRenderMode, matchDynamicName, matchGroupName, stripGroupSegmentsFromPath } from "./matchers.mjs"; describe(stripGroupSegmentsFromPath, () => { it(`strips group segments, preserving initial slash`, () => { expect(stripGroupSegmentsFromPath("/[[...foobar]]/(foo)/bar/[bax]/(other)")).toBe("/[[...foobar]]/bar/[bax]"); expect(stripGroupSegmentsFromPath("(foo)/(bar)")).toBe(""); }); }); describe(matchGroupName, () => { it(`matches`, () => { expect(matchGroupName("[[...foobar]]")).toEqual(void 0); expect(matchGroupName("[[foobar]]")).toEqual(void 0); expect(matchGroupName("[...foobar]")).toEqual(void 0); expect(matchGroupName("[foobar]")).toEqual(void 0); expect(matchGroupName("(foobar)")).toEqual("foobar"); expect(matchGroupName("(foo,bar)")).toEqual("foo,bar"); expect(matchGroupName("((foobar))")).toEqual("(foobar)"); expect(matchGroupName("(...foobar)")).toEqual("...foobar"); expect(matchGroupName("foobar")).toEqual(void 0); expect(matchGroupName("leading/foobar")).toEqual(void 0); expect(matchGroupName("leading/(foobar)")).toEqual("foobar"); expect(matchGroupName("leading/((foobar))")).toEqual("(foobar)"); expect(matchGroupName("leading/(...foobar)")).toEqual("...foobar"); expect(matchGroupName("leading/(foo,bar)")).toEqual("foo,bar"); expect(matchGroupName("leading/foobar/trailing")).toEqual(void 0); expect(matchGroupName("leading/(foobar)/trailing")).toEqual("foobar"); expect(matchGroupName("leading/((foobar))/trailing")).toEqual("(foobar)"); expect(matchGroupName("leading/(...foobar)/trailing")).toEqual("...foobar"); expect(matchGroupName("leading/(foo,bar)/trailing)")).toEqual("foo,bar"); expect(matchGroupName("leading/(foo,bar)/(fruit,apple)")).toEqual("foo,bar"); }); }); describe(matchDynamicName, () => { it(`matches`, () => { expect(matchDynamicName("[[...foobar]]")).toEqual(void 0); expect(matchDynamicName("[[foobar]]")).toEqual(void 0); expect(matchDynamicName("[...foobar]")).toEqual({ name: "foobar", deep: true }); expect(matchDynamicName("[foobar]")).toEqual({ name: "foobar", deep: false }); expect(matchDynamicName("foobar")).toEqual(void 0); }); }); describe(matchDeepDynamicRouteName, () => { it(`matches`, () => { expect(matchDeepDynamicRouteName("[[...foobar]]")).toEqual(void 0); expect(matchDeepDynamicRouteName("[[foobar]]")).toEqual(void 0); expect(matchDeepDynamicRouteName("[...foobar]")).toEqual("foobar"); expect(matchDeepDynamicRouteName("[foobar]")).toEqual(void 0); expect(matchDeepDynamicRouteName("foobar")).toEqual(void 0); }); }); describe(getNameFromFilePath, () => { it(`should return the name of the file`, () => { expect(getNameFromFilePath("./pages/home.tsx")).toBe("pages/home"); expect(getNameFromFilePath("../pages/home.js")).toBe("pages/home"); expect(getNameFromFilePath("./(home).jsx")).toBe("(home)"); expect(getNameFromFilePath("../../../(pages)/[any]/[...home].ts")).toBe("(pages)/[any]/[...home]"); }); }); describe(matchArrayGroupName, () => { it(`should not match routes without groups`, () => { expect(matchArrayGroupName("[[...foobar]]")).toEqual(void 0); expect(matchArrayGroupName("[[foobar]]")).toEqual(void 0); expect(matchArrayGroupName("[...foobar]")).toEqual(void 0); expect(matchArrayGroupName("[foobar]")).toEqual(void 0); expect(matchArrayGroupName("foobar")).toEqual(void 0); expect(matchArrayGroupName("leading/foobar")).toEqual(void 0); expect(matchArrayGroupName("leading/foobar/trailing")).toEqual(void 0); }); it(`should not match routes with a single group`, () => { expect(matchArrayGroupName("(foobar)")).toEqual(void 0); expect(matchArrayGroupName("((foobar))")).toEqual(void 0); expect(matchArrayGroupName("(...foobar)")).toEqual(void 0); expect(matchArrayGroupName("leading/(foobar)")).toEqual(void 0); expect(matchArrayGroupName("leading/((foobar))")).toEqual(void 0); expect(matchArrayGroupName("leading/(...foobar)")).toEqual(void 0); expect(matchArrayGroupName("leading/(foobar)/trailing")).toEqual(void 0); expect(matchArrayGroupName("leading/((foobar))/trailing")).toEqual(void 0); expect(matchArrayGroupName("leading/(...foobar)/trailing")).toEqual(void 0); expect(matchArrayGroupName("(leading)/foobar")).toEqual(void 0); expect(matchArrayGroupName("(leading)/(foobar)")).toEqual(void 0); expect(matchArrayGroupName("(leading)/((foobar))")).toEqual(void 0); expect(matchArrayGroupName("(leading)/(...foobar)")).toEqual(void 0); expect(matchArrayGroupName("(leading)/foobar/trailing")).toEqual(void 0); expect(matchArrayGroupName("(leading)/(foobar)/trailing")).toEqual(void 0); expect(matchArrayGroupName("(leading)/((foobar))/trailing")).toEqual(void 0); expect(matchArrayGroupName("(leading)/(...foobar)/trailing")).toEqual(void 0); }); it.skip(`should match routes with array group syntax`, () => { expect(matchArrayGroupName("(foo,bar)")).toEqual("foo,bar"); expect(matchArrayGroupName("leading/(foo,bar)")).toEqual("foo,bar"); expect(matchArrayGroupName("leading/(foo,bar)/trailing)")).toEqual("foo,bar"); expect(matchArrayGroupName("leading/((foo),(bar))/trailing)")).toEqual("(foo),(bar)"); expect(matchArrayGroupName("leading/(foo,bar)/(fruit,apple)")).toEqual("foo,bar"); expect(matchArrayGroupName("(leading)/(foo,bar)")).toEqual("foo,bar"); expect(matchArrayGroupName("(leading)/(foo,bar)/trailing)")).toEqual("foo,bar"); expect(matchArrayGroupName("(leading)/((foo),(bar))/trailing)")).toEqual("(foo),(bar)"); }); it.skip(`should only match the first group with array group syntax`, () => { expect(matchArrayGroupName("(leading)/(foo,bar)/(fruit,apple)")).toEqual("foo,bar"); expect(matchArrayGroupName("(leading)/((foo),bar)/(fruit,apple)")).toEqual("(foo),bar"); expect(matchArrayGroupName("(leading)/(foo,bar)/((fruit),apple)")).toEqual("foo,bar"); }); }); describe(matchDirectoryRenderMode, () => { it("should match directory names with render mode suffixes", () => { expect(matchDirectoryRenderMode("dashboard+ssr")).toEqual({ name: "dashboard", renderMode: "ssr" }); expect(matchDirectoryRenderMode("blog+ssg")).toEqual({ name: "blog", renderMode: "ssg" }); expect(matchDirectoryRenderMode("admin+spa")).toEqual({ name: "admin", renderMode: "spa" }); expect(matchDirectoryRenderMode("api-routes+api")).toEqual({ name: "api-routes", renderMode: "api" }); }); it("should not match directory names without render mode suffixes", () => { expect(matchDirectoryRenderMode("dashboard")).toEqual(void 0); expect(matchDirectoryRenderMode("blog")).toEqual(void 0); expect(matchDirectoryRenderMode("admin")).toEqual(void 0); }); it("should not match invalid render modes", () => { expect(matchDirectoryRenderMode("dashboard+invalid")).toEqual(void 0); expect(matchDirectoryRenderMode("blog+csr")).toEqual(void 0); }); it("should handle directory names with hyphens and underscores", () => { expect(matchDirectoryRenderMode("my-dashboard+ssr")).toEqual({ name: "my-dashboard", renderMode: "ssr" }); expect(matchDirectoryRenderMode("my_blog+ssg")).toEqual({ name: "my_blog", renderMode: "ssg" }); }); }); //# sourceMappingURL=matchers.test.mjs.map