53 lines
3.7 KiB
Python
53 lines
3.7 KiB
Python
"""Test the installed wheel, not source imports. Args: install_dir workspace converter."""
|
|
import json,os,subprocess,sys
|
|
from pathlib import Path
|
|
|
|
installed,workspace,converter=map(lambda p:Path(p).resolve(),sys.argv[1:4])
|
|
sys.path.insert(0,str(installed))
|
|
import bridge_drawing_extractor as sdk
|
|
assert installed in Path(sdk.__file__).resolve().parents
|
|
assert 'tkinter' not in sys.modules
|
|
assert sdk.check_environment(converter_path=converter)['converter_available']
|
|
assert not sdk.check_environment(converter_path=installed/'absent.exe')['converter_available']
|
|
try:sdk.extract_folder(installed/'absent_input',converter_path=converter)
|
|
except sdk.ExtractionError:pass
|
|
else:raise AssertionError('Missing folder should raise ExtractionError')
|
|
messages=[]
|
|
result=sdk.extract_folder(workspace/'산외교도면',output_dir=workspace/'outputs/package_smoke',converter_path=converter,on_progress=messages.append)
|
|
assert len(result.workbooks)==1 and messages
|
|
assert result.status=='needs_review' and result.review_count>0
|
|
book=result.workbooks[0];assert book.xlsx_path.is_file() and book.review_csv_path.is_file()
|
|
assert len(book.data['supplementary_drawings'])==1
|
|
assert any('03' in f['roles'] for f in result.files)
|
|
gold=json.loads((workspace/'Code/sanoe_extract/extracted.json').read_text(encoding='utf8'))
|
|
for e in gold['evidence']:
|
|
if e['sheet']=='Pier' and e['cell'][0] in 'CDHIJK' or e['sheet']=='Bearing' and e['cell'][0]=='F':continue
|
|
value=None if e['value'] in ['미확인','미확정'] else e['value']
|
|
assert book.data['cells'][e['sheet']][e['cell']]==value,(e['sheet'],e['cell'])
|
|
assert book.data['cells']['Pier']['C3']=='T형'
|
|
assert book.data['cells']['Pier']['D3']==71.0632
|
|
assert book.data['cells']['Bearing']['F3']==71.4178
|
|
assert book.data['cells']['Pier']['H3']==7000
|
|
assert book.data['cells']['Pier']['K3']==1
|
|
assert sum(v=='전열' for c,v in book.data['cells']['Bearing'].items() if c.startswith('H'))==38
|
|
assert sum(v=='후열' for c,v in book.data['cells']['Bearing'].items() if c.startswith('H'))==40
|
|
from openpyxl import load_workbook
|
|
wb=load_workbook(book.xlsx_path)
|
|
assert wb['Pier']['H2'].value=='말뚝\n길이_mm'
|
|
assert wb['Bearing']['G2'].value=='방위각' and wb['Bearing']['H2'].value=='전열/후열'
|
|
assert wb['Pier']['H3'].value==7000 and wb['Pier']['K3'].value==1
|
|
wb.close()
|
|
json.dumps(result.to_dict(),ensure_ascii=False)
|
|
assert 'data' not in result.to_dict(include_data=False)['workbooks'][0]
|
|
env=os.environ.copy();env['PYTHONPATH']=str(installed)
|
|
cmd=[sys.executable,'-m','bridge_drawing_extractor',str(workspace/'산외교도면'),'--output',str(workspace/'outputs/package_smoke'),'--converter',str(converter)]
|
|
proc=subprocess.run(cmd,cwd=installed,env=env,capture_output=True,encoding='utf8',timeout=120)
|
|
assert proc.returncode==0,proc.stderr
|
|
response=json.loads(proc.stdout);assert response['schema_version']=='1.0' and len(response['workbooks'])==1
|
|
assert response['status']=='needs_review';assert proc.stderr
|
|
failure=subprocess.run([sys.executable,'-m','bridge_drawing_extractor',str(installed/'absent_input'),'--converter',str(converter)],cwd=installed,env=env,capture_output=True,encoding='utf8',timeout=30)
|
|
assert failure.returncode==1 and json.loads(failure.stdout)['status']=='error'
|
|
report=dict(version=sdk.__version__,installed_module=str(sdk.__file__),verified_fields=sum(not(e['sheet']=='Pier' and e['cell'][0] in 'CDHIJK' or e['sheet']=='Bearing' and e['cell'][0]=='F') for e in gold['evidence']),gui_imported='tkinter' in sys.modules,api='passed',json_serialization='passed',cli='passed',failure_contract='passed',output=str(book.xlsx_path))
|
|
(workspace/'outputs/package_smoke/verification.json').write_text(json.dumps(report,ensure_ascii=False,indent=2),encoding='utf8')
|
|
print(json.dumps(report,ensure_ascii=True))
|