#!/usr/bin/env python3

import glob
import os
import subprocess
import sys

from config import VIRT_BASE, X64_EXT, pythons


def test_one(params):
    python, architecture = params
    try:
        print("Running: %s, %s" % params)
        command = [
            r"{}\{}{}\Scripts\python.exe".format(VIRT_BASE, python, architecture),
            "test-installed.py",
            "--processes=-0",
            "--process-timeout=30",
        ]
        command.extend(glob.glob("Tests/test*.py"))
        proc = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
        (trace, stderr) = proc.communicate()
        status = proc.returncode
        print("Done with {}, {} -- {}".format(python, architecture, status))
        return (python, architecture, status, trace)
    except Exception as msg:
        print("Error with {}, {}: {}".format(python, architecture, msg))
        return (python, architecture, -1, str(msg))


if __name__ == "__main__":

    os.chdir("..")
    matrix = [
        (python, architecture) for python in pythons for architecture in ("", X64_EXT)
    ]

    results = map(test_one, matrix)

    for (python, architecture, status, trace) in results:
        print("{}{}: {}".format(python, architecture, status and "ERR" or "PASS"))

    res = all(status for (python, architecture, status, trace) in results)
    sys.exit(res)
