Home | History | Annotate | Download | only in closure_linter
      1 #!/usr/bin/env python
      2 #
      3 # Copyright 2007 The Closure Linter Authors. All Rights Reserved.
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License");
      6 # you may not use this file except in compliance with the License.
      7 # You may obtain a copy of the License at
      8 #
      9 #      http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS-IS" BASIS,
     13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 # See the License for the specific language governing permissions and
     15 # limitations under the License.
     16 
     17 """Full regression-type (Medium) tests for gjslint.
     18 
     19 Tests every error that can be thrown by gjslint.  Based heavily on
     20 devtools/javascript/gpylint/full_test.py
     21 """
     22 
     23 __author__ = ('robbyw (at] google.com (Robert Walker)',
     24               'ajp (at] google.com (Andy Perelson)')
     25 
     26 import re
     27 import os
     28 import sys
     29 import unittest
     30 
     31 import gflags as flags
     32 import unittest as googletest
     33 
     34 from closure_linter import checker
     35 from closure_linter import errors
     36 from closure_linter import error_check
     37 from closure_linter.common import filetestcase
     38 
     39 _RESOURCE_PREFIX = 'closure_linter/testdata'
     40 
     41 flags.FLAGS.strict = True
     42 flags.FLAGS.custom_jsdoc_tags = ('customtag', 'requires')
     43 flags.FLAGS.closurized_namespaces = ('goog', 'dummy')
     44 flags.FLAGS.limited_doc_files = ('externs.js', 'dummy.js',
     45                                  'limited_doc_checks.js')
     46 flags.FLAGS.jslint_error = error_check.Rule.ALL
     47 
     48 # List of files under testdata to test.
     49 # We need to list files explicitly since pyglib can't list directories.
     50 # TODO(user): Figure out how to list the directory.
     51 _TEST_FILES = [
     52     'all_js_wrapped.js',
     53     'blank_lines.js',
     54     'ends_with_block.js',
     55     'externs.js',
     56     'externs_jsdoc.js',
     57     'goog_scope.js',
     58     'html_parse_error.html',
     59     'indentation.js',
     60     'interface.js',
     61     'jsdoc.js',
     62     'limited_doc_checks.js',
     63     'minimal.js',
     64     'other.js',
     65     'provide_blank.js',
     66     'provide_extra.js',
     67     'provide_missing.js',
     68     'require_all_caps.js',
     69     'require_blank.js',
     70     'require_extra.js',
     71     'require_function.js',
     72     'require_function_missing.js',
     73     'require_function_through_both.js',
     74     'require_function_through_namespace.js',
     75     'require_interface.js',
     76     'require_interface_base.js',
     77     'require_lower_case.js',
     78     'require_missing.js',
     79     'require_numeric.js',
     80     'require_provide_blank.js',
     81     'require_provide_ok.js',
     82     'require_provide_missing.js',
     83     'simple.html',
     84     'spaces.js',
     85     'tokenizer.js',
     86     'unparseable.js',
     87     'unused_private_members.js',
     88     'utf8.html'
     89     ]
     90 
     91 
     92 class GJsLintTestSuite(unittest.TestSuite):
     93   """Test suite to run a GJsLintTest for each of several files.
     94 
     95   If sys.argv[1:] is non-empty, it is interpreted as a list of filenames in
     96   testdata to test. Otherwise, _TEST_FILES is used.
     97   """
     98 
     99   def __init__(self, tests=()):
    100     unittest.TestSuite.__init__(self, tests)
    101 
    102     argv = sys.argv and sys.argv[1:] or []
    103     if argv:
    104       test_files = argv
    105     else:
    106       test_files = _TEST_FILES
    107     for test_file in test_files:
    108       resource_path = os.path.join(_RESOURCE_PREFIX, test_file)
    109       self.addTest(filetestcase.AnnotatedFileTestCase(resource_path,
    110           checker.GJsLintRunner(), errors.ByName))
    111 
    112 if __name__ == '__main__':
    113   # Don't let main parse args; it happens in the TestSuite.
    114   googletest.main(argv=sys.argv[0:1], defaultTest='GJsLintTestSuite')
    115