Python: Simplify test suite generation by using unittest discovery (#485)

diff --git a/setup.py b/setup.py
index df6a521..5a9c275 100644
--- a/setup.py
+++ b/setup.py
@@ -6,6 +6,8 @@
 import os
 import platform
 import re
+import unittest
+
 try:
     from setuptools import Extension
     from setuptools import setup
@@ -13,7 +15,6 @@
     from distutils.core import Extension
     from distutils.core import setup
 from distutils.command.build_ext import build_ext
-from distutils.cmd import Command
 
 
 CURR_DIR = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
@@ -37,30 +38,10 @@
     return '{0}.{1}.{2}'.format(major, minor, patch)
 
 
-class TestCommand(Command):
-    """ Run all *_test.py scripts in 'tests' folder with the same Python
-    interpreter used to run setup.py.
-    """
-
-    user_options = []
-
-    def initialize_options(self):
-        pass
-
-    def finalize_options(self):
-        pass
-
-    def run(self):
-        import sys, subprocess, glob
-
-        test_dir = os.path.join(CURR_DIR, 'python', 'tests')
-        os.chdir(test_dir)
-
-        for test in glob.glob('*_test.py'):
-            try:
-                subprocess.check_call([sys.executable, test])
-            except subprocess.CalledProcessError:
-                raise SystemExit(1)
+def get_test_suite():
+    test_loader = unittest.TestLoader()
+    test_suite = test_loader.discover('python', pattern='*_test.py')
+    return test_suite
 
 
 class BuildExt(build_ext):
@@ -258,9 +239,10 @@
         language='c++'),
 ]
 
+TEST_SUITE = 'setup.get_test_suite'
+
 CMD_CLASS = {
     'build_ext': BuildExt,
-    'test': TestCommand,
 }
 
 setup(
@@ -275,4 +257,5 @@
     package_dir=PACKAGE_DIR,
     py_modules=PY_MODULES,
     ext_modules=EXT_MODULES,
+    test_suite=TEST_SUITE,
     cmdclass=CMD_CLASS)