Index: third_party/closure_linter/closure_linter/closurizednamespacesinfo_test.py |
diff --git a/third_party/closure_linter/closure_linter/closurizednamespacesinfo_test.py b/third_party/closure_linter/closure_linter/closurizednamespacesinfo_test.py |
index cec3376e12dfbf15bb9e0b77a397e1ab26ed5b6a..42499419efadab27309076e59ecf98fa7cf07722 100755 |
--- a/third_party/closure_linter/closure_linter/closurizednamespacesinfo_test.py |
+++ b/third_party/closure_linter/closure_linter/closurizednamespacesinfo_test.py |
@@ -19,13 +19,15 @@ |
import unittest as googletest |
+from closure_linter import aliaspass |
from closure_linter import closurizednamespacesinfo |
+from closure_linter import ecmametadatapass |
from closure_linter import javascriptstatetracker |
-from closure_linter import javascripttokenizer |
from closure_linter import javascripttokens |
+from closure_linter import testutil |
from closure_linter import tokenutil |
-# pylint: disable-msg=C6409 |
+# pylint: disable=g-bad-name |
TokenType = javascripttokens.JavaScriptTokenType |
@@ -56,8 +58,6 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'package.className.prototype.something.somethingElse': 'package.className' |
} |
- _tokenizer = javascripttokenizer.JavaScriptTokenizer() |
- |
def testGetClosurizedNamespace(self): |
"""Tests that the correct namespace is returned for various identifiers.""" |
namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo( |
@@ -93,8 +93,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo\');', |
'package.Foo = function() {};' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraProvide(token), |
'Should not be extra since it is created.') |
@@ -105,8 +106,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo.methodName\');', |
'package.Foo.methodName = function() {};' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraProvide(token), |
'Should not be extra since it is created.') |
@@ -114,8 +116,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
def testIsExtraProvide_notCreated(self): |
"""Tests that provides for non-created namespaces are extra.""" |
input_lines = ['goog.provide(\'package.Foo\');'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertTrue(namespaces_info.IsExtraProvide(token), |
'Should be extra since it is not created.') |
@@ -127,8 +130,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo\');', |
'package.Foo = function() {};' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
# Advance to the second goog.provide token. |
token = tokenutil.Search(token.next, TokenType.IDENTIFIER) |
@@ -139,8 +143,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
def testIsExtraProvide_notClosurized(self): |
"""Tests that provides of non-closurized namespaces are not extra.""" |
input_lines = ['goog.provide(\'notclosurized.Foo\');'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraProvide(token), |
'Should not be extra since it is not closurized.') |
@@ -151,8 +156,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo\');', |
'var x = package.Foo.methodName();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraRequire(token), |
'Should not be extra since it is used.') |
@@ -163,8 +169,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo.methodName\');', |
'var x = package.Foo.methodName();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertTrue(namespaces_info.IsExtraRequire(token), |
'Should require the package, not the method specifically.') |
@@ -172,8 +179,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
def testIsExtraRequire_notUsed(self): |
"""Tests that requires for unused namespaces are extra.""" |
input_lines = ['goog.require(\'package.Foo\');'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertTrue(namespaces_info.IsExtraRequire(token), |
'Should be extra since it is not used.') |
@@ -181,8 +189,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
def testIsExtraRequire_notClosurized(self): |
"""Tests that requires of non-closurized namespaces are not extra.""" |
input_lines = ['goog.require(\'notclosurized.Foo\');'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraRequire(token), |
'Should not be extra since it is not closurized.') |
@@ -193,8 +202,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo.Enum\');', |
'var x = package.Foo.Enum.VALUE1;', |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertTrue(namespaces_info.IsExtraRequire(token), |
'The whole class, not the object, should be required.'); |
@@ -205,8 +215,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo.CONSTANT\');', |
'var x = package.Foo.CONSTANT', |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertTrue(namespaces_info.IsExtraRequire(token), |
'The class, not the constant, should be required.'); |
@@ -217,8 +228,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.subpackage.CONSTANT\');', |
'var x = package.subpackage.CONSTANT', |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraRequire(token), |
'Constants can be required except on classes.'); |
@@ -229,8 +241,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.subpackage.method\');', |
'var x = package.subpackage.method()', |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertFalse(namespaces_info.IsExtraRequire(token), |
'Methods can be required except on classes.'); |
@@ -238,8 +251,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
def testIsExtraRequire_defaults(self): |
"""Tests that there are no warnings about extra requires for test utils""" |
input_lines = ['goog.require(\'goog.testing.jsunit\');'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['goog'], []) |
+ |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['goog']) |
self.assertFalse(namespaces_info.IsExtraRequire(token), |
'Should not be extra since it is for testing.') |
@@ -250,8 +264,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo\');', |
'package.Foo = function() {};' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ |
+ namespaces_info = self._GetNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
@@ -261,9 +276,8 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo.methodName\');', |
'package.Foo.methodName = function() {};' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
def testGetMissingProvides_providedParentIdentifier(self): |
@@ -274,26 +288,27 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'package.foo.ClassName.methodName = function() {};', |
'package.foo.ClassName.ObjectName = 1;', |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
def testGetMissingProvides_unprovided(self): |
"""Tests that unprovided functions cause a missing provide.""" |
input_lines = ['package.Foo = function() {};'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
- self.assertEquals(1, len(namespaces_info.GetMissingProvides())) |
- self.assertTrue('package.Foo' in namespaces_info.GetMissingProvides()) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
+ |
+ missing_provides = namespaces_info.GetMissingProvides() |
+ self.assertEquals(1, len(missing_provides)) |
+ missing_provide = missing_provides.popitem() |
+ self.assertEquals('package.Foo', missing_provide[0]) |
+ self.assertEquals(1, missing_provide[1]) |
def testGetMissingProvides_privatefunction(self): |
"""Tests that unprovided private functions don't cause a missing provide.""" |
input_lines = ['package.Foo_ = function() {};'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
def testGetMissingProvides_required(self): |
@@ -302,9 +317,8 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo\');', |
'package.Foo.methodName = function() {};' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
def testGetMissingRequires_required(self): |
@@ -313,9 +327,8 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo\');', |
'package.Foo();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
def testGetMissingRequires_requiredIdentifier(self): |
@@ -324,9 +337,8 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo\');', |
'package.Foo.methodName();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingProvides())) |
def testGetMissingRequires_requiredParentClass(self): |
@@ -337,19 +349,21 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'package.Foo.methodName();', |
'package.Foo.methodName(package.Foo.ObjectName);' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingRequires())) |
def testGetMissingRequires_unrequired(self): |
"""Tests that unrequired namespaces cause a missing require.""" |
input_lines = ['package.Foo();'] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
- self.assertEquals(1, len(namespaces_info.GetMissingRequires())) |
- self.assertTrue('package.Foo' in namespaces_info.GetMissingRequires()) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
+ |
+ missing_requires = namespaces_info.GetMissingRequires() |
+ self.assertEquals(1, len(missing_requires)) |
+ missing_req = missing_requires.popitem() |
+ self.assertEquals('package.Foo', missing_req[0]) |
+ self.assertEquals(1, missing_req[1]) |
def testGetMissingRequires_provided(self): |
"""Tests that provided namespaces satisfy identifiers on that namespace.""" |
@@ -357,22 +371,27 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo\');', |
'package.Foo.methodName();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingRequires())) |
def testGetMissingRequires_created(self): |
"""Tests that created namespaces do not satisfy usage of an identifier.""" |
input_lines = [ |
'package.Foo = function();', |
- 'package.Foo.methodName();' |
+ 'package.Foo.methodName();', |
+ 'package.Foo.anotherMethodName1();', |
+ 'package.Foo.anotherMethodName2();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
- self.assertEquals(1, len(namespaces_info.GetMissingRequires())) |
- self.assertTrue('package.Foo' in namespaces_info.GetMissingRequires()) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
+ |
+ missing_requires = namespaces_info.GetMissingRequires() |
+ self.assertEquals(1, len(missing_requires)) |
+ missing_require = missing_requires.popitem() |
+ self.assertEquals('package.Foo', missing_require[0]) |
+ # Make sure line number of first occurrence is reported |
+ self.assertEquals(2, missing_require[1]) |
def testGetMissingRequires_createdIdentifier(self): |
"""Tests that created identifiers satisfy usage of the identifier.""" |
@@ -380,9 +399,8 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'package.Foo.methodName = function();', |
'package.Foo.methodName();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(0, len(namespaces_info.GetMissingRequires())) |
def testGetMissingRequires_objectOnClass(self): |
@@ -391,11 +409,49 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.require(\'package.Foo.Enum\');', |
'var x = package.Foo.Enum.VALUE1;', |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['package']) |
self.assertEquals(1, len(namespaces_info.GetMissingRequires()), |
- 'The whole class, not the object, should be required.'); |
+ 'The whole class, not the object, should be required.') |
+ |
+ def testGetMissingRequires_variableWithSameName(self): |
+ """Tests that we should not goog.require variables and parameters. |
+ |
+ b/5362203 Variables in scope are not missing namespaces. |
+ """ |
+ input_lines = [ |
+ 'goog.provide(\'Foo\');', |
+ 'Foo.A = function();', |
+ 'Foo.A.prototype.method = function(ab) {', |
+ ' if (ab) {', |
+ ' var docs;', |
+ ' var lvalue = new Obj();', |
+ ' // Variable in scope hence not goog.require here.', |
+ ' docs.foo.abc = 1;', |
+ ' lvalue.next();', |
+ ' }', |
+ ' // Since js is function scope this should also not goog.require.', |
+ ' docs.foo.func();', |
+ ' // Its not a variable in scope hence goog.require.', |
+ ' dummy.xyz.reset();', |
+ ' return this.method2();', |
+ '};', |
+ 'Foo.A.prototype.method1 = function(docs, abcd, xyz) {', |
+ ' // Parameter hence not goog.require.', |
+ ' docs.nodes.length = 2;', |
+ ' lvalue.abc.reset();', |
+ '};' |
+ ] |
+ |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['Foo', |
+ 'docs', |
+ 'lvalue', |
+ 'dummy']) |
+ missing_requires = namespaces_info.GetMissingRequires() |
+ self.assertEquals(2, len(missing_requires)) |
+ self.assertItemsEqual( |
+ {'dummy.xyz': 14, |
+ 'lvalue.abc': 20}, missing_requires) |
def testIsFirstProvide(self): |
"""Tests operation of the isFirstProvide method.""" |
@@ -403,9 +459,9 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
'goog.provide(\'package.Foo\');', |
'package.Foo.methodName();' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = self._GetInitializedNamespacesInfo(token, ['package'], []) |
+ token, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ input_lines, ['package']) |
self.assertTrue(namespaces_info.IsFirstProvide(token)) |
def testGetWholeIdentifierString(self): |
@@ -415,13 +471,100 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
' veryLong.', |
' identifier;' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- namespaces_info = closurizednamespacesinfo.ClosurizedNamespacesInfo([], []) |
+ |
+ token = testutil.TokenizeSource(input_lines) |
self.assertEquals('package.Foo.veryLong.identifier', |
- namespaces_info._GetWholeIdentifierString(token)) |
+ tokenutil.GetIdentifierForToken(token)) |
+ |
self.assertEquals(None, |
- namespaces_info._GetWholeIdentifierString(token.next)) |
+ tokenutil.GetIdentifierForToken(token.next)) |
+ |
+ def testScopified(self): |
+ """Tests that a goog.scope call is noticed.""" |
+ input_lines = [ |
+ 'goog.scope(function() {', |
+ '});' |
+ ] |
+ |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['goog']) |
+ self.assertTrue(namespaces_info._scopified_file) |
+ |
+ def testScope_unusedAlias(self): |
+ """Tests that an used alias symbol doesn't result in a require.""" |
+ input_lines = [ |
+ 'goog.scope(function() {', |
+ 'var Event = goog.events.Event;', |
+ '});' |
+ ] |
+ |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['goog']) |
+ missing_requires = namespaces_info.GetMissingRequires() |
+ self.assertEquals({}, missing_requires) |
+ |
+ def testScope_usedAlias(self): |
+ """Tests that aliased symbols result in correct requires.""" |
+ input_lines = [ |
+ 'goog.scope(function() {', |
+ 'var Event = goog.events.Event;', |
+ 'var dom = goog.dom;', |
+ 'Event(dom.classes.get);', |
+ '});' |
+ ] |
+ |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['goog']) |
+ missing_requires = namespaces_info.GetMissingRequires() |
+ self.assertEquals({'goog.dom.classes': 4, 'goog.events.Event': 4}, |
+ missing_requires) |
+ |
+ def testScope_provides(self): |
+ """Tests that aliased symbols result in correct provides.""" |
+ input_lines = [ |
+ 'goog.scope(function() {', |
+ 'goog.bar = {};', |
+ 'var bar = goog.bar;', |
+ 'bar.Foo = {};', |
+ '});' |
+ ] |
+ |
+ namespaces_info = self._GetNamespacesInfoForScript(input_lines, ['goog']) |
+ missing_provides = namespaces_info.GetMissingProvides() |
+ self.assertEquals({'goog.bar.Foo': 4}, missing_provides) |
+ |
+ def testSetTestOnlyNamespaces(self): |
+ """Tests that a namespace in setTestOnly makes it a valid provide.""" |
+ namespaces_info = self._GetNamespacesInfoForScript([ |
+ 'goog.setTestOnly(\'goog.foo.barTest\');' |
+ ], ['goog']) |
+ |
+ token = self._GetProvideTokens('goog.foo.barTest') |
+ self.assertFalse(namespaces_info.IsExtraProvide(token)) |
+ |
+ token = self._GetProvideTokens('goog.foo.bazTest') |
+ self.assertTrue(namespaces_info.IsExtraProvide(token)) |
+ |
+ def testSetTestOnlyComment(self): |
+ """Ensure a comment in setTestOnly does not cause a created namespace.""" |
+ namespaces_info = self._GetNamespacesInfoForScript([ |
+ 'goog.setTestOnly(\'this is a comment\');' |
+ ], ['goog']) |
+ |
+ self.assertEquals( |
+ [], namespaces_info._created_namespaces, |
+ 'A comment in setTestOnly should not modify created namespaces.') |
+ |
+ def _GetNamespacesInfoForScript(self, script, closurized_namespaces=None): |
+ _, namespaces_info = self._GetStartTokenAndNamespacesInfoForScript( |
+ script, closurized_namespaces) |
+ |
+ return namespaces_info |
+ |
+ def _GetStartTokenAndNamespacesInfoForScript( |
+ self, script, closurized_namespaces): |
+ |
+ token = testutil.TokenizeSource(script) |
+ return token, self._GetInitializedNamespacesInfo( |
+ token, closurized_namespaces, []) |
def _GetInitializedNamespacesInfo(self, token, closurized_namespaces, |
ignored_extra_namespaces): |
@@ -431,8 +574,16 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
ignored_extra_namespaces=ignored_extra_namespaces) |
state_tracker = javascriptstatetracker.JavaScriptStateTracker() |
+ ecma_pass = ecmametadatapass.EcmaMetaDataPass() |
+ ecma_pass.Process(token) |
+ |
+ alias_pass = aliaspass.AliasPass(closurized_namespaces) |
+ alias_pass.Process(token) |
+ |
while token: |
+ state_tracker.HandleToken(token, state_tracker.GetLastNonSpaceToken()) |
namespaces_info.ProcessToken(token, state_tracker) |
+ state_tracker.HandleAfterToken(token) |
token = token.next |
return namespaces_info |
@@ -440,12 +591,12 @@ class ClosurizedNamespacesInfoTest(googletest.TestCase): |
def _GetProvideTokens(self, namespace): |
"""Returns a list of tokens for a goog.require of the given namespace.""" |
line_text = 'goog.require(\'' + namespace + '\');\n' |
- return javascripttokenizer.JavaScriptTokenizer().TokenizeFile([line_text]) |
+ return testutil.TokenizeSource([line_text]) |
def _GetRequireTokens(self, namespace): |
"""Returns a list of tokens for a goog.require of the given namespace.""" |
line_text = 'goog.require(\'' + namespace + '\');\n' |
- return javascripttokenizer.JavaScriptTokenizer().TokenizeFile([line_text]) |
+ return testutil.TokenizeSource([line_text]) |
if __name__ == '__main__': |
googletest.main() |