#!/usr/bin/env python3
# echo hurl file
# The file is parsed and output exactly as the input
#
import codecs
import os
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(format_type, hurl_file):
    output_file = hurl_file.replace('.hurl','.' + format_type)
    if not os.path.exists(output_file):
        return
    cmd = ['hurlfmt', '--format', format_type, hurl_file]
    print(' '.join(cmd))
    result = subprocess.run(cmd, stdout=subprocess.PIPE)
    expected = open(output_file, encoding='utf-8').read().strip()
    actual = decode_string(result.stdout)
    if actual != expected:
        print('>>> error in stdout')
        print(f'actual: <{actual}>\nexpected: <{expected}>')
        sys.exit(1)


def main():
    if len(sys.argv) < 2:
        print('usage: test_format.py json|html HURL_FILE..')
        sys.exit(1)
    format_type = sys.argv[1] 

    for hurl_file in sys.argv[2:]:
        test(format_type, hurl_file)


if __name__ == '__main__':
    main()

