import sys
import os
import re
import subprocess
import difflib

remove_unicode_marker = re.compile(r'u(\'[^\']*\')')
remove_long_marker    = re.compile(r'([0-9])L')
remove_hex            = re.compile(r'0x[0-9a-fA-F]+')
shorten_floats        = re.compile(r'([1-9][0-9]*\.[0-9]{4})[0-9]*')

def sanitize(lines):
    lines = lines.split('\n')
    for i in range(len(lines)):
        line = lines[i]
        if line.startswith(" |"):
            line = ""
        if line.startswith("### "):
            # Constructor/destructor output.  Useful for example, but unreliable across compilers;
            # testing of proper construction/destruction occurs with ConstructorStats mechanism instead
            line = ""
        line = remove_unicode_marker.sub(r'\1', line)
        line = remove_long_marker.sub(r'\1', line)
        line = remove_hex.sub(r'0', line)
        line = shorten_floats.sub(r'\1', line)
        line = line.replace('__builtin__', 'builtins')
        line = line.replace('example.', '')
        line = line.replace('unicode', 'str')
        line = line.replace('ExampleWithEnum.EMode', 'EMode')
        line = line.replace('example.EMode', 'EMode')
        line = line.replace('method of builtins.PyCapsule instance', '')
        line = line.strip()
        lines[i] = line

    return '\n'.join(sorted([l for l in lines if l != ""]))

path = os.path.dirname(__file__)
if path != '':
    os.chdir(path)

if len(sys.argv) < 2:
    print("Syntax: %s <test name>" % sys.argv[0])
    exit(0)

name = sys.argv[1]
try:
    output_bytes = subprocess.check_output([sys.executable, "-u", name + ".py"],
                                           stderr=subprocess.STDOUT)
except subprocess.CalledProcessError as exc:
    print('Test `{}` failed:\n{}\n'.format(name, '-' * 50))
    print(exc.output.decode())
    print('-' * 50)
    sys.exit(1)

output    = sanitize(output_bytes.decode('utf-8'))
reference = sanitize(open(name + '.ref', 'r').read())

if output == reference:
    print('Test "%s" succeeded.' % name)
    exit(0)
else:
    print('Test "%s" FAILED!' % name)
    print('--- output')
    print('+++ reference')
    print(''.join(difflib.ndiff(output.splitlines(True),
                                reference.splitlines(True))))
    exit(-1)
