diff --git a/debian/control b/debian/control index f23bdd4..0c6c853 100644 --- a/debian/control +++ b/debian/control @@ -17,6 +17,7 @@ Build-Depends: dctrl-tools, python-apt (>= 0.7.93~), python-debian (>= 0.1.20~), python-distro-info (>= 0.4~), + python-flake8, python-httplib2, python-launchpadlib (>= 1.5.7), python-mock, @@ -27,6 +28,7 @@ Build-Depends: dctrl-tools, python3-apt, python3-debian, python3-distro-info, + python3-flake8, python3-httplib2, python3-launchpadlib, python3-mock, diff --git a/ubuntutools/test/test_flake8.py b/ubuntutools/test/test_flake8.py new file mode 100644 index 0000000..3289638 --- /dev/null +++ b/ubuntutools/test/test_flake8.py @@ -0,0 +1,44 @@ +# 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 +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +"""test_flake8.py - Run flake8 check""" + +import subprocess +import sys + +import setup +from ubuntutools.test import unittest + + +class Flake8TestCase(unittest.TestCase): + def test_flake8(self): + "Test: Run flake8 on Python source code" + files = ['ubuntutools', 'setup.py'] + for script in setup.scripts: + 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) + + with open('/proc/self/cmdline', 'r') as cmdline_file: + python_binary = cmdline_file.read().split('\0')[0] + cmd = [python_binary, '-m', 'flake8', '--max-line-length=99'] + 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() + self.assertFalse(err, "Unexpected standard error from flake8 run:\n" + err.decode()) + self.assertFalse(out, "flake8 found issues:\n" + out.decode())