15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#!/usr/bin/env python 25f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Copyright 2013 The Closure Linter Authors. All Rights Reserved. 35f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# 45f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Licensed under the Apache License, Version 2.0 (the "License"); 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# you may not use this file except in compliance with the License. 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# You may obtain a copy of the License at 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# 85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# http://www.apache.org/licenses/LICENSE-2.0 95f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# 105f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# Unless required by applicable law or agreed to in writing, software 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# distributed under the License is distributed on an "AS-IS" BASIS, 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# See the License for the specific language governing permissions and 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)# limitations under the License. 155f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 165f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)"""Tests for gjslint --strict. 175f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)Tests errors that can be thrown by gjslint when in strict mode. 195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)""" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import unittest 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import gflags as flags 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)import unittest as googletest 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from closure_linter import errors 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from closure_linter import runner 305f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from closure_linter.common import erroraccumulator 315f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)flags.FLAGS.strict = True 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class StrictTest(unittest.TestCase): 365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """Tests scenarios where strict generates warnings.""" 375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 385f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def testUnclosedString(self): 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """Tests warnings are reported when nothing is disabled. 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 415f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) b/11450054. 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """ 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) original = [ 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 'bug = function() {', 455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ' (\'foo\'\');', 465f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '};', 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) '', 485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ] 495f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 505f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected = [errors.FILE_DOES_NOT_PARSE, errors.MULTI_LINE_STRING, 515f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) errors.FILE_IN_BLOCK] 525f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self._AssertErrors(original, expected) 535f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 545f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) def _AssertErrors(self, original, expected_errors): 555f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) """Asserts that the error fixer corrects original to expected.""" 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 575f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) # Trap gjslint's output parse it to get messages added. 585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) error_accumulator = erroraccumulator.ErrorAccumulator() 595f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) runner.Run('testing.js', error_accumulator, source=original) 605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) error_nums = [e.code for e in error_accumulator.GetErrors()] 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) error_nums.sort() 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) expected_errors.sort() 645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self.assertListEqual(error_nums, expected_errors) 655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 665f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)if __name__ == '__main__': 675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) googletest.main() 685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 69