#!/usr/bin/env python
"""Runs the tornado test suite with all supported python interpreters."""

from __future__ import absolute_import, division, with_statement

import os
import subprocess
import sys

INTERPRETERS = [
    "python2.5",
    "python2.6",
    "python2.7",
    "auto2to3",
    "pypy",
    ]


def exists_on_path(filename):
    for dir in os.environ["PATH"].split(":"):
        if os.path.exists(os.path.join(dir, filename)):
            return True
    return False


def main():
    for interpreter in INTERPRETERS:
        print "=================== %s =======================" % interpreter
        if not exists_on_path(interpreter):
            print "Interpreter not found, skipping..."
            continue
        args = [interpreter, "-m", "tornado.test.runtests"] + sys.argv[1:]
        ret = subprocess.call(args)
        if ret != 0:
            print "Tests on %s failed with exit code %d" % (interpreter, ret)
            sys.exit(ret)
    print "All tests passed"

if __name__ == "__main__":
    main()
