| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- import { mapSchema, spriteSchema, soundSchema } from "@nengine/core-schema";
- import { describe, expect, it } from "vitest";
- import type { EditorContentListing } from "../src/ipc.js";
- import { deriveFormSchema } from "../src/renderer/form-schema.js";
- import { refIdList } from "../src/renderer/form-panel.js";
- function listing(overrides?: Partial<EditorContentListing>): EditorContentListing {
- return {
- kinds: [
- { kind: "sprite", count: 2, files: [{ id: "player", name: "player.yaml", path: "content/sprites/player.yaml" }] },
- { kind: "sound", count: 1, files: [{ id: "click", name: "click.yaml", path: "content/sounds/click.yaml" }] },
- ],
- mods: [],
- assets: ["grass-1", "water-1"],
- ...overrides,
- };
- }
- function field(schema: Parameters<typeof deriveFormSchema>[0], name: string) {
- const found = deriveFormSchema(schema).fields.find((f) => f.name === name);
- if (found === undefined) throw new Error(`no field "${name}"`);
- return found;
- }
- describe("form-ref asset fields (F2)", () => {
- it("sprite image layer src and sound src already resolve to the asset kind", () => {
- const frames = field(spriteSchema, "frames");
- expect(frames.type).toBe("array");
- const layers = frames.element?.fields?.find((f) => f.name === "layers");
- expect(layers?.type).toBe("array");
- const layer = layers?.element;
- expect(layer?.type).toBe("union");
- const imageBranch = layer?.branches?.find((b) => b.id === "image");
- const src = imageBranch?.fields?.find((f) => f.name === "src");
- expect(src?.type).toBe("ref");
- expect(src?.refKind).toBe("asset");
- const soundSrc = field(soundSchema, "src");
- expect(soundSrc.type).toBe("ref");
- expect(soundSrc.refKind).toBe("asset");
- });
- it("map tiles record values resolve to the asset kind (tile id → asset id)", () => {
- const tiles = field(mapSchema, "tiles");
- expect(tiles.type).toBe("record");
- expect(tiles.optional).toBe(true);
- expect(tiles.recordValue?.type).toBe("ref");
- expect(tiles.recordValue?.refKind).toBe("asset");
- });
- it("refIdList feeds asset ids for asset refs and kind ids for content refs", () => {
- const l = listing();
- expect(refIdList(l, "asset")).toEqual(["grass-1", "water-1"]);
- expect(refIdList(l, "sprite")).toEqual(["player"]);
- expect(refIdList(l, "sound")).toEqual(["click"]);
- });
- it("an empty asset list yields [] — the free-text fallback path", () => {
- const l = listing({ assets: [] });
- expect(refIdList(l, "asset")).toEqual([]);
- expect(refIdList(l, "unknown-kind")).toEqual([]);
- });
- });
|