- 도면 표 받은 뒤 작은 창 [새 시트] / [고른 칸부터] · 칸 크기 · 글 크기는 기본(도면 mm 안 옮김) - 스프레드시트 공개 손잡이 pasteTable — 붙여넣기 길(parseClipboard + pasteBlock) · 덮을 값 · 알약 칸 셈(pasteHits) - 값 · 알약 이은 칸을 덮으면 물음 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015KYZ2HWWdUwZWYnn3tQz7X
38 lines
1.5 KiB
TypeScript
38 lines
1.5 KiB
TypeScript
/* 도면 표 고른 칸부터 붙이기(105-1) — 덮을 자리 셈 `pasteHits` 시험 진입 · vite --ssr 로 번들해 Node 로 돌림.
|
|
* 결과 = JSON {pass, fail, failures} 한 줄(`test_m02_area_from_drawing_place.py` 가 읽음) */
|
|
import { pasteHits } from "../../../A00_Common/spreadsheet/spreadsheet_clipboard";
|
|
import type { CellRange, Sheet } from "../../../A00_Common/spreadsheet/spreadsheet_types";
|
|
|
|
let pass = 0;
|
|
const failures: string[] = [];
|
|
const eq = (name: string, got: unknown, want: unknown): void => {
|
|
if (JSON.stringify(got) === JSON.stringify(want)) pass += 1;
|
|
else failures.push(`${name}: ${JSON.stringify(got)} ≠ ${JSON.stringify(want)}`);
|
|
};
|
|
|
|
const sheet = {
|
|
id: "s1",
|
|
이름: "면적산출",
|
|
칸: {
|
|
B2: { 값: 3 },
|
|
C3: { 식: "B2*2" },
|
|
D4: { 값: "" }, // 빈 값 = 덮을 것 없음
|
|
E9: { 값: 1 }, // 범위 밖
|
|
},
|
|
연결: [
|
|
{ 키: "깔기|㎡", 칸: "C2" },
|
|
{ 키: "치기|㎥", 칸: "F1" }, // 범위 밖
|
|
],
|
|
} as unknown as Sheet;
|
|
const R = (r0: number, c0: number, r1: number, c1: number): CellRange => ({ r0, c0, r1, c1 });
|
|
|
|
eq("B2:D4 값 2 · 알약 1", pasteHits(sheet, R(1, 1, 3, 3)), { 칸: 2, 연결: 1 });
|
|
eq("빈 자리", pasteHits(sheet, R(10, 0, 12, 2)), { 칸: 0, 연결: 0 });
|
|
eq("알약만", pasteHits(sheet, R(0, 5, 0, 5)), { 칸: 0, 연결: 1 });
|
|
eq("연결 없는 시트", pasteHits({ ...sheet, 연결: undefined }, R(0, 0, 9, 9)), {
|
|
칸: 3,
|
|
연결: 0,
|
|
});
|
|
|
|
console.log(JSON.stringify({ pass, fail: failures.length, failures }));
|