# -*- coding: utf-8 -*- """M02 「선택 입력」 카드(PLAN 25-2c) 셈 회귀검증 — 입력 키 · 알약 키 · 자리 고름 · 줄 만들기 · 알약 목록. 같은 이름의 입력도 로직마다 따로(키 `{로직}|{이름}`) · 처음은 모두 「안 씀」(저장 줄 없음) · 면적 · 재료로 고른 입력만 그 시트 알약(`입력|{로직}|{이름}` · 「로직 이름 · 입력 이름」). Node 헬퍼(`helper_m02_inputs.cjs`)가 TS 를 트랜스파일해 돌리고, 여기서 값을 판정한다. """ import json import os import subprocess import pytest HERE = os.path.dirname(os.path.abspath(__file__)) ROOT = os.path.join(HERE, "..", "..") @pytest.fixture(scope="module") def results(): proc = subprocess.run( ["node", os.path.join(HERE, "helper_m02_inputs.cjs")], capture_output=True, text=True, encoding="utf-8", timeout=60, ) assert proc.returncode == 0, proc.stderr return json.loads(proc.stdout) def test_키_모양(results): assert results["keys"] == ["GC1|높이", "입력|GC2|높이"] def test_자리는_고른_것만_안_쓰면_없음(results): assert results["seatKeys"] == ["GC1|높이", "GC2|높이", "GC2|배합", "GC9|없는것"] assert results["none"] == [] # 처음은 모두 안 씀 — 저장할 줄 없음 def test_로직_수_입력_수(results): assert results["count"] == {"logics": 2, "inputs": 4} def test_같은_이름_입력도_로직마다_따로_알약(results): # 높이가 두 로직에 있어도 알약 둘 · 이름은 「로직 이름 · 입력 이름」 · 목록에서 못 뺌(고정) assert results["area"] == [ ["입력|GC1|높이", "돌쌓기 · 높이", "m", True], ["입력|GC2|높이", "타설 · 높이", None, True], ] assert results["material"] == [["입력|GC2|배합", "타설 · 배합"]] def test_저장_줄은_고른_것만_알약_키_함께(results): assert results["lines"] == [ {"로직": "GC1", "입력": "높이", "자리": "면적", "알약": "입력|GC1|높이"}, {"로직": "GC1", "입력": "종류", "자리": "선택"}, # 선택은 알약 없음 {"로직": "GC2", "입력": "높이", "자리": "면적", "알약": "입력|GC2|높이"}, {"로직": "GC2", "입력": "배합", "자리": "재료", "알약": "입력|GC2|배합"}, ] def test_고르기_범위_자동값_글(results): assert results["hints"] == [ ["0.5 ~ 5", "1.2"], ["막돌 / 견치돌", ""], ["0 ~ 3", ""], ["", ""], ] assert results["seatOptions"] == ["안 씀", "면적산출 알약", "재료산출 알약", "선택"] def test_카드는_집계표_카드_옆_넷째_그리고_700줄_안(): page = os.path.join(ROOT, "M02_MasterTemplete") src = open(os.path.join(page, "M02_MasterTemplete_Structure.ts"), encoding="utf-8").read() assert "inputs.root" in src and "createInputsCard" in src for name in os.listdir(page): if name.endswith((".ts", ".py")): n = len(open(os.path.join(page, name), encoding="utf-8").read().splitlines()) assert n <= 700, (name, n)