Index: third_party/closure_linter/closure_linter/requireprovidesorter_test.py |
diff --git a/third_party/closure_linter/closure_linter/requireprovidesorter_test.py b/third_party/closure_linter/closure_linter/requireprovidesorter_test.py |
index d1d61dc586957997048e59c2721803f9994c42d3..fecb6d04dad9cebf6633428b20371471eda5f06c 100644 |
--- a/third_party/closure_linter/closure_linter/requireprovidesorter_test.py |
+++ b/third_party/closure_linter/closure_linter/requireprovidesorter_test.py |
@@ -19,20 +19,58 @@ |
import unittest as googletest |
-from closure_linter import ecmametadatapass |
-from closure_linter import javascripttokenizer |
from closure_linter import javascripttokens |
from closure_linter import requireprovidesorter |
+from closure_linter import testutil |
-# pylint: disable-msg=C6409 |
+# pylint: disable=g-bad-name |
TokenType = javascripttokens.JavaScriptTokenType |
class RequireProvideSorterTest(googletest.TestCase): |
"""Tests for RequireProvideSorter.""" |
- _tokenizer = javascripttokenizer.JavaScriptTokenizer() |
- _metadata_pass = ecmametadatapass.EcmaMetaDataPass() |
+ def testGetFixedProvideString(self): |
+ """Tests that fixed string constains proper comments also.""" |
+ input_lines = [ |
+ 'goog.provide(\'package.xyz\');', |
+ '/** @suppress {extraprovide} **/', |
+ 'goog.provide(\'package.abcd\');' |
+ ] |
+ |
+ expected_lines = [ |
+ '/** @suppress {extraprovide} **/', |
+ 'goog.provide(\'package.abcd\');', |
+ 'goog.provide(\'package.xyz\');' |
+ ] |
+ |
+ token = testutil.TokenizeSourceAndRunEcmaPass(input_lines) |
+ |
+ sorter = requireprovidesorter.RequireProvideSorter() |
+ fixed_provide_string = sorter.GetFixedProvideString(token) |
+ |
+ self.assertEquals(expected_lines, fixed_provide_string.splitlines()) |
+ |
+ def testGetFixedRequireString(self): |
+ """Tests that fixed string constains proper comments also.""" |
+ input_lines = [ |
+ 'goog.require(\'package.xyz\');', |
+ '/** This is needed for scope. **/', |
+ 'goog.require(\'package.abcd\');' |
+ ] |
+ |
+ expected_lines = [ |
+ '/** This is needed for scope. **/', |
+ 'goog.require(\'package.abcd\');', |
+ 'goog.require(\'package.xyz\');' |
+ ] |
+ |
+ token = testutil.TokenizeSourceAndRunEcmaPass(input_lines) |
+ |
+ sorter = requireprovidesorter.RequireProvideSorter() |
+ fixed_require_string = sorter.GetFixedRequireString(token) |
+ |
+ self.assertEquals(expected_lines, fixed_require_string.splitlines()) |
def testFixRequires_removeBlankLines(self): |
"""Tests that blank lines are omitted in sorted goog.require statements.""" |
@@ -49,15 +87,58 @@ class RequireProvideSorterTest(googletest.TestCase): |
'goog.require(\'package.subpackage.ClassA\');', |
'goog.require(\'package.subpackage.ClassB\');' |
] |
- token = self._tokenizer.TokenizeFile(input_lines) |
- self._metadata_pass.Reset() |
- self._metadata_pass.Process(token) |
+ token = testutil.TokenizeSourceAndRunEcmaPass(input_lines) |
+ |
+ sorter = requireprovidesorter.RequireProvideSorter() |
+ sorter.FixRequires(token) |
+ |
+ self.assertEquals(expected_lines, self._GetLines(token)) |
+ |
+ def fixRequiresTest_withTestOnly(self, position): |
+ """Regression-tests sorting even with a goog.setTestOnly statement. |
+ |
+ Args: |
+ position: The position in the list where to insert the goog.setTestOnly |
+ statement. Will be used to test all possible combinations for |
+ this test. |
+ """ |
+ input_lines = [ |
+ 'goog.provide(\'package.subpackage.Whatever\');', |
+ '', |
+ 'goog.require(\'package.subpackage.ClassB\');', |
+ 'goog.require(\'package.subpackage.ClassA\');' |
+ ] |
+ expected_lines = [ |
+ 'goog.provide(\'package.subpackage.Whatever\');', |
+ '', |
+ 'goog.require(\'package.subpackage.ClassA\');', |
+ 'goog.require(\'package.subpackage.ClassB\');' |
+ ] |
+ input_lines.insert(position, 'goog.setTestOnly();') |
+ expected_lines.insert(position, 'goog.setTestOnly();') |
+ |
+ token = testutil.TokenizeSourceAndRunEcmaPass(input_lines) |
sorter = requireprovidesorter.RequireProvideSorter() |
sorter.FixRequires(token) |
self.assertEquals(expected_lines, self._GetLines(token)) |
+ def testFixRequires_withTestOnly(self): |
+ """Regression-tests sorting even after a goog.setTestOnly statement.""" |
+ |
+ # goog.setTestOnly at first line. |
+ self.fixRequiresTest_withTestOnly(position=0) |
+ |
+ # goog.setTestOnly after goog.provide. |
+ self.fixRequiresTest_withTestOnly(position=1) |
+ |
+ # goog.setTestOnly before goog.require. |
+ self.fixRequiresTest_withTestOnly(position=2) |
+ |
+ # goog.setTestOnly after goog.require. |
+ self.fixRequiresTest_withTestOnly(position=4) |
+ |
def _GetLines(self, token): |
"""Returns an array of lines based on the specified token stream.""" |
lines = [] |