#!/usr/bin/python

import unittest
import os
import sys
import subprocess
import fnmatch


def find_files(directory, pattern):
    for root, dirs, files in os.walk(directory):
        for basename in files:
            if fnmatch.fnmatch(basename, pattern):
                filename = os.path.join(root, basename)
                yield filename

os.environ['DEBCONF_SYSTEMRC'] = 'tests/debconf.conf'
sys.path.insert(0, '.')

# Build dependencies for the tests.
subprocess.check_call(['tests/build'])

# Parts borrowed from jockey.

if len(sys.argv) > 1 and sys.argv[1] == 'coverage':
    from coverage import coverage
    cov = coverage()
    cov.start()
    use_coverage = True
    sys.argv = sys.argv[0:1] + sys.argv[2:]
else:
    use_coverage = False

if len(sys.argv) > 1:
    filter = sys.argv[1]
    sys.argv = sys.argv[0:1] + sys.argv[2:]
else:
    filter = ''

tests = [t[:-3] for t in os.listdir('tests')
         if t.startswith('test_') and t.endswith('.py') and filter in t]
tests.sort()
suite = unittest.TestLoader().loadTestsFromNames(tests)
res = unittest.TextTestRunner(verbosity=2).run(suite)
if use_coverage:
    if os.path.exists('tests/coverage'):
        import shutil
        shutil.rmtree('tests/coverage')
    cov.stop()
    from itertools import chain
    include = chain(find_files('ubiquity', '*.py'),
                    find_files('scripts', '*.py'))
    cov.html_report(include=include, directory='tests/coverage')

if res.errors or res.failures:
    sys.exit(1)
