#!/usr/bin/env python3

import subprocess
import os
import glob
import sys

from config import pythons, VIRT_BASE, X64_EXT


def test_one(params):
    python, architecture = params
    try:
        print("Running: %s, %s" % params)
        command = [r'%s\%s%s\Scripts\python.exe' %
                   (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 %s, %s -- %s" % (python, architecture, status))
        return (python, architecture, status, trace)
    except Exception as msg:
        print("Error with %s, %s: %s" % (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("%s%s: %s" % (python, architecture, status and 'ERR' or 'PASS'))

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