12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python
22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2011 The Closure Linter Authors. All Rights Reserved.
42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Licensed under the Apache License, Version 2.0 (the "License");
62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# you may not use this file except in compliance with the License.
72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# You may obtain a copy of the License at
82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#      http://www.apache.org/licenses/LICENSE-2.0
102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#
112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Unless required by applicable law or agreed to in writing, software
122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# distributed under the License is distributed on an "AS-IS" BASIS,
132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# See the License for the specific language governing permissions and
152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# limitations under the License.
162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""Tests for gjslint --nostrict.
182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
192da489cd246702bee5938545b18a6f710ed214bcJamie GennisTests errors that can be thrown by gjslint when not in strict mode.
202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis"""
212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
242da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport os
252da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport sys
262da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest
272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
282da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport gflags as flags
292da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest as googletest
302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
312da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import checker
322da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import errors
332da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter.common import filetestcase
342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis_RESOURCE_PREFIX = 'closure_linter/testdata'
362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
372da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.strict = False
382da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.custom_jsdoc_tags = ('customtag', 'requires')
392da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.closurized_namespaces = ('goog', 'dummy')
402da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.limited_doc_files = ('externs.js', 'dummy.js',
412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                                 'limited_doc_checks.js')
422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# List of files under testdata to test.
452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# We need to list files explicitly since pyglib can't list directories.
462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis_TEST_FILES = [
472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    'not_strict.js'
482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    ]
492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
512da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass GJsLintTestSuite(unittest.TestSuite):
522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  """Test suite to run a GJsLintTest for each of several files.
532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  If sys.argv[1:] is non-empty, it is interpreted as a list of filenames in
552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  testdata to test. Otherwise, _TEST_FILES is used.
562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  """
572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  def __init__(self, tests=()):
592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    unittest.TestSuite.__init__(self, tests)
602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    argv = sys.argv and sys.argv[1:] or []
622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    if argv:
632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      test_files = argv
642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    else:
652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      test_files = _TEST_FILES
662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis    for test_file in test_files:
672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      resource_path = os.path.join(_RESOURCE_PREFIX, test_file)
682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis      self.addTest(filetestcase.AnnotatedFileTestCase(resource_path,
692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                                                      checker.GJsLintRunner(),
702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis                                                      errors.ByName))
712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis
722da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__':
732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  # Don't let main parse args; it happens in the TestSuite.
742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis  googletest.main(argv=sys.argv[0:1], defaultTest='GJsLintTestSuite')
75