merge
[cython.git] / runtests.py
index 42cfb67106dd45cfb80609597600cd92537936b8..5f798757452daf966dc63484686a789a2c0d183e 100644 (file)
@@ -56,14 +56,13 @@ EXT_DEP_INCLUDES = [
 
 VER_DEP_MODULES = {
     # tests are excluded if 'CurrentPythonVersion OP VersionTuple', i.e.
-    # (2,4) : (operator.le, ...) excludes ... when PyVer <= 2.4.x
+    # (2,4) : (operator.lt, ...) excludes ... when PyVer < 2.4.x
+    (2,4) : (operator.lt, lambda x: x in ['run.extern_builtins_T258',
+                                          'run.builtin_sorted'
+                                          ]),
     (2,5) : (operator.lt, lambda x: x in ['run.any',
                                           'run.all',
                                           ]),
-    (2,4) : (operator.le, lambda x: x in ['run.extern_builtins_T258'
-                                          ]),
-    (2,3) : (operator.le, lambda x: x in ['run.builtin_sorted'
-                                          ]),
     (2,6) : (operator.lt, lambda x: x in ['run.print_function',
                                           'run.cython3',
                                           ]),
@@ -715,7 +714,8 @@ class EndToEndTest(unittest.TestCase):
 
     def setUp(self):
         from Cython.TestUtils import unpack_source_tree
-        _, self.commands = unpack_source_tree(os.path.join('tests', 'build', self.treefile), self.workdir)
+        _, self.commands = unpack_source_tree(
+            os.path.join('tests', 'build', self.treefile), self.workdir)
         self.old_dir = os.getcwd()
         os.chdir(self.workdir)
         if self.workdir not in sys.path:
@@ -730,11 +730,25 @@ class EndToEndTest(unittest.TestCase):
         commands = (self.commands
             .replace("CYTHON", "PYTHON %s" % os.path.join(self.cython_root, 'cython.py'))
             .replace("PYTHON", sys.executable))
-        old_path = os.environ.get('PYTHONPATH')
         try:
-            os.environ['PYTHONPATH'] = self.cython_syspath + os.pathsep + (old_path or '')
-            print(os.environ['PYTHONPATH'])
-            self.assertEqual(0, os.system(commands))
+            old_path = os.environ.get('PYTHONPATH')
+            os.environ['PYTHONPATH'] = os.path.join(self.cython_syspath, (old_path or ''))
+            for command in commands.split('\n'):
+                if sys.version_info[:2] >= (2,4):
+                    import subprocess
+                    p = subprocess.Popen(commands,
+                                         stderr=subprocess.PIPE,
+                                         stdout=subprocess.PIPE,
+                                         shell=True)
+                    out, err = p.communicate()
+                    res = p.returncode
+                    if res != 0:
+                        print(command)
+                        print(out)
+                        print(err)
+                else:
+                    res = os.system(command)
+                self.assertEqual(0, res, "non-zero exit status")
         finally:
             if old_path:
                 os.environ['PYTHONPATH'] = old_path