Files
Aislo/resources/tester/spreadsheet/spreadsheet_paste_hits_entry.ts
T
eomsangdonandClaude Opus 5.5 01d819bfb6 feat(m02): 도면 → 면적 칸 크기 기본 · 넣을 자리 고르기(105-1)
- 도면 표 받은 뒤 작은 창 [새 시트] / [고른 칸부터] · 칸 크기 · 글 크기는 기본(도면 mm 안 옮김)
- 스프레드시트 공개 손잡이 pasteTable — 붙여넣기 길(parseClipboard + pasteBlock) · 덮을 값 · 알약 칸 셈(pasteHits)
- 값 · 알약 이은 칸을 덮으면 물음

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015KYZ2HWWdUwZWYnn3tQz7X
2026-10-08 16:15:54 +09:00

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 }));