Files
ausboss-ComfyUI-AusBoss/tests/media_list.test.mjs
ausboss 74de1107c6 Crop and Pad loaders: list a picture the MaskEditor saved
ComfyUI calls a media input missing when its value is not in the
widget's list. The MaskEditor writes the file it saved into the image
widget, and no list has that file until the lists are refreshed, so
the node was flagged the next time it came out of bypass. Both nodes
now add a picture to their list once it has loaded. Load Image + Pad
also follows a picture written that way, as the crop node does.
2026-10-12 21:48:45 -05:00

57 lines
3.0 KiB
JavaScript

import assert from "node:assert/strict";
import { test } from "node:test";
import { filterMedia, mediaLabel, mediaViewQuery, moveHighlight, unlistedMedia } from "../js/shared/media_list.mjs";
test("mediaViewQuery names the file, its subfolder and its folder type", () => {
assert.equal(mediaViewQuery("photo.png"), "filename=photo.png&subfolder=&type=input");
assert.equal(mediaViewQuery("pasted/image (2).png"), "filename=image+%282%29.png&subfolder=pasted&type=input");
assert.equal(mediaViewQuery("clip.mp4 [output]"), "filename=clip.mp4&subfolder=&type=output");
assert.equal(mediaViewQuery("a\\b\\c.webp"), "filename=c.webp&subfolder=a%2Fb&type=input");
assert.equal(mediaViewQuery(""), "");
assert.equal(mediaViewQuery(null), "");
});
test("filterMedia keeps values holding every term, ignoring case", () => {
const values = ["pasted/ausboss_night_bridge.png", "ausboss_day_sky_square.mp4", "Night_Alley.PNG"];
assert.deepEqual(filterMedia(values, ""), values);
assert.deepEqual(filterMedia(values, " "), values);
assert.deepEqual(filterMedia(values, "night"), ["pasted/ausboss_night_bridge.png", "Night_Alley.PNG"]);
assert.deepEqual(filterMedia(values, "night png pasted"), ["pasted/ausboss_night_bridge.png"]);
assert.deepEqual(filterMedia(values, "mp4 sky"), ["ausboss_day_sky_square.mp4"]);
assert.deepEqual(filterMedia(values, "missing"), []);
assert.deepEqual(filterMedia(undefined, "x"), []);
assert.deepEqual(filterMedia([1, 22], "2"), ["22"]);
});
test("mediaLabel splits the dim folder from the name and marks non-input folders", () => {
assert.deepEqual(mediaLabel("pasted/image.png"), { folder: "pasted/", name: "image.png" });
assert.deepEqual(mediaLabel("image.png"), { folder: "", name: "image.png" });
assert.deepEqual(mediaLabel("renders/out.mp4 [output]"), { folder: "renders/", name: "out.mp4 [output]" });
assert.deepEqual(mediaLabel(""), { folder: "", name: "" });
});
test("unlistedMedia names a value the list lacks, with or without its folder tail", () => {
const values = ["photo.png", "pasted/image.png"];
assert.equal(unlistedMedia(values, "clipspace-painted-masked-1.png [input]"), "clipspace-painted-masked-1.png [input]");
assert.equal(unlistedMedia(values, "new.png"), "new.png");
assert.equal(unlistedMedia(values, "photo.png"), "");
assert.equal(unlistedMedia(values, "photo.png [input]"), "");
assert.equal(unlistedMedia(["photo.png [input]"], "photo.png [input]"), "");
assert.equal(unlistedMedia(values, ""), "");
assert.equal(unlistedMedia(values, null), "");
assert.equal(unlistedMedia(undefined, "photo.png"), "");
assert.equal(unlistedMedia(() => values, "new.png"), "");
});
test("moveHighlight stops at the ends and starts from the right end", () => {
assert.equal(moveHighlight(-1, 1, 5), 0);
assert.equal(moveHighlight(-1, -1, 5), 4);
assert.equal(moveHighlight(0, -1, 5), 0);
assert.equal(moveHighlight(4, 1, 5), 4);
assert.equal(moveHighlight(2, 8, 5), 4);
assert.equal(moveHighlight(3, -8, 5), 0);
assert.equal(moveHighlight(9, 1, 5), 0);
assert.equal(moveHighlight(0, 1, 0), -1);
});