#!/usr/bin/env xonsh import re #### Set Parameters # Should be a list of Path objects: TEST_LIST = pg`tests/*.spt` # Should be the top-level directory for all extracted tests: # (there will be one subdirectory per item in TEST_LIST) DESTINATION = 'tests/extracted' # Extension for extracted files: EXT = 'fos' # Extension for desired input: INP = 'in' # Extension for expectations: EXP = 'expect' for path in TEST_LIST: destdir = pf"{DESTINATION}/{path.stem}" mkdir -p @(destdir) chmod ugo+rwx @(destdir) contents = path.read_text() tests = re.split(r'test\s*(.+?)\s*\[\[.*?\n', contents)[1:] testit = iter(tests) for name, details in zip(testit, testit): pfm = re.search(r'\n\s*\]\][\s\S]*?parse\s*fails', details) if pfm: continue # skip examples that don't parse ntfm = re.search(r'\n\s*\]\].*?don.t.test', details) if ntfm: continue # explicit skip em = re.search(r'\n\]\]', details) if not em: continue example = details[:em.start()+1].replace('[[','').replace(']]','') expath = destdir / f"{name}.{EXT}" expath.write_text(example) echo Wrote @(expath) im = re.search(r'/\*\*\s+accepts.*?\n([\s\S]*?)\*\*/', details[em.end():]) if im: ipath = destdir / f"{name}.{INP}" ipath.write_text(im[1]) echo " ...and" @(ipath) xm = re.search(r'/\*\*\s+writes.*?\n([\s\S]*?)\*\*/', details[em.end():]) if xm: xpath = destdir / f"{name}.{EXP}" xpath.write_text(xm[1]) echo " ...and" @(xpath)