12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python 22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2010 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"""Unit tests for ClosurizedNamespacesInfo.""" 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest as googletest 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import closurizednamespacesinfo 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import javascriptstatetracker 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import javascripttokenizer 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import javascripttokens 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import tokenutil 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# pylint: disable-msg=C6409 292da489cd246702bee5938545b18a6f710ed214bcJamie GennisTokenType = javascripttokens.JavaScriptTokenType 302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass ClosurizedNamespacesInfoTest(googletest.TestCase): 332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests for ClosurizedNamespacesInfo.""" 342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis _test_cases = { 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.global.anything': None, 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.CONSTANT': 'package', 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.methodName': 'package', 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.subpackage.methodName': 'package.subpackage', 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.subpackage.methodName.apply': 'package.subpackage', 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.something': 'package.ClassName', 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.Enum.VALUE.methodName': 'package.ClassName', 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.CONSTANT': 'package.ClassName', 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.namespace.CONSTANT.methodName': 'package.namespace', 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.inherits': 'package.ClassName', 462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.apply': 'package.ClassName', 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.methodName.apply': 'package.ClassName', 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.methodName.call': 'package.ClassName', 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.prototype.methodName': 'package.ClassName', 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.privateMethod_': 'package.ClassName', 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.className.privateProperty_': 'package.className', 522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.className.privateProperty_.methodName': 'package.className', 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.PrivateEnum_': 'package.ClassName', 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.prototype.methodName.apply': 'package.ClassName', 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.ClassName.property.subProperty': 'package.ClassName', 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.className.prototype.something.somethingElse': 'package.className' 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis } 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis _tokenizer = javascripttokenizer.JavaScriptTokenizer() 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetClosurizedNamespace(self): 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that the correct namespace is returned for various identifiers.""" 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo( 642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis closurized_namespaces=['package'], ignored_extra_namespaces=[]) 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for identifier, expected_namespace in self._test_cases.items(): 662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual_namespace = namespaces_info.GetClosurizedNamespace(identifier) 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual( 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected_namespace, 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual_namespace, 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'expected namespace "' + str(expected_namespace) + 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '" for identifier "' + str(identifier) + '" but was "' + 722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis str(actual_namespace) + '"') 732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIgnoredExtraNamespaces(self): 752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that ignored_extra_namespaces are ignored.""" 762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._GetRequireTokens('package.Something') 772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo( 782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis closurized_namespaces=['package'], 792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ignored_extra_namespaces=['package.Something']) 802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraRequire(token), 822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should be valid since it is in ignored namespaces.') 832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo( 852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ['package'], []) 862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraRequire(token), 882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should be invalid since it is not in ignored namespaces.') 892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraProvide_created(self): 912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provides for created namespaces are not extra.""" 922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo\');', 942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo = function() {};' 952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraProvide(token), 1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should not be extra since it is created.') 1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraProvide_createdIdentifier(self): 1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provides for created identifiers are not extra.""" 1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo.methodName\');', 1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName = function() {};' 1072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraProvide(token), 1122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should not be extra since it is created.') 1132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraProvide_notCreated(self): 1152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provides for non-created namespaces are extra.""" 1162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['goog.provide(\'package.Foo\');'] 1172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraProvide(token), 1212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should be extra since it is not created.') 1222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraProvide_duplicate(self): 1242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that providing a namespace twice makes the second one extra.""" 1252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 1262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo\');', 1272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo\');', 1282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo = function() {};' 1292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Advance to the second goog.provide token. 1342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = tokenutil.Search(token.next, TokenType.IDENTIFIER) 1352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraProvide(token), 1372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should be extra since it is already provided.') 1382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraProvide_notClosurized(self): 1402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provides of non-closurized namespaces are not extra.""" 1412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['goog.provide(\'notclosurized.Foo\');'] 1422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraProvide(token), 1462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should not be extra since it is not closurized.') 1472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_used(self): 1492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requires for used namespaces are not extra.""" 1502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 1512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo\');', 1522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.Foo.methodName();' 1532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraRequire(token), 1582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should not be extra since it is used.') 1592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_usedIdentifier(self): 1612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requires for used methods on classes are extra.""" 1622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 1632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo.methodName\');', 1642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.Foo.methodName();' 1652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraRequire(token), 1702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should require the package, not the method specifically.') 1712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_notUsed(self): 1732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requires for unused namespaces are extra.""" 1742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['goog.require(\'package.Foo\');'] 1752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraRequire(token), 1792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should be extra since it is not used.') 1802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_notClosurized(self): 1822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requires of non-closurized namespaces are not extra.""" 1832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['goog.require(\'notclosurized.Foo\');'] 1842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraRequire(token), 1882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should not be extra since it is not closurized.') 1892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_objectOnClass(self): 1912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requiring an object on a class is extra.""" 1922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 1932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo.Enum\');', 1942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.Foo.Enum.VALUE1;', 1952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 1972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 1982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraRequire(token), 2002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'The whole class, not the object, should be required.'); 2012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_constantOnClass(self): 2032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requiring a constant on a class is extra.""" 2042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 2052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo.CONSTANT\');', 2062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.Foo.CONSTANT', 2072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsExtraRequire(token), 2122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'The class, not the constant, should be required.'); 2132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_constantNotOnClass(self): 2152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requiring a constant not on a class is OK.""" 2162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 2172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.subpackage.CONSTANT\');', 2182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.subpackage.CONSTANT', 2192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraRequire(token), 2242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Constants can be required except on classes.'); 2252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_methodNotOnClass(self): 2272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requiring a method not on a class is OK.""" 2282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 2292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.subpackage.method\');', 2302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.subpackage.method()', 2312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraRequire(token), 2362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Methods can be required except on classes.'); 2372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsExtraRequire_defaults(self): 2392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that there are no warnings about extra requires for test utils""" 2402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['goog.require(\'goog.testing.jsunit\');'] 2412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['goog'], []) 2432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(namespaces_info.IsExtraRequire(token), 2452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'Should not be extra since it is for testing.') 2462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingProvides_provided(self): 2482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provided functions don't cause a missing provide.""" 2492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 2502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo\');', 2512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo = function() {};' 2522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 2572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingProvides_providedIdentifier(self): 2592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provided identifiers don't cause a missing provide.""" 2602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 2612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo.methodName\');', 2622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName = function() {};' 2632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 2682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingProvides_providedParentIdentifier(self): 2702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provided identifiers on a class don't cause a missing provide 2712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis on objects attached to that class.""" 2722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 2732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.foo.ClassName\');', 2742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.foo.ClassName.methodName = function() {};', 2752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.foo.ClassName.ObjectName = 1;', 2762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 2812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingProvides_unprovided(self): 2832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that unprovided functions cause a missing provide.""" 2842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['package.Foo = function() {};'] 2852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(1, len(namespaces_info.GetMissingProvides())) 2892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue('package.Foo' in namespaces_info.GetMissingProvides()) 2902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingProvides_privatefunction(self): 2922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that unprovided private functions don't cause a missing provide.""" 2932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['package.Foo_ = function() {};'] 2942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 2952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 2962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 2982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingProvides_required(self): 3002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that required namespaces don't cause a missing provide.""" 3012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo\');', 3032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName = function() {};' 3042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 3092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_required(self): 3112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that required namespaces don't cause a missing require.""" 3122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo\');', 3142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo();' 3152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 3202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_requiredIdentifier(self): 3222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that required namespaces satisfy identifiers on that namespace.""" 3232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo\');', 3252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName();' 3262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingProvides())) 3312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_requiredParentClass(self): 3332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that requiring a parent class of an object is sufficient to prevent 3342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a missing require on that object.""" 3352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo\');', 3372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName();', 3382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName(package.Foo.ObjectName);' 3392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingRequires())) 3442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_unrequired(self): 3462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that unrequired namespaces cause a missing require.""" 3472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = ['package.Foo();'] 3482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(1, len(namespaces_info.GetMissingRequires())) 3522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue('package.Foo' in namespaces_info.GetMissingRequires()) 3532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_provided(self): 3552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that provided namespaces satisfy identifiers on that namespace.""" 3562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo\');', 3582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName();' 3592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingRequires())) 3642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_created(self): 3662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that created namespaces do not satisfy usage of an identifier.""" 3672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo = function();', 3692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName();' 3702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(1, len(namespaces_info.GetMissingRequires())) 3752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue('package.Foo' in namespaces_info.GetMissingRequires()) 3762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_createdIdentifier(self): 3782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that created identifiers satisfy usage of the identifier.""" 3792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName = function();', 3812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName();' 3822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(0, len(namespaces_info.GetMissingRequires())) 3872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetMissingRequires_objectOnClass(self): 3892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that we should require a class, not the object on the class.""" 3902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 3912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.require(\'package.Foo.Enum\');', 3922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'var x = package.Foo.Enum.VALUE1;', 3932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 3942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 3952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 3962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 3972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(1, len(namespaces_info.GetMissingRequires()), 3982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'The whole class, not the object, should be required.'); 3992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsFirstProvide(self): 4012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests operation of the isFirstProvide method.""" 4022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 4032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.provide(\'package.Foo\');', 4042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.methodName();' 4052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 4062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 4072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) 4082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(namespaces_info.IsFirstProvide(token)) 4102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGetWholeIdentifierString(self): 4122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests that created identifiers satisfy usage of the identifier.""" 4132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_lines = [ 4142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'package.Foo.', 4152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ' veryLong.', 4162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ' identifier;' 4172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 4182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = self._tokenizer.TokenizeFile(input_lines) 4192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo([], []) 4202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals('package.Foo.veryLong.identifier', 4222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info._GetWholeIdentifierString(token)) 4232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals(None, 4242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info._GetWholeIdentifierString(token.next)) 4252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def _GetInitializedNamespacesInfo(self, token, closurized_namespaces, 4272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ignored_extra_namespaces): 4282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Returns a namespaces info initialized with the given token stream.""" 4292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo( 4302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis closurized_namespaces=closurized_namespaces, 4312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ignored_extra_namespaces=ignored_extra_namespaces) 4322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis state_tracker = javascriptstatetracker.JavaScriptStateTracker() 4332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis while token: 4352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis namespaces_info.ProcessToken(token, state_tracker) 4362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis token = token.next 4372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return namespaces_info 4392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def _GetProvideTokens(self, namespace): 4412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Returns a list of tokens for a goog.require of the given namespace.""" 4422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis line_text = 'goog.require(\'' + namespace + '\');\n' 4432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return javascripttokenizer.JavaScriptTokenizer().TokenizeFile([line_text]) 4442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def _GetRequireTokens(self, namespace): 4462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Returns a list of tokens for a goog.require of the given namespace.""" 4472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis line_text = 'goog.require(\'' + namespace + '\');\n' 4482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return javascripttokenizer.JavaScriptTokenizer().TokenizeFile([line_text]) 4492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 4502da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__': 4512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis googletest.main() 452