"""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))