tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

check.py (1580B)


      1 #!/usr/bin/env python3
      2 """Compare consumer results against shared independent expectations."""
      3 import argparse
      4 import json
      5 from pathlib import Path
      6 import subprocess
      7 
      8 p=argparse.ArgumentParser(description=__doc__)
      9 p.add_argument('--library',required=True)
     10 p.add_argument('--source',type=Path,required=True)
     11 p.add_argument('--python',required=True)
     12 p.add_argument('--node',required=True)
     13 p.add_argument('--php',required=True)
     14 p.add_argument('--copier',required=True)
     15 p.add_argument('--report',type=Path,required=True)
     16 a=p.parse_args()
     17 spec=a.source/'ext/haskell/bindings/fixtures.json'
     18 expected=json.loads(spec.read_text())['expected']
     19 args=[a.library,str(a.source/'test/fixtures'),str(spec),a.copier]
     20 commands={
     21  'python':[a.python,str(a.source/'ext/haskell/bindings/python.py')],
     22  'js':[a.node,str(a.source/'ext/js/test/runner.mjs')],
     23  'php':[a.php,str(a.source/'ext/php/tests/conformance.php')],
     24 }
     25 reports={}
     26 for language,command in commands.items():
     27  try:
     28   result=subprocess.run(command+args,check=True,text=True,capture_output=True,timeout=90)
     29  except subprocess.CalledProcessError as error:
     30   print(error.stdout, error.stderr, flush=True)
     31   raise
     32  actual=json.loads(result.stdout)
     33  assert actual==expected,(language,actual,expected)
     34  reports[language]=actual
     35 # Each consumer independently asserts IO files/outcomes/resource cleanup before
     36 # reporting. Timeouts supervise the complete foreign process.
     37 a.report.write_text(json.dumps({'passed':list(reports),'results':reports},indent=2,ensure_ascii=False)+'\n')
     38 print('Native binding conformance passed: '+', '.join(reports))