Generated v2 prefixes
This commit is contained in:
Executable
+81
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python2
|
||||
|
||||
import re
|
||||
import sys
|
||||
import subprocess
|
||||
import os
|
||||
|
||||
|
||||
def generate(test):
|
||||
with open("scripts/template.fmt") as file:
|
||||
template = file.read()
|
||||
|
||||
haslines = 'TEST_LINE' in os.environ and 'TEST_FILE' in os.environ
|
||||
|
||||
lines = []
|
||||
for offset, line in enumerate(
|
||||
re.split('(?<=(?:.;| [{}]))\n', test.read())):
|
||||
match = re.match('((?: *\n)*)( *)(.*)=>(.*);',
|
||||
line, re.DOTALL | re.MULTILINE)
|
||||
if match:
|
||||
preface, tab, test, expect = match.groups()
|
||||
lines.extend(['']*preface.count('\n'))
|
||||
lines.append(tab+'test_assert({test}, {expect});'.format(
|
||||
test=test.strip(), expect=expect.strip()))
|
||||
else:
|
||||
lines.append(line)
|
||||
|
||||
# Create test file
|
||||
with open('test.c', 'w') as file:
|
||||
if 'TEST_LINE' in os.environ and 'TEST_FILE' in os.environ:
|
||||
lines.insert(0, '#line %d "%s"' % (
|
||||
int(os.environ['TEST_LINE']) + 1,
|
||||
os.environ['TEST_FILE']))
|
||||
lines.append('#line %d "test.c"' % (
|
||||
template[:template.find('{tests}')].count('\n')
|
||||
+ len(lines) + 2))
|
||||
|
||||
file.write(template.format(tests='\n'.join(lines)))
|
||||
|
||||
# Remove build artifacts to force rebuild
|
||||
try:
|
||||
os.remove('test.o')
|
||||
os.remove('lfs2')
|
||||
except OSError:
|
||||
pass
|
||||
|
||||
def compile():
|
||||
subprocess.check_call([
|
||||
os.environ.get('MAKE', 'make'),
|
||||
'--no-print-directory', '-s'])
|
||||
|
||||
def execute():
|
||||
if 'EXEC' in os.environ:
|
||||
subprocess.check_call([os.environ['EXEC'], "./lfs2"])
|
||||
else:
|
||||
subprocess.check_call(["./lfs2"])
|
||||
|
||||
def main(test=None):
|
||||
try:
|
||||
if test and not test.startswith('-'):
|
||||
with open(test) as file:
|
||||
generate(file)
|
||||
else:
|
||||
generate(sys.stdin)
|
||||
|
||||
compile()
|
||||
|
||||
if test == '-s':
|
||||
sys.exit(1)
|
||||
|
||||
execute()
|
||||
|
||||
except subprocess.CalledProcessError:
|
||||
# Python stack trace is counterproductive, just exit
|
||||
sys.exit(2)
|
||||
except KeyboardInterrupt:
|
||||
# Python stack trace is counterproductive, just exit
|
||||
sys.exit(3)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(*sys.argv[1:])
|
||||
Reference in New Issue
Block a user