Files
vueecharts/tests/graphic-order.node.test.ts

72 lines
2.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { h } from "vue";
import { GRAPHIC_COMPONENT_MARKER } from "../src/graphic/marker";
import { collectOrder, getType } from "../src/graphic/order";
const RectGraphic = {
[GRAPHIC_COMPONENT_MARKER]: "rect",
render: () => null,
} as const;
const GroupGraphic = {
[GRAPHIC_COMPONENT_MARKER]: "group",
render: () => null,
} as const;
describe("graphic order helpers", () => {
it("detects marked graphic vnode types and ignores invalid values", () => {
expect(getType(undefined)).toBeNull();
expect(getType(1)).toBeNull();
expect(getType({ type: "div" } as any)).toBeNull();
expect(
getType(
h({
render: () => null,
}),
),
).toBeNull();
expect(getType(h(RectGraphic))).toBe("rect");
});
it("returns current order for non-object entries", () => {
const orderMap = new Map<string, number>();
const order = collectOrder(42, orderMap, 3);
expect(order).toBe(3);
expect(orderMap.size).toBe(0);
});
it("collects id order from regular graphic children", () => {
const orderMap = new Map<string, number>();
const container = h("div", [h(RectGraphic, { id: "first" }), h(RectGraphic, { id: "second" })]);
const order = collectOrder(container, orderMap, 0);
expect(order).toBe(2);
expect(orderMap.get("id:first")).toBe(0);
expect(orderMap.get("id:second")).toBe(1);
});
it("descends into group default slot content", () => {
const orderMap = new Map<string, number>();
const group = h(GroupGraphic, { id: "group-1" }, () => [h(RectGraphic, { id: "child-1" })]);
const order = collectOrder(group, orderMap, 0);
expect(order).toBe(2);
expect(orderMap.get("id:group-1")).toBe(0);
expect(orderMap.get("id:child-1")).toBe(1);
});
it("handles group vnode without default slot content", () => {
const orderMap = new Map<string, number>();
const group = h(GroupGraphic, { id: "group-empty" });
const order = collectOrder(group, orderMap, 0);
expect(order).toBe(1);
expect(orderMap.get("id:group-empty")).toBe(0);
});
});