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