summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2015-09-03 07:51:59 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2015-09-03 07:51:59 (GMT)
commit3c5ce404a0464721928d0decb13534c85c163b91 (patch)
treeedc595f15afc55705c39b443515795dbf5d7259f
parentb50d3b2cd322d757852aa783c69127a44906212d (diff)
downloadcpython-3c5ce404a0464721928d0decb13534c85c163b91.zip
cpython-3c5ce404a0464721928d0decb13534c85c163b91.tar.gz
cpython-3c5ce404a0464721928d0decb13534c85c163b91.tar.bz2
test_gdb: enhance regex used to parse the GDB version
-rw-r--r--Lib/test/test_gdb.py43
1 files changed, 31 insertions, 12 deletions
diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py
index 9656010..0b8c0c8 100644
--- a/Lib/test/test_gdb.py
+++ b/Lib/test/test_gdb.py
@@ -10,21 +10,36 @@ import sys
import unittest
import sysconfig
+from test import test_support
from test.test_support import run_unittest, findfile
-try:
- gdb_version, _ = subprocess.Popen(["gdb", "-nx", "--version"],
- stdout=subprocess.PIPE).communicate()
-except OSError:
- # This is what "no gdb" looks like. There may, however, be other
- # errors that manifest this way too.
- raise unittest.SkipTest("Couldn't find gdb on the path")
-gdb_version_number = re.search("^GNU gdb [^\d]*(\d+)\.(\d)", gdb_version)
-gdb_major_version = int(gdb_version_number.group(1))
-gdb_minor_version = int(gdb_version_number.group(2))
+def get_gdb_version():
+ try:
+ proc = subprocess.Popen(["gdb", "-nx", "--version"],
+ stdout=subprocess.PIPE,
+ universal_newlines=True)
+ version = proc.communicate()[0]
+ except OSError:
+ # This is what "no gdb" looks like. There may, however, be other
+ # errors that manifest this way too.
+ raise unittest.SkipTest("Couldn't find gdb on the path")
+
+ # Regex to parse:
+ # 'GNU gdb (GDB; SUSE Linux Enterprise 12) 7.7\n' -> 7.7
+ # 'GNU gdb (GDB) Fedora 7.9.1-17.fc22\n' -> 7.9
+ # 'GNU gdb 6.1.1 [FreeBSD]\n'
+ match = re.search("^GNU gdb.*? (\d+)\.(\d)", version)
+ if match is None:
+ raise Exception("unable to parse GDB version: %r" % version)
+ return (version, int(match.group(1)), int(match.group(2)))
+
+gdb_version, gdb_major_version, gdb_minor_version = get_gdb_version()
if gdb_major_version < 7:
- raise unittest.SkipTest("gdb versions before 7.0 didn't support python embedding"
- " Saw:\n" + gdb_version)
+ raise unittest.SkipTest("gdb versions before 7.0 didn't support python "
+ "embedding. Saw %s.%s:\n%s"
+ % (gdb_major_version, gdb_minor_version,
+ gdb_version))
+
if sys.platform.startswith("sunos"):
raise unittest.SkipTest("test doesn't work very well on Solaris")
@@ -781,6 +796,10 @@ class PyLocalsTests(DebuggerTests):
r".*\na = 1\nb = 2\nc = 3\n.*")
def test_main():
+ if test_support.verbose:
+ print("GDB version %s.%s:" % (gdb_major_version, gdb_minor_version))
+ for line in gdb_version.splitlines():
+ print(" " * 4 + line)
run_unittest(PrettyPrintTests,
PyListTests,
StackNavigationTests,