Merge branch 'sub_laptop_2' of C:/Aislo_wt/sub_laptop_2 into main_laptop_1
This commit is contained in:
@@ -247,6 +247,8 @@ def test_표값_화면이름_전수():
|
||||
assert not g["틀림"], (k, g["틀림"][:3])
|
||||
alias = g["별칭"]
|
||||
assert len(set(alias.values())) == len(alias), k # 겹치면 2 · 3
|
||||
if (docs[k].get("부품") or {}).get("갈래") == "기계경비식":
|
||||
continue # 기계경비식 = 짧은 한글 이름(839-1 · 시험 test_839_1)
|
||||
assert all("^표" not in v and k.endswith("^표") for k, v in alias.items()), k
|
||||
named += len(alias)
|
||||
assert named > 500
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""PLAN 839-1(요구 858 안 2) — 기계경비식 16 문서 기호를 짧은 한글 이름으로 그림(그림만 · 자료 0).
|
||||
|
||||
① 16 문서 · 기호 64 꼴 전부 이름 있음(이름 없는 기호 0) · 문서 안 이름 겹침 0 · 안 바뀐 기호와도 겹침 0
|
||||
② 식 글 · 금액 글 왕복(보이는 이름 → 기호 = 처음 식과 같은 나무) · 보이는 글에 옛 기호 안 남음
|
||||
③ 기계경비식 밖 문서 = 사전 안 탐 · 자료 json 안 바뀜(기호 · 식 · 열쇠 그대로 — 화면 길이 문서를 안 고침)
|
||||
④ 사용자가 손으로 바꾼 기호 = 사전에 없는 꼴이라 그대로
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import copy
|
||||
|
||||
from M02_MasterTemplete import M02_Doc_Copy as dc
|
||||
from resources.tester.test_804_2_line_stack import _ts
|
||||
|
||||
MACHINE = "기계경비식"
|
||||
|
||||
|
||||
def _ids(doc: dict) -> list[str]:
|
||||
out = []
|
||||
for v in doc.get("변수", []):
|
||||
out.append(
|
||||
v["기호"]
|
||||
+ (f"_{v['아래']}" if v.get("아래") else "")
|
||||
+ (f"^{v['위']}" if v.get("위") else "")
|
||||
)
|
||||
for line in doc.get("식", []):
|
||||
if line["기호"] not in out:
|
||||
out.append(line["기호"])
|
||||
return out
|
||||
|
||||
|
||||
def _machines() -> dict[str, dict]:
|
||||
docs = dc.folder()
|
||||
got = {k: d for k, d in docs.items() if (d.get("부품") or {}).get("갈래") == MACHINE}
|
||||
assert len(got) == 16
|
||||
return got
|
||||
|
||||
|
||||
def test_16_문서_이름_전수_겹침_없음():
|
||||
docs = _machines()
|
||||
keys = sorted(docs)
|
||||
got = _ts("별칭", [{"문서": docs[k]} for k in keys])
|
||||
forms: set[str] = set()
|
||||
for k, g in zip(keys, got):
|
||||
alias = g["별칭"]
|
||||
ids = _ids(docs[k])
|
||||
miss = [i for i in ids if i not in alias]
|
||||
assert not miss, (k, miss) # 이름 없는 기호 0
|
||||
assert len(set(alias.values())) == len(alias), (k, alias) # 겹침 0
|
||||
assert not set(alias.values()) & set(ids), (k, alias) # 옛 기호와도 안 겹침
|
||||
assert all("_" not in v and "^" not in v for v in alias.values()), (k, alias)
|
||||
forms |= {i for i in ids if not i.startswith("P_EQ기계")}
|
||||
assert not g["틀림"], (k, g["틀림"][:3]) # 식 글 왕복 = 같은 식
|
||||
assert len(forms) == 58 # 64 꼴 = 사전 58 + 「P_EQ기계~6」 읽는 칸 이름 6
|
||||
|
||||
|
||||
def test_대표_이름():
|
||||
docs = _machines()
|
||||
got = _ts("별칭", [{"문서": docs["GC000267"]}])[0]["별칭"]
|
||||
assert got["P_기계"] == "가격"
|
||||
assert [got[x] for x in ("k_기계상각비", "k_기계정비비", "k_기계관리비")] == [
|
||||
"상각",
|
||||
"정비",
|
||||
"관리",
|
||||
]
|
||||
assert got["C_손료"] == "손료" and got["r_가산"] == "가산" and got["r_기계잡재료"] == "잡품"
|
||||
assert got["P_기계주연료"] == "주연료" and got["Q_기계조종원"] == "조종원"
|
||||
assert got["Q_시간환산"] == "환산" and got["Q_분자^표"] == "환산분자"
|
||||
one = _ts("별칭", [{"문서": docs["GC001199"]}])[0]["별칭"]
|
||||
assert [one[x] for x in ("P_EQ기계", "P_EQ기계2", "P_EQ기계3")] == [
|
||||
"시간노무",
|
||||
"시간재료",
|
||||
"시간경비",
|
||||
]
|
||||
|
||||
|
||||
def test_밖_문서_그대로_자료_안_바뀜():
|
||||
docs = dc.folder()
|
||||
outside = [k for k, d in docs.items() if (d.get("부품") or {}).get("갈래") != MACHINE]
|
||||
pick = [k for k in sorted(outside) if k in ("GC001147", "GC000089")] or sorted(outside)[:2]
|
||||
before = [copy.deepcopy(docs[k]) for k in pick]
|
||||
got = _ts("별칭", [{"문서": docs[k]} for k in pick])
|
||||
for g in got:
|
||||
assert not set(g["별칭"].values()) & {"가격", "상각", "정비", "관리", "손료", "잡품"}
|
||||
assert [docs[k] for k in pick] == before # 문서 자료 안 바뀜
|
||||
machine = _machines()
|
||||
snap = copy.deepcopy(machine)
|
||||
_ts("별칭", [{"문서": d} for d in machine.values()])
|
||||
assert machine == snap
|
||||
|
||||
|
||||
def test_손으로_바꾼_기호는_그대로():
|
||||
docs = _machines()
|
||||
doc = copy.deepcopy(docs["GC000267"])
|
||||
for v in doc["변수"]:
|
||||
if v["기호"] == "P" and v["아래"] == "기계":
|
||||
v["아래"] = "차량" # 사용자가 손으로 고친 기호 = P_차량
|
||||
alias = _ts("별칭", [{"문서": doc}])[0]["별칭"]
|
||||
assert "P_차량" not in alias # 그림 사전 안 탐 = 그 글 그대로
|
||||
|
||||
|
||||
def test_칸_읽는_기호_차례_이름_칸과_같음():
|
||||
"""「P_EQ기계…」 이름 = 문서 모양 차례 — 읽는 칸(연결 칸)과 같고, 직접 입력으로 바뀌어도 안 변함."""
|
||||
want = {
|
||||
"가격": "가격",
|
||||
"손료계수": "계수",
|
||||
"주연료": "주연료",
|
||||
"전력": "전력",
|
||||
"조종원": "조종원",
|
||||
"잡재료율": "잡품",
|
||||
"노무비": "시간노무",
|
||||
"재료비": "시간재료",
|
||||
"경비": "시간경비",
|
||||
}
|
||||
docs = _machines()
|
||||
for k in ("GC001199", "GC001200", "GC001201"):
|
||||
doc = copy.deepcopy(docs[k])
|
||||
eq = {
|
||||
f"P_{v['아래']}": want[v["연결"]["칸"]]
|
||||
for v in doc["변수"]
|
||||
if v["기호"] == "P" and v["아래"].startswith("EQ기계")
|
||||
}
|
||||
got = _ts("별칭", [{"문서": doc}])[0]["별칭"]
|
||||
assert {i: got[i] for i in eq} == eq, k
|
||||
for v in doc["변수"]:
|
||||
if v["아래"].startswith("EQ기계"):
|
||||
v["연결"] = {"갈래": "숫자", "값": 7} # 직접 입력 = 칸 연결 없음
|
||||
typed = _ts("별칭", [{"문서": doc}])[0]["별칭"]
|
||||
assert {i: typed[i] for i in eq} == eq, k
|
||||
Reference in New Issue
Block a user