Add test for PEP8 - currently all errors are ignored, but we warn about them - and...
authorJelmer Vernooij <jelmer@samba.org>
Thu, 8 Dec 2011 20:56:08 +0000 (21:56 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Thu, 8 Dec 2011 22:44:10 +0000 (23:44 +0100)
Autobuild-User: Jelmer Vernooij <jelmer@samba.org>
Autobuild-Date: Thu Dec  8 23:44:10 CET 2011 on sn-devel-104

source4/scripting/python/samba/tests/source.py

index c67634912de2692c9d2718c73062d915570266f2..260d753801793f7edb2ca25dc2a4e9f3d990a05b 100644 (file)
@@ -26,11 +26,16 @@ import os
 import re
 import warnings
 
+import samba
+samba.ensure_external_module("pep8", "pep8")
+import pep8
+
 from samba.tests import (
     TestCase,
     )
 
 
+
 def get_python_source_files():
     """Iterate over all Python source files."""
     library_dir = os.path.join(os.path.dirname(__file__), "..", "..", "samba")
@@ -166,3 +171,48 @@ class TestSource(TestCase):
         if illegal_newlines:
             self.fail(self._format_message(illegal_newlines,
                 'Non-unix newlines were found in the following source files:'))
+
+    pep8_ignore = [
+        'E401',      # multiple imports on one line
+        'E501',      # line too long
+        'E251',      # no spaces around keyword / parameter equals
+        'E201',      # whitespace after '['
+        'E202',      # whitespace before ')'
+        'E302',      # expected 2 blank lines, found 1
+        'E231',      # missing whitespace after ','
+        'E225',      # missing whitespace around operator
+        'E111',      # indentation is not a multiple of four
+        'E261',      # at least two spaces before inline comment
+        'E702',      # multiple statements on one line (semicolon)
+        'E221',      # multiple spaces before operator
+        'E303',      # too many blank lines (2)
+        'E203',      # whitespace before ':'
+        'E222',      # multiple spaces after operator
+        'E301',      # expected 1 blank line, found 0
+        'E211',      # whitespace before '('
+        'E701',      # multiple statements on one line (colon)
+        ]
+
+    def test_pep8(self):
+        pep8.process_options()
+        pep8.options.repeat = True
+        pep8_errors = []
+        pep8_warnings = []
+        for fname, text in get_source_file_contents():
+            def report_error(line_number, offset, text, check):
+                code = text[:4]
+                if code in self.pep8_ignore:
+                    code = 'W' + code[1:]
+                text = code + text[4:]
+                print "%s:%s: %s" % (fname, line_number, text)
+                summary = (fname, line_number, offset, text, check)
+                if code[0] == 'W':
+                    pep8_warnings.append(summary)
+                else:
+                    pep8_errors.append(summary)
+            lines = text.splitlines(True)
+            checker = pep8.Checker(fname, lines)
+            checker.report_error = report_error
+            checker.check_all()
+        if len(pep8_errors) > 0:
+            self.fail('there were %d pep8 errors' % len(pep8_errors))