Files
Aislo/resources/tester/test_est_xml_check.py
T
eomsangdonandClaude Opus 5.5 100f05a9a3 feat(est-test): 조달청 XML 검사와 자리수 자동 수정
- 원본 변환 전 검사 1·8·10·11 규칙으로 목록 표시
- 비목값 자리수 지정만 풀고 다시 계산

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:27:01 +09:00

43 lines
2.1 KiB
Python

"""EST 테스트 앱 조달청 XML 검사·자리수자동수정(원본 TfrmJDLConvert 검사 1·8·10·11, TfrmXMLDigetCheck)."""
import json
import subprocess
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def test_rules_and_fix():
script = """
const fs = require('fs'), vm = require('vm');
const ctx = vm.createContext({ structuredClone });
for (const f of ['native-math.js', 'native-formula.js', 'native-text.js', 'native-xml-check.js'])
vm.runInContext(fs.readFileSync('tools/est-test/' + f, 'utf8'), ctx);
ctx.p = { tables: {
CostMainDat: [
{ Index: 1, Code: 'D1', Name: '터파기' },
{ SCheck: -1, Diget: 2, LineData: '노무' },
{ SCheck: 0, LinkIndex: 5, Diget: 1, LineData: '플래그 전 재료' },
{ Index: -20 },
{ LinkIndex: 6, DigetIndex: 1, LineData: '노임 연결' },
{ LinkIndex: 61 },
{ LinkIndex: 5, Diget: 3, LineData: '소계 뒤 재료' } ],
StuffcDat: [{ Code: 'M1', Index: 1, Name: '가', Size: '규' }, { Code: 'M1', Index: 2, Name: '나' }, { Code: 'm2', Index: 3 }],
MachTitleDat: [{ Code: 'E0000000233' }, { Code: 'E1234567890123456' }] } };
const list = vm.runInContext('EstXmlCheck.check(p)', ctx).map((e) => [e.kind, e.table, e.index, e.text]);
const fixed = vm.runInContext('EstXmlCheck.fix(p)', ctx);
const after = vm.runInContext('EstXmlCheck.check(p).filter((e) => e.kind === 1).length', ctx);
const kept = vm.runInContext('[p.tables.CostMainDat[2].Diget, p.tables.CostMainDat[6].Diget, p.tables.CostMainDat[1].Diget]', ctx);
process.stdout.write(JSON.stringify({ list, fixed, after, kept }));
"""
result = json.loads(subprocess.check_output(["node", "-e", script], cwd=ROOT).decode("utf-8"))
assert result["list"] == [
[1, "CostMainDat", 1, "노무"],
[1, "CostMainDat", 4, "노임 연결"],
[8, "StuffcDat", 1, "1.가(규) 와 코드 중복"],
[10, "StuffcDat", 2, "코드에 소문자사용"],
[11, "MachTitleDat", 0, "장비코드 길이가틀림(17자리)"],
]
assert result["fixed"] == 2 and result["after"] == 0
assert result["kept"] == [1, 3, 0]