Index: third_party/closure_linter/closure_linter/scopeutil_test.py |
diff --git a/third_party/closure_linter/closure_linter/scopeutil_test.py b/third_party/closure_linter/closure_linter/scopeutil_test.py |
deleted file mode 100644 |
index 722a95390022de6d9d26ee4c2ab992128ff28cfe..0000000000000000000000000000000000000000 |
--- a/third_party/closure_linter/closure_linter/scopeutil_test.py |
+++ /dev/null |
@@ -1,222 +0,0 @@ |
-#!/usr/bin/env python |
-# |
-# Copyright 2012 The Closure Linter Authors. All Rights Reserved. |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS-IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
- |
-"""Unit tests for the scopeutil module.""" |
- |
-# Allow non-Google copyright |
-# pylint: disable=g-bad-file-header |
- |
-__author__ = ('nnaze@google.com (Nathan Naze)') |
- |
- |
-import unittest as googletest |
- |
-from closure_linter import ecmametadatapass |
-from closure_linter import scopeutil |
-from closure_linter import testutil |
- |
- |
-def _FindContexts(start_token): |
- """Depth first search of all contexts referenced by a token stream. |
- |
- Includes contexts' parents, which might not be directly referenced |
- by any token in the stream. |
- |
- Args: |
- start_token: First token in the token stream. |
- |
- Yields: |
- All contexts referenced by this token stream. |
- """ |
- |
- seen_contexts = set() |
- |
- # For each token, yield the context if we haven't seen it before. |
- for token in start_token: |
- |
- token_context = token.metadata.context |
- contexts = [token_context] |
- |
- # Also grab all the context's ancestors. |
- parent = token_context.parent |
- while parent: |
- contexts.append(parent) |
- parent = parent.parent |
- |
- # Yield each of these contexts if we've not seen them. |
- for context in contexts: |
- if context not in seen_contexts: |
- yield context |
- |
- seen_contexts.add(context) |
- |
- |
-def _FindFirstContextOfType(token, context_type): |
- """Returns the first statement context.""" |
- for context in _FindContexts(token): |
- if context.type == context_type: |
- return context |
- |
- |
-def _ParseAssignment(script): |
- start_token = testutil.TokenizeSourceAndRunEcmaPass(script) |
- statement = _FindFirstContextOfType( |
- start_token, ecmametadatapass.EcmaContext.VAR) |
- return statement |
- |
- |
-class StatementTest(googletest.TestCase): |
- |
- def assertAlias(self, expected_match, script): |
- statement = _ParseAssignment(script) |
- match = scopeutil.MatchAlias(statement) |
- self.assertEquals(expected_match, match) |
- |
- def assertModuleAlias(self, expected_match, script): |
- statement = _ParseAssignment(script) |
- match = scopeutil.MatchModuleAlias(statement) |
- self.assertEquals(expected_match, match) |
- |
- def testSimpleAliases(self): |
- self.assertAlias( |
- ('foo', 'goog.foo'), |
- 'var foo = goog.foo;') |
- |
- self.assertAlias( |
- ('foo', 'goog.foo'), |
- 'var foo = goog.foo') # No semicolon |
- |
- def testAliasWithComment(self): |
- self.assertAlias( |
- ('Component', 'goog.ui.Component'), |
- 'var Component = /* comment */ goog.ui.Component;') |
- |
- def testMultilineAlias(self): |
- self.assertAlias( |
- ('Component', 'goog.ui.Component'), |
- 'var Component = \n goog.ui.\n Component;') |
- |
- def testNonSymbolAliasVarStatements(self): |
- self.assertAlias(None, 'var foo = 3;') |
- self.assertAlias(None, 'var foo = function() {};') |
- self.assertAlias(None, 'var foo = bar ? baz : qux;') |
- |
- def testModuleAlias(self): |
- self.assertModuleAlias( |
- ('foo', 'goog.foo'), |
- 'var foo = goog.require("goog.foo");') |
- self.assertModuleAlias( |
- None, |
- 'var foo = goog.require(notastring);') |
- |
- |
-class ScopeBlockTest(googletest.TestCase): |
- |
- @staticmethod |
- def _GetBlocks(source): |
- start_token = testutil.TokenizeSourceAndRunEcmaPass(source) |
- for context in _FindContexts(start_token): |
- if context.type is ecmametadatapass.EcmaContext.BLOCK: |
- yield context |
- |
- def assertNoBlocks(self, script): |
- blocks = list(self._GetBlocks(script)) |
- self.assertEquals([], blocks) |
- |
- def testNotBlocks(self): |
- # Ensure these are not considered blocks. |
- self.assertNoBlocks('goog.scope(if{});') |
- self.assertNoBlocks('goog.scope(for{});') |
- self.assertNoBlocks('goog.scope(switch{});') |
- self.assertNoBlocks('goog.scope(function foo{});') |
- |
- def testNonScopeBlocks(self): |
- |
- blocks = list(self._GetBlocks('goog.scope(try{});')) |
- self.assertEquals(1, len(blocks)) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- |
- blocks = list(self._GetBlocks('goog.scope(function(a,b){});')) |
- self.assertEquals(1, len(blocks)) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- |
- blocks = list(self._GetBlocks('goog.scope(try{} catch(){});')) |
- # Two blocks: try and catch. |
- self.assertEquals(2, len(blocks)) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- |
- blocks = list(self._GetBlocks('goog.scope(try{} catch(){} finally {});')) |
- self.assertEquals(3, len(blocks)) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- self.assertFalse(scopeutil.IsGoogScopeBlock(blocks.pop())) |
- |
- |
-class AliasTest(googletest.TestCase): |
- |
- def setUp(self): |
- self.start_token = testutil.TokenizeSourceAndRunEcmaPass(_TEST_SCRIPT) |
- |
- def testMatchAliasStatement(self): |
- matches = set() |
- for context in _FindContexts(self.start_token): |
- match = scopeutil.MatchAlias(context) |
- if match: |
- matches.add(match) |
- |
- self.assertEquals( |
- set([('bar', 'baz'), |
- ('foo', 'this.foo_'), |
- ('Component', 'goog.ui.Component'), |
- ('MyClass', 'myproject.foo.MyClass'), |
- ('NonClosurizedClass', 'aaa.bbb.NonClosurizedClass')]), |
- matches) |
- |
- def testMatchAliasStatement_withClosurizedNamespaces(self): |
- |
- closurized_namepaces = frozenset(['goog', 'myproject']) |
- |
- matches = set() |
- for context in _FindContexts(self.start_token): |
- match = scopeutil.MatchAlias(context) |
- if match: |
- unused_alias, symbol = match |
- if scopeutil.IsInClosurizedNamespace(symbol, closurized_namepaces): |
- matches.add(match) |
- |
- self.assertEquals( |
- set([('MyClass', 'myproject.foo.MyClass'), |
- ('Component', 'goog.ui.Component')]), |
- matches) |
- |
-_TEST_SCRIPT = """ |
-goog.scope(function() { |
- var Component = goog.ui.Component; // scope alias |
- var MyClass = myproject.foo.MyClass; // scope alias |
- |
- // Scope alias of non-Closurized namespace. |
- var NonClosurizedClass = aaa.bbb.NonClosurizedClass; |
- |
- var foo = this.foo_; // non-scope object property alias |
- var bar = baz; // variable alias |
- |
- var component = new Component(); |
-}); |
- |
-""" |
- |
-if __name__ == '__main__': |
- googletest.main() |