#!/usr/bin/env python

"""Runs the tests for pyexperiment

Written by Peter Duerr
"""
from __future__ import print_function
from __future__ import unicode_literals
from __future__ import division
from __future__ import absolute_import

import unittest
import sys
import multiprocessing

# Make sure matplotlib is using backend for headless testing
import matplotlib
matplotlib.use('Agg')


def covered_process():
    """Monkey patches the multiprocessing module to start coverage
    """
    try:
        from coverage.collector import Collector
        from coverage import coverage
    except ImportError:
        return None

    # detect if coverage was running in forked process
    # pylint: disable=protected-access
    if Collector._collectors:
        original = multiprocessing.Process._bootstrap

        class ProcessWithCoverage(multiprocessing.Process):
            """Monkey patched process
            """
            def _bootstrap(self):
                cov = coverage(data_suffix=True,
                               include="pyexperiment/*.py")
                cov.start()
                try:
                    return original(self)
                finally:
                    cov.stop()
                    cov.save()
        return ProcessWithCoverage

PROCESS_WITH_COVERAGE = covered_process()
if PROCESS_WITH_COVERAGE:
    multiprocessing.Process = PROCESS_WITH_COVERAGE

def main(argv):
    """Runs all the tests
    """
    verbosity = 1
    if '-v' in argv:
        verbosity = 2

    suite = unittest.TestLoader().discover('tests')
    return unittest.TextTestRunner(verbosity=verbosity).run(suite)

if __name__ == "__main__":
    result = main(sys.argv)
    if result.wasSuccessful():
        exit(0)
    else:
        exit(1)

