Add tests for selection click helpers
This commit is contained in:
104
tests/domain/selection.test.ts
Normal file
104
tests/domain/selection.test.ts
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
|
import {
|
||||||
|
applyEditorSelectionClick,
|
||||||
|
getSelectionDefaultActiveId,
|
||||||
|
resolveSelectionActiveId
|
||||||
|
} from "../../src/core/selection";
|
||||||
|
|
||||||
|
describe("selection click helpers", () => {
|
||||||
|
it("toggles same-kind multi-selection membership and keeps the last-added item active", () => {
|
||||||
|
const firstSelection = applyEditorSelectionClick(
|
||||||
|
{
|
||||||
|
kind: "none"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-a"]
|
||||||
|
},
|
||||||
|
false
|
||||||
|
);
|
||||||
|
const secondSelection = applyEditorSelectionClick(
|
||||||
|
firstSelection,
|
||||||
|
{
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-b"]
|
||||||
|
},
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(secondSelection).toEqual({
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-a", "brush-b"]
|
||||||
|
});
|
||||||
|
expect(getSelectionDefaultActiveId(secondSelection)).toBe("brush-b");
|
||||||
|
|
||||||
|
const thirdSelection = applyEditorSelectionClick(
|
||||||
|
secondSelection,
|
||||||
|
{
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-c"]
|
||||||
|
},
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(thirdSelection).toEqual({
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-a", "brush-b", "brush-c"]
|
||||||
|
});
|
||||||
|
expect(getSelectionDefaultActiveId(thirdSelection)).toBe("brush-c");
|
||||||
|
|
||||||
|
const removedActiveSelection = applyEditorSelectionClick(
|
||||||
|
thirdSelection,
|
||||||
|
{
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-c"]
|
||||||
|
},
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(removedActiveSelection).toEqual({
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-a", "brush-b"]
|
||||||
|
});
|
||||||
|
expect(resolveSelectionActiveId(removedActiveSelection, null)).toBe(
|
||||||
|
"brush-b"
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("replaces the selection when shift-clicking a different selectable kind", () => {
|
||||||
|
const nextSelection = applyEditorSelectionClick(
|
||||||
|
{
|
||||||
|
kind: "brushes",
|
||||||
|
ids: ["brush-a", "brush-b"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
kind: "entities",
|
||||||
|
ids: ["entity-main"]
|
||||||
|
},
|
||||||
|
true
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(nextSelection).toEqual({
|
||||||
|
kind: "entities",
|
||||||
|
ids: ["entity-main"]
|
||||||
|
});
|
||||||
|
expect(getSelectionDefaultActiveId(nextSelection)).toBe("entity-main");
|
||||||
|
});
|
||||||
|
|
||||||
|
it("clears on empty click without shift and preserves on empty shift-click", () => {
|
||||||
|
const currentSelection = {
|
||||||
|
kind: "modelInstances" as const,
|
||||||
|
ids: ["model-a", "model-b"]
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(
|
||||||
|
applyEditorSelectionClick(currentSelection, null, false)
|
||||||
|
).toEqual({
|
||||||
|
kind: "none"
|
||||||
|
});
|
||||||
|
expect(applyEditorSelectionClick(currentSelection, null, true)).toEqual(
|
||||||
|
currentSelection
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user