on f43d2ee help sign in
jibb/tools/type-theme-test
44 lines 2.2 kB history raw
1#!/usr/bin/env python3
2"""Fully check the byte-identical real theme and its mold under eval."""
3from pathlib import Path
4import argparse
5import subprocess
6import sys
7import tempfile
9root = Path(__file__).resolve().parent.parent
10parser = argparse.ArgumentParser(description=__doc__)
11parser.add_argument('--lib', default=str(root / 'jibb-dev/lib/jibb.hoon'))
12parser.add_argument('--timeout', type=float, default=300,
13 help='seconds allowed for urbit eval (default: 300)')
14args = parser.parse_args()
15if (root / 'tests/type-theme/source.txt').read_bytes() != (root / 'my-app/ui/theme.jibb').read_bytes():
16 sys.exit('tests/type-theme/source.txt differs from my-app/ui/theme.jibb')
17tests = (root / 'tests/lib/jibb-theme.hoon').read_text()
18tests = tests[tests.index('\n|%\n') + 1:]
19names = ('source', 'dark-absent', 'wrong-nested-aura', 'missing-field',
20 'wrong-font', 'wrong-dark')
21prefix = ('=/ jibb .\n' +
22 ''.join('=/ ' + name + '=wain (to-wain:format ' + name + '-text)\n'
23 for name in names) + '=/ suite\n' + tests)
24arguments = ' '.join(f'(text:suite {name})' for name in names)
25expression = (prefix + '\n=/ failures=(list tape) (theme-errors:suite prelude internal ' +
26 arguments + ')\n^- @t\n' +
27 "?~ failures 'theme checks passed'\n" +
28 '(of-wain:format (turn failures crip))\n')
29with tempfile.TemporaryDirectory(prefix='jibb-theme-') as tmp:
30 path = Path(tmp) / 'theme.hoon'
31 path.write_text(expression)
32 command = [str(root / 'tools/hoon'), '--lib', args.lib, '--raw', '-f', str(path),
33 '--timeout', str(args.timeout),
34 '--cord', 'prelude=' + str(root / 'jibb-dev/lib/jibb/prelude.jibb'),
35 '--cord', 'internal=' + str(root / 'jibb-dev/lib/jibb/internal.jibb')]
36 for name in names:
37 command += ['--cord', name + '-text=' + str(root / f'tests/type-theme/{name}.txt')]
38 result = subprocess.run(command, stdout=subprocess.PIPE)
39if result.returncode:
40 sys.exit(result.returncode)
41if result.stdout != b'theme checks passed\n':
42 sys.stderr.buffer.write(result.stdout)
43 sys.exit(1)
44print('byte-identical theme, exact type, structural import and negatives passed')