diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2015-09-03 07:51:59 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2015-09-03 07:51:59 (GMT) |
commit | 3c5ce404a0464721928d0decb13534c85c163b91 (patch) | |
tree | edc595f15afc55705c39b443515795dbf5d7259f | |
parent | b50d3b2cd322d757852aa783c69127a44906212d (diff) | |
download | cpython-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.py | 43 |
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, |