/** * 514-3 — 가벼운 폴리선(자식 대신 꼭짓점 목록 · B07 유역도 배경선)을 CAD 가 선분으로 펼치는지. * 실행: cd B07_DesignDetail/openwebcad && npx vitest run --config */ import { describe, expect, it } from "vitest"; import { EntityName, type JsonEntity } from "../../../B07_DesignDetail/openwebcad/src/entities/Entity"; import type { LineEntity } from "../../../B07_DesignDetail/openwebcad/src/entities/LineEntity"; import { PolyLineEntity, type PolyLineJsonData, } from "../../../B07_DesignDetail/openwebcad/src/entities/PolyLineEntity"; const light: JsonEntity = { id: "p1", type: EntityName.PolyLine, lineColor: "#6b7684", lineWidth: 1, layerId: "b08-basin-contour", shapeData: { points: [{ x: 0, y: 0 }, { x: 1, y: 0 }, { x: 1, y: 2 }] }, }; describe("514-3 가벼운 폴리선", () => { it("꼭짓점 n 개 = 선분 n-1 개 · 색 · 층 · id 는 부모 것", async () => { const poly = await PolyLineEntity.fromJson(light); expect(poly.id).toBe("p1"); expect(poly.numberOfSegments()).toBe(2); const lines = poly.getEntities() as LineEntity[]; expect(lines.map((line) => [line.lineColor, line.layerId])).toEqual([ ["#6b7684", "b08-basin-contour"], ["#6b7684", "b08-basin-contour"], ]); expect(lines[1].getStartPoint().y).toBe(0); expect(lines[1].getEndPoint().y).toBe(2); }); it("다시 내보내면 옛 꼴(자식 선분) — 편집 저장 길 그대로", async () => { const json = await (await PolyLineEntity.fromJson(light)).toJson(); expect(json?.children?.length).toBe(2); expect(json?.shapeData).toBeNull(); const again = await PolyLineEntity.fromJson(json as JsonEntity); expect(again.numberOfSegments()).toBe(2); }); it("꼭짓점 하나 · 빈 값 = 선분 없음", async () => { const one = await PolyLineEntity.fromJson({ ...light, shapeData: { points: [{ x: 0, y: 0 }] } }); const none = await PolyLineEntity.fromJson({ ...light, shapeData: null }); expect([one.numberOfSegments(), none.numberOfSegments()]).toEqual([0, 0]); }); });