#!/usr/bin/env python3 # lint hurl file # import codecs import sys import subprocess def decode_string(encoded): if encoded.startswith(codecs.BOM_UTF8): return encoded.decode('utf-8-sig') elif encoded.startswith(codecs.BOM_UTF16): encoded = encoded[len(codecs.BOM_UTF16):] return encoded.decode('utf-16') else: return encoded.decode() def test(hurl_file): cmd = ['hurlfmt', '--check', hurl_file] print(' '.join(cmd)) result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) if result.returncode != 1: print(f'return code => expected: 1 actual {result.returncode}') sys.exit(1) err_file = hurl_file.replace('.hurl','.err') expected = open(err_file).read().strip() actual = decode_string(result.stderr).strip() if actual != expected: print('>>> error in stderr') print(f'actual: <{actual}>\nexpected: <{expected}>') sys.exit(1) cmd = ['hurlfmt', hurl_file] print(' '.join(cmd)) result = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) err_file = hurl_file.replace('.hurl','.hurl.lint') expected = open(err_file).read().strip() actual = decode_string(result.stdout).strip() if actual != expected: print('>>> error in stdout') print(f'actual: <{actual}>\nexpected: <{expected}>') sys.exit(1) def main(): for hurl_file in sys.argv[1:]: test(hurl_file) if __name__ == '__main__': main()