From ce3e9f237be40c0443f66f66014211eb716dd7a5 Mon Sep 17 00:00:00 2001 From: Stefan Behnel <stefan_ml@behnel.de> Date: Sat, 18 Jan 2014 15:17:13 +0100 Subject: [PATCH] remove redundant code from cygdb test and apply some safety fixes --- Cython/Debugger/Tests/TestLibCython.py | 77 +++++++------------------- 1 file changed, 20 insertions(+), 57 deletions(-) diff --git a/Cython/Debugger/Tests/TestLibCython.py b/Cython/Debugger/Tests/TestLibCython.py index e942f04b5..482608af9 100644 --- a/Cython/Debugger/Tests/TestLibCython.py +++ b/Cython/Debugger/Tests/TestLibCython.py @@ -234,63 +234,26 @@ class GdbDebuggerTestCase(DebuggerTestCase): os.path.abspath(Cython.__file__)))) env = dict(os.environ, PYTHONPATH=os.pathsep.join(paths)) - try: - p = subprocess.Popen(['gdb', '-v'], stdout=subprocess.PIPE) - have_gdb = True - except OSError: - # gdb was not installed - have_gdb = False - else: - gdb_version = p.stdout.read().decode('ascii') - p.wait() - p.stdout.close() - - if have_gdb: - # Based on Lib/test/test_gdb.py - regex = "^GNU gdb [^\d]*(\d+)\.(\d+)" - gdb_version_number = list(map(int, re.search(regex, gdb_version).groups())) - - if gdb_version_number >= [7, 2]: - python_version_script = tempfile.NamedTemporaryFile(mode='w+') - python_version_script.write( - 'python import sys; print("%s %s" % sys.version_info[:2])') - python_version_script.flush() - p = subprocess.Popen(['gdb', '-batch', '-x', python_version_script.name], - stdout=subprocess.PIPE) - try: - python_version = p.stdout.read().decode('ascii') - p.wait() - finally: - p.stdout.close() - try: - python_version_number = list(map(int, python_version.split())) - except ValueError: - have_gdb = False - - - # Be Python 3 compatible - if (not have_gdb - or gdb_version_number < [7, 2] - or python_version_number < [2, 6]): - self.p = None - warnings.warn( - 'Skipping gdb tests, need gdb >= 7.2 with Python >= 2.6') - else: - self.p = subprocess.Popen( - args, - stdout=open(os.devnull, 'w'), - stderr=subprocess.PIPE, - env=env) + self.p = subprocess.Popen( + args, + stdout=open(os.devnull, 'w'), + stderr=subprocess.PIPE, + env=env) def tearDown(self): if not test_gdb(): return - super(GdbDebuggerTestCase, self).tearDown() - if self.p: - self.p.stderr.close() - self.p.wait() - os.remove(self.gdb_command_file) + try: + super(GdbDebuggerTestCase, self).tearDown() + if self.p: + try: self.p.stdout.close() + except: pass + try: self.p.stderr.close() + except: pass + self.p.wait() + finally: + os.remove(self.gdb_command_file) class TestAll(GdbDebuggerTestCase): @@ -302,15 +265,15 @@ class TestAll(GdbDebuggerTestCase): out, err = self.p.communicate() err = err.decode('UTF-8') - exit_status = self.p.wait() + exit_status = self.p.returncode if exit_status == 1: sys.stderr.write(err) elif exit_status >= 2: - border = '*' * 30 - start = '%s v INSIDE GDB v %s' % (border, border) - end = '%s ^ INSIDE GDB ^ %s' % (border, border) - errmsg = '\n%s\n%s%s' % (start, err, end) + border = u'*' * 30 + start = u'%s v INSIDE GDB v %s' % (border, border) + end = u'%s ^ INSIDE GDB ^ %s' % (border, border) + errmsg = u'\n%s\n%s%s' % (start, err, end) sys.stderr.write(errmsg) -- 2.30.9