15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#!/usr/bin/env python 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright 2012 The Closure Linter Authors. All Rights Reserved. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Licensed under the Apache License, Version 2.0 (the "License"); 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# you may not use this file except in compliance with the License. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# You may obtain a copy of the License at 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# http://www.apache.org/licenses/LICENSE-2.0 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Unless required by applicable law or agreed to in writing, software 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# distributed under the License is distributed on an "AS-IS" BASIS, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# See the License for the specific language governing permissions and 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# limitations under the License. 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)"""Unit tests for RequireProvideSorter.""" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)import unittest as googletest 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from closure_linter import ecmametadatapass 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from closure_linter import javascripttokenizer 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from closure_linter import javascripttokens 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)from closure_linter import requireprovidesorter 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# pylint: disable-msg=C6409 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TokenType = javascripttokens.JavaScriptTokenType 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RequireProvideSorterTest(googletest.TestCase): 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Tests for RequireProvideSorter.""" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _tokenizer = javascripttokenizer.JavaScriptTokenizer() 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) _metadata_pass = ecmametadatapass.EcmaMetaDataPass() 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def testFixRequires_removeBlankLines(self): 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Tests that blank lines are omitted in sorted goog.require statements.""" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) input_lines = [ 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goog.provide(\'package.subpackage.Whatever\');', 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '', 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goog.require(\'package.subpackage.ClassB\');', 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '', 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goog.require(\'package.subpackage.ClassA\');' 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected_lines = [ 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goog.provide(\'package.subpackage.Whatever\');', 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) '', 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goog.require(\'package.subpackage.ClassA\');', 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'goog.require(\'package.subpackage.ClassB\');' 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ] 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token = self._tokenizer.TokenizeFile(input_lines) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._metadata_pass.Reset() 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self._metadata_pass.Process(token) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sorter = requireprovidesorter.RequireProvideSorter() 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sorter.FixRequires(token) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) self.assertEquals(expected_lines, self._GetLines(token)) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def _GetLines(self, token): 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) """Returns an array of lines based on the specified token stream.""" 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lines = [] 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line = '' 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while token: 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line += token.string 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if token.IsLastInLine(): 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lines.append(line) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) line = '' 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) token = token.next 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return lines 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)if __name__ == '__main__': 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) googletest.main() 75