            import vobject
            def esc(s):return s.replace('\\','\\\\').replace('\n','\\n').replace(';','\\;').replace(',','\\,')
            text='BEGIN:VCARD\r\nVERSION:4.0\r\nFN:'+esc(output['name'])+'\r\nN:'+esc(output['name'])+';;;;\r\nORG:'+esc(output['organization'])+'\r\n'+''.join('TEL;VALUE=uri:tel:'+x+'\r\n' for x in output['phones'])+'NOTE:'+esc(output['note'])+'\r\nEND:VCARD\r\n';(folder/'contact.vcf').write_text(text,newline='');artifacts.append('contact.vcf');r=vobject.readOne(text);phones=[str(x.value).removeprefix('tel:') for x in r.contents['tel']]
            check('独立vCard解析器保留两个电话',phones==output['phones']);check('组织名逗号转义往返',r.org.value==[output['organization']]);check('中文换行和分号往返',r.note.value==output['note']);result={'name':r.fn.value,'organization':r.org.value,'phones':phones,'note':r.note.value}
