From ba16daf56fccc1aff99ec1d079eac1827f7ca44a Mon Sep 17 00:00:00 2001 From: Benjamin Drung Date: Sun, 30 Apr 2017 22:29:41 +0200 Subject: [PATCH] Repair pylint test case The --include-ids parameter was dropped from pylint and thus the command failed as was skipped. Repair the pylint check and add support for Python 3. --- debian/control | 1 + ubuntutools/test/pylint.conf | 2 +- ubuntutools/test/test_pylint.py | 53 ++++++++++----------------------- 3 files changed, 18 insertions(+), 38 deletions(-) diff --git a/debian/control b/debian/control index 6e17fdb..f23bdd4 100644 --- a/debian/control +++ b/debian/control @@ -12,6 +12,7 @@ Build-Depends: dctrl-tools, libwww-perl, lsb-release, pylint, + pylint3, python-all (>= 2.6.5-13~), python-apt (>= 0.7.93~), python-debian (>= 0.1.20~), diff --git a/ubuntutools/test/pylint.conf b/ubuntutools/test/pylint.conf index 984e234..aff16d8 100644 --- a/ubuntutools/test/pylint.conf +++ b/ubuntutools/test/pylint.conf @@ -10,7 +10,7 @@ ignored-classes=Launchpad,BaseWrapper,PersonTeam,Distribution,Consumer,Credentia # Maximum number of characters on a single line. max-line-length=80 -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 # tab). indent-string=' ' diff --git a/ubuntutools/test/test_pylint.py b/ubuntutools/test/test_pylint.py index f0b5847..809bc51 100644 --- a/ubuntutools/test/test_pylint.py +++ b/ubuntutools/test/test_pylint.py @@ -1,6 +1,7 @@ # test_pylint.py - Run pylint in errors-only mode. # # Copyright (C) 2010, Stefano Rivera +# Copyright (C) 2017, Benjamin Drung # # Permission to use, copy, modify, and/or distribute this software for any # purpose with or without fee is hereby granted, provided that the above @@ -14,56 +15,34 @@ # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. -import re +import sys import setup from ubuntutools.test import unittest from ubuntutools import subprocess -WHITELIST = [re.compile(': %s$' % x) for x in ( - # Wildcard import: - r"No name '\w+Error' in module 'launchpadlib\.errors'", - # http://www.logilab.org/ticket/51250: - r"Module 'hashlib' has no '(md5|sha(1|224|256|384|512))' member", - # pylint doesn't like *args/**kwargs - r"Instance of 'Popen' has no '.*' member", -)] class PylintTestCase(unittest.TestCase): def test_pylint(self): "Test: Run pylint on Python source code" files = ['ubuntutools'] for script in setup.scripts: - f = open(script, 'r') - if 'python' in f.readline(): + with open(script, 'r') as script_file: + shebang = script_file.readline() + if ((sys.version_info[0] == 3 and 'python3' in shebang) or + ('python' in shebang and 'python3' not in shebang)): files.append(script) - f.close() - cmd = ['pylint', '--rcfile=ubuntutools/test/pylint.conf', '-E', - '--include-ids=y', '--'] + files + + if sys.version_info[0] == 3: + pylint_binary = 'pylint3' + else: + pylint_binary = 'pylint' + cmd = [pylint_binary, '--rcfile=ubuntutools/test/pylint.conf', '-E', + '--reports=n', '--'] + files + sys.stderr.write("Running following command:\n{}\n".format(" ".join(cmd))) process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) out, err = process.communicate() - if err != '': - raise unittest.SkipTest('pylint crashed :/') - - filtered_out = [] - detected_in = '' - # pylint bug: http://www.logilab.org/ticket/46273 - # pylint: disable=E1103 - for line in out.splitlines(): - # pylint: enable=E1103 - if line.startswith('************* '): - detected_in = line - continue - - for reg_exp in WHITELIST: - if reg_exp.search(line): - break - else: - filtered_out.append(detected_in) - filtered_out.append(line) - - self.assertEqual(filtered_out, [], - "pylint found errors.\n" - "Filtered Output:\n" + '\n'.join(filtered_out)) + self.assertFalse(err, pylint_binary + ' crashed. Error output:\n' + err.decode()) + self.assertFalse(out, pylint_binary + " found issues:\n" + out.decode())