on master help sign in
jibb/tools/type-mark-test
35 lines 1.5 kB history raw
1#!/usr/bin/env python3
2"""Compare the mark/checker bridge fixture under urbit eval."""
4from pathlib import Path
5import difflib
6import subprocess
7import sys
8import tempfile
10root = Path(__file__).resolve().parent.parent
11fixture = root / 'tests' / 'type-mark'
12tests = (root / 'tests/lib/jibb-mark-bridge.hoon').read_text()
13tests = tests[tests.index('\n|%\n') + 1:]
14expression = ('=/ jibb .\n' +
15 ''.join('=/ ' + n + '=wain (to-wain:format ' + n + '-text)\n'
16 for n in ('declared', 'missing', 'sur', 'collision', 'expected')) +
17 '=/ bridge\n' + tests +
18 '\n(bridge-output:bridge declared-text missing-text sur-text collision-text)\n')
19with tempfile.TemporaryDirectory(prefix='jibb-type-mark-') as tmp:
20 program = Path(tmp) / 'bridge.hoon'
21 program.write_text(expression)
22 command = [str(root / 'tools/hoon'), '--raw', '-f', str(program)]
23 for name in ('declared', 'missing', 'sur', 'collision', 'expected'):
24 command += ['--cord', name + '-text=' + str(fixture / (name + '.txt'))]
25 result = subprocess.run(command, stdout=subprocess.PIPE)
26if result.returncode:
27 sys.exit(result.returncode)
28expected = (fixture / 'expected.txt').read_bytes()
29if result.stdout != expected:
30 sys.stderr.writelines(difflib.unified_diff(
31 expected.decode().splitlines(keepends=True),
32 result.stdout.decode().splitlines(keepends=True),
33 fromfile='expected.txt', tofile='actual types'))
34 sys.exit(1)
35print('mark/checker bridge golden passed')