- 격자: 고름을 옮겨도 옛 활성 칸 파란 테두리가 남던 것 · 채우기 손잡이가 범위 오른아래가 아니라 활성 칸 모서리에 있던 것(여러 범위 · 읽기 전용 카드에서는 손잡이 없음) · 틀 고정 뒤 본문 판 아래 · 오른 끝(틀 고정 크기만큼)이 안 그려져 비던 것(보이는 행열을 틀 고정만큼 밀어 잼) · 오류 칸 글자색을 테마 토큰으로(어두운 테마 대비 2.7 → 5.0) - 입력: `50%` → 0% 형식 · `1,234.5` → #,##0.0 형식을 함께 붙임(엑셀 · 되돌리기 한 번) · 식의 함수 · 참조 · 참거짓을 대문자로 · 닫는 괄호만 모자라면 채움 · 「식이 덜 끝남」 알림 글 - 클립보드: 잘라낸 칸을 같은 문서에 처음 붙이면 `옮기기` 로 — 그 칸을 가리키던 식도 따라감 (전에는 식이 0 · 빈 칸을 가리킴) · 그 사이 잘라낸 자리에 새로 쓰면 보통 붙여넣기 - 시험: test_spreadsheet_saved_values.py(면적 · 재료 저장본 102 권 서버 재계산 = 저장 계산값) · d_input 에 형식 · 대문자 · 괄호 규칙 · ORCA M02 면적산출 편집 창 목록 38 항목 재실행 통과 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BYN9gMie8e6pXzSxJNb6Xt
51 lines
1.9 KiB
Python
51 lines
1.9 KiB
Python
"""저장 뒤 식 · 값 유지 — M02 면적산출 · 재료산출 저장본을 서버 엔진으로 다시 풀면 저장된 `계산값` 과 같음.
|
|
|
|
읽기만 함(저장본을 고치지 않음). 저장 때 서버가 적은 값과 지금 엔진 풀이가 어긋나면 화면을 다시 열 때
|
|
값이 달라 보임.
|
|
"""
|
|
|
|
import json
|
|
import shutil
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
from common_util import common_util_spreadsheet as spreadsheet
|
|
|
|
ROOT = Path(__file__).resolve().parents[3]
|
|
FOLDER = ROOT / "resources" / "master_template"
|
|
|
|
pytestmark = pytest.mark.skipif(shutil.which("node") is None, reason="node 가 없음")
|
|
|
|
|
|
def _books() -> list[tuple[str, dict]]:
|
|
out = []
|
|
for kind in ("area", "material"):
|
|
for path in sorted((FOLDER / kind).glob("[!.]*.json")):
|
|
book = json.loads(path.read_text(encoding="utf-8"))
|
|
if isinstance(book, dict) and book.get("시트"):
|
|
out.append((f"{kind}/{path.stem}", book))
|
|
return out
|
|
|
|
|
|
def test_저장본_서버_재계산_같음():
|
|
books = _books()
|
|
assert any("계산값" in b for _, b in books), "계산값 있는 저장본이 없음"
|
|
fresh = spreadsheet.recalc_workbooks([b for _, b in books])
|
|
diffs = []
|
|
for (name, book), values in zip(books, fresh):
|
|
if "계산값" not in book:
|
|
continue # 옛 저장본 — 풀리기만 하면 됨
|
|
saved = book["계산값"]
|
|
for sheet, cells in values.items():
|
|
for addr, v in cells.items():
|
|
if saved.get(sheet, {}).get(addr) != v:
|
|
diffs.append(
|
|
f"{name} {sheet}!{addr}: 저장 {saved.get(sheet, {}).get(addr)} · 지금 {v}"
|
|
)
|
|
for sheet, cells in saved.items():
|
|
for addr in cells:
|
|
if addr not in values.get(sheet, {}):
|
|
diffs.append(f"{name} {sheet}!{addr}: 저장에만 있음")
|
|
assert not diffs, "\n".join(diffs[:30])
|