| OLD | NEW | 
| (Empty) |  | 
 |    1 # This file is part of Adblock Plus <https://adblockplus.org/>, | 
 |    2 # Copyright (C) 2006-2016 Eyeo GmbH | 
 |    3 # | 
 |    4 # Adblock Plus is free software: you can redistribute it and/or modify | 
 |    5 # it under the terms of the GNU General Public License version 3 as | 
 |    6 # published by the Free Software Foundation. | 
 |    7 # | 
 |    8 # Adblock Plus is distributed in the hope that it will be useful, | 
 |    9 # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |   10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |   11 # GNU General Public License for more details. | 
 |   12 # | 
 |   13 # You should have received a copy of the GNU General Public License | 
 |   14 # along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>. | 
 |   15 from __future__ import print_function | 
 |   16  | 
 |   17 import os | 
 |   18 import glob | 
 |   19 import tokenize | 
 |   20 import sys | 
 |   21 import re | 
 |   22  | 
 |   23 try: | 
 |   24     from StringIO import StringIO | 
 |   25 except ImportError: | 
 |   26     from io import StringIO | 
 |   27  | 
 |   28 from setuptools import setup, Command | 
 |   29  | 
 |   30  | 
 |   31 class TestCommand(Command): | 
 |   32     user_options = [] | 
 |   33  | 
 |   34     def _get_expected_errors(self, filename): | 
 |   35         errors = set() | 
 |   36  | 
 |   37         def tokeneater(kind, token, start, end, line): | 
 |   38             if kind == tokenize.COMMENT: | 
 |   39                 match = re.search(r'^#+[*\s]*(A\d+)', token) | 
 |   40                 if match: | 
 |   41                     try: | 
 |   42                         offset = token.index('*') | 
 |   43                     except ValueError: | 
 |   44                         offset = 0 | 
 |   45                     errors.add((start[0] + 1, | 
 |   46                                 start[1] + 1 + offset, | 
 |   47                                 match.group(1))) | 
 |   48  | 
 |   49         with open(filename, 'rb') as file: | 
 |   50             if sys.version_info[0] >= 3: | 
 |   51                 for token in tokenize.tokenize(file.readline): | 
 |   52                     tokeneater(*token) | 
 |   53             else: | 
 |   54                 tokenize.tokenize(file.readline, tokeneater) | 
 |   55  | 
 |   56         return errors | 
 |   57  | 
 |   58     def _get_reported_errors(self, filename, style_guide): | 
 |   59         orig_stdout = sys.stdout | 
 |   60         sys.stdout = stdout = StringIO() | 
 |   61  | 
 |   62         try: | 
 |   63             style_guide.check_files([filename]) | 
 |   64         finally: | 
 |   65             sys.stdout = orig_stdout | 
 |   66  | 
 |   67         stdout.seek(0) | 
 |   68         errors = set() | 
 |   69  | 
 |   70         for line in stdout: | 
 |   71             _, lineno, colno, error = line.split(':', 3) | 
 |   72             errors.add((int(lineno), int(colno), error.split()[0])) | 
 |   73  | 
 |   74         return errors | 
 |   75  | 
 |   76     def initialize_options(self): | 
 |   77         pass | 
 |   78  | 
 |   79     def finalize_options(self): | 
 |   80         pass | 
 |   81  | 
 |   82     def run(self): | 
 |   83         import flake8.engine | 
 |   84  | 
 |   85         directory = os.path.dirname(__file__) | 
 |   86         filenames = glob.glob(os.path.join(directory, 'tests', '*.py')) | 
 |   87         style_guide = flake8.engine.get_style_guide() | 
 |   88         failed = False | 
 |   89  | 
 |   90         for filename in sorted(filenames): | 
 |   91             expected = self._get_expected_errors(filename) | 
 |   92             reported = self._get_reported_errors(filename, style_guide) | 
 |   93             failures = expected ^ reported | 
 |   94  | 
 |   95             if not failures: | 
 |   96                 print(filename + ': OK') | 
 |   97                 continue | 
 |   98  | 
 |   99             for record in sorted(failures): | 
 |  100                 lineno, colno, error = record | 
 |  101  | 
 |  102                 print('{}:{}:{}: '.format(filename, lineno, colno), end='') | 
 |  103                 if record in expected: | 
 |  104                     print(error + ' expected') | 
 |  105                 else: | 
 |  106                     print('unexpected ' + error) | 
 |  107  | 
 |  108             failed = True | 
 |  109  | 
 |  110         if failed: | 
 |  111             sys.exit(1) | 
 |  112  | 
 |  113  | 
 |  114 setup( | 
 |  115     name='flake8-abp', | 
 |  116     version='0.1', | 
 |  117     py_modules=['flake8_abp'], | 
 |  118     entry_points={ | 
 |  119         'flake8.extension': [ | 
 |  120             'AXXX      = flake8_abp:ASTChecker', | 
 |  121             'A109-A110 = flake8_abp:check_quotes', | 
 |  122             'A111      = flake8_abp:check_redundant_parenthesis', | 
 |  123             'A303      = flake8_abp:check_non_default_encoding', | 
 |  124         ], | 
 |  125     }, | 
 |  126     cmdclass={'test': TestCommand} | 
 |  127 ) | 
| OLD | NEW |