r"""
Searches and runs all available test suites.
"""
import unittest
import sys

if __name__ == '__main__':
    if len(sys.argv) == 1:
        suite = unittest.TestLoader().discover('./')
    else:
        suite = unittest.TestLoader().discover(sys.argv[1] + '/')

#    def list_tests(suite):
#        for test in suite:
#            if isinstance(test, unittest.TestSuite):
#                list_tests(test)
#            elif isinstance(test, unittest.TestCase):
##                print test.__class__.__bases__
#                tmp = test.__str__().split()
#                test_method, test_class = tmp[0], tmp[1]
#                test_class = test_class.strip('()')
#                print test_class + '.' + test_method

#    list_tests(suite)
    results = unittest.TextTestRunner(verbosity=2, buffer=True).run(suite)
#    unittest.TextTestRunner(verbosity=2, buffer=False).run(suite)
    if results.wasSuccessful():
        raise SystemExit(0)
    else:
        print("Failed tests:")
        for failure in results.failures:
            print(failure[0].__str__())
        raise SystemExit(1)