import traceback
import logging
from .tests import basic
from .tests import gac_100

logging.getLogger().setLevel(logging.ERROR)

tests = (
    ("basic", basic),
    ("gac 100", gac_100),
)

def main():
    failed = False
    for test_name, test_module in tests:
        try:
            test_module.main()
            print(" \x1b[1;32m✓\x1b[0m {}".format(test_name))
        except AssertionError as ae:
            print(" \x1b[1;31m✗\x1b[0m {}: {}".format(test_name,
                                                      ae.args[0] if len(ae.args) > 0
                                                      else '\b\b \b'))
            failed = True

        except Exception as e:
            print(" \x1b[1;7;31m!\x1b[0m {} {}".format(test_name, e))
            failed = True
            traceback.print_exc()

    if failed:
        exit(1)

if __name__ == '__main__':
    main()
