| Index: third_party/closure_linter/closure_linter/common/filetestcase.py
|
| diff --git a/third_party/closure_linter/closure_linter/common/filetestcase.py b/third_party/closure_linter/closure_linter/common/filetestcase.py
|
| deleted file mode 100755
|
| index 7cd83cd1dcf58c0cb11ae510a939c5841c19c93b..0000000000000000000000000000000000000000
|
| --- a/third_party/closure_linter/closure_linter/common/filetestcase.py
|
| +++ /dev/null
|
| @@ -1,115 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright 2007 The Closure Linter Authors. All Rights Reserved.
|
| -#
|
| -# Licensed under the Apache License, Version 2.0 (the "License");
|
| -# you may not use this file except in compliance with the License.
|
| -# You may obtain a copy of the License at
|
| -#
|
| -# http://www.apache.org/licenses/LICENSE-2.0
|
| -#
|
| -# Unless required by applicable law or agreed to in writing, software
|
| -# distributed under the License is distributed on an "AS-IS" BASIS,
|
| -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -# See the License for the specific language governing permissions and
|
| -# limitations under the License.
|
| -
|
| -"""Test case that runs a checker on a file, matching errors against annotations.
|
| -
|
| -Runs the given checker on the given file, accumulating all errors. The list
|
| -of errors is then matched against those annotated in the file. Based heavily
|
| -on devtools/javascript/gpylint/full_test.py.
|
| -"""
|
| -
|
| -__author__ = ('robbyw@google.com (Robert Walker)',
|
| - 'ajp@google.com (Andy Perelson)')
|
| -
|
| -import re
|
| -
|
| -import gflags as flags
|
| -import unittest as googletest
|
| -from closure_linter.common import erroraccumulator
|
| -
|
| -
|
| -class AnnotatedFileTestCase(googletest.TestCase):
|
| - """Test case to run a linter against a single file."""
|
| -
|
| - # Matches an all caps letters + underscores error identifer
|
| - _MESSAGE = {'msg': '[A-Z][A-Z_]+'}
|
| - # Matches a //, followed by an optional line number with a +/-, followed by a
|
| - # list of message IDs. Used to extract expected messages from testdata files.
|
| - # TODO(robbyw): Generalize to use different commenting patterns.
|
| - _EXPECTED_RE = re.compile(r'\s*//\s*(?:(?P<line>[+-]?[0-9]+):)?'
|
| - r'\s*(?P<msgs>%(msg)s(?:,\s*%(msg)s)*)' % _MESSAGE)
|
| -
|
| - def __init__(self, filename, lint_callable, converter):
|
| - """Create a single file lint test case.
|
| -
|
| - Args:
|
| - filename: Filename to test.
|
| - lint_callable: Callable that lints a file. This is usually runner.Run().
|
| - converter: Function taking an error string and returning an error code.
|
| - """
|
| -
|
| - googletest.TestCase.__init__(self, 'runTest')
|
| - self._filename = filename
|
| - self._messages = []
|
| - self._lint_callable = lint_callable
|
| - self._converter = converter
|
| -
|
| - def setUp(self):
|
| - flags.FLAGS.dot_on_next_line = True
|
| -
|
| - def tearDown(self):
|
| - flags.FLAGS.dot_on_next_line = False
|
| -
|
| - def shortDescription(self):
|
| - """Provides a description for the test."""
|
| - return 'Run linter on %s' % self._filename
|
| -
|
| - def runTest(self):
|
| - """Runs the test."""
|
| - try:
|
| - filename = self._filename
|
| - stream = open(filename)
|
| - except IOError as ex:
|
| - raise IOError('Could not find testdata resource for %s: %s' %
|
| - (self._filename, ex))
|
| -
|
| - expected = self._GetExpectedMessages(stream)
|
| - got = self._ProcessFileAndGetMessages(filename)
|
| - self.assertEqual(expected, got)
|
| -
|
| - def _GetExpectedMessages(self, stream):
|
| - """Parse a file and get a sorted list of expected messages."""
|
| - messages = []
|
| - for i, line in enumerate(stream):
|
| - match = self._EXPECTED_RE.search(line)
|
| - if match:
|
| - line = match.group('line')
|
| - msg_ids = match.group('msgs')
|
| - if line is None:
|
| - line = i + 1
|
| - elif line.startswith('+') or line.startswith('-'):
|
| - line = i + 1 + int(line)
|
| - else:
|
| - line = int(line)
|
| - for msg_id in msg_ids.split(','):
|
| - # Ignore a spurious message from the license preamble.
|
| - if msg_id != 'WITHOUT':
|
| - messages.append((line, self._converter(msg_id.strip())))
|
| - stream.seek(0)
|
| - messages.sort()
|
| - return messages
|
| -
|
| - def _ProcessFileAndGetMessages(self, filename):
|
| - """Trap gjslint's output parse it to get messages added."""
|
| - error_accumulator = erroraccumulator.ErrorAccumulator()
|
| - self._lint_callable(filename, error_accumulator)
|
| -
|
| - errors = error_accumulator.GetErrors()
|
| -
|
| - # Convert to expected tuple format.
|
| -
|
| - error_msgs = [(error.token.line_number, error.code) for error in errors]
|
| - error_msgs.sort()
|
| - return error_msgs
|
|
|