12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python 22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2008 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"""Medium tests for the gpylint auto-fixer.""" 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis__author__ = 'robbyw@google.com (Robby Walker)' 202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport StringIO 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport gflags as flags 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest as googletest 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import checker 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter import error_fixer 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis_RESOURCE_PREFIX = 'closure_linter/testdata' 292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 302da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.strict = True 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.limited_doc_files = ('dummy.js', 'externs.js') 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennisflags.FLAGS.closurized_namespaces = ('goog', 'dummy') 332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass FixJsStyleTest(googletest.TestCase): 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Test case to for gjslint auto-fixing.""" 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testFixJsStyle(self): 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis test_cases = [['fixjsstyle.in.js', 'fixjsstyle.out.js'], 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ['indentation.js', 'fixjsstyle.indentation.out.js']] 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for [running_input_file, running_output_file] in test_cases: 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_filename = None 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis golden_filename = None 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis current_filename = None 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis try: 462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis input_filename = '%s/%s' % (_RESOURCE_PREFIX, running_input_file) 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis current_filename = input_filename 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis golden_filename = '%s/%s' % (_RESOURCE_PREFIX, running_output_file) 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis current_filename = golden_filename 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis except IOError, ex: 522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis raise IOError('Could not find testdata resource for %s: %s' % 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis (current_filename, ex)) 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if running_input_file == 'fixjsstyle.in.js': 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis with open(input_filename) as f: 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for line in f: 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Go to last line. 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis pass 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(line == line.rstrip(), '%s file should not end ' 612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'with a new line.' % (input_filename)) 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Autofix the file, sending output to a fake file. 642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual = StringIO.StringIO() 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis style_checker = checker.JavaScriptStyleChecker( 662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis error_fixer.ErrorFixer(actual)) 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis style_checker.Check(input_filename) 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Now compare the files. 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual.seek(0) 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = open(golden_filename, 'r') 722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEqual(actual.readlines(), expected.readlines()) 742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testMissingExtraAndUnsortedRequires(self): 762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests handling of missing extra and unsorted goog.require statements.""" 772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.aa');", 792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Cc');", 802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Dd');", 812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "var x = new dummy.Bb();", 832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Cc.someMethod();", 842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.aa.someMethod();", 852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Bb');", 892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Cc');", 902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.aa');", 912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "var x = new dummy.Bb();", 932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Cc.someMethod();", 942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.aa.someMethod();", 952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testMissingExtraAndUnsortedProvides(self): 1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests handling of missing extra and unsorted goog.provide statements.""" 1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.aa');", 1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Cc');", 1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Dd');", 1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Cc = function() {};", 1072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Bb = function() {};", 1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.aa.someMethod = function();", 1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 1122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Bb');", 1132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Cc');", 1142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.aa');", 1152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Cc = function() {};", 1172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Bb = function() {};", 1182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.aa.someMethod = function();", 1192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 1222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testNoRequires(self): 1242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests positioning of missing requires without existing requires.""" 1252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 1262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Something');", 1272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Something = function() {};", 1292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "var x = new dummy.Bb();", 1312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 1342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Something');", 1352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Bb');", 1372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Something = function() {};", 1392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "var x = new dummy.Bb();", 1412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 1442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testNoProvides(self): 1462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests positioning of missing provides without existing provides.""" 1472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 1482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Bb');", 1492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Something = function() {};", 1512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "var x = new dummy.Bb();", 1532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 1562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.provide('dummy.Something');", 1572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "goog.require('dummy.Bb');", 1592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "dummy.Something = function() {};", 1612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 1622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "var x = new dummy.Bb();", 1632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 1662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testGoogScopeIndentation(self): 1682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests Handling a typical end-of-scope indentation fix.""" 1692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 1702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 1712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ' // TODO(brain): Take over the world.', 1722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '}); // goog.scope', 1732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 1762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 1772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '// TODO(brain): Take over the world.', 1782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '}); // goog.scope', 1792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 1822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testMissingEndOfScopeComment(self): 1842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests Handling a missing comment at end of goog.scope.""" 1852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 1862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 1872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '});', 1882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 1912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 1922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '}); // goog.scope', 1932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 1942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 1962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testMissingEndOfScopeCommentWithOtherComment(self): 1982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests handling an irrelevant comment at end of goog.scope.""" 1992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 2002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 2012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "}); // I don't belong here!", 2022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 2052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 2062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '}); // goog.scope', 2072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 2102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testMalformedEndOfScopeComment(self): 2122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Tests Handling a malformed comment at end of goog.scope.""" 2132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = [ 2142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 2152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '}); // goog.scope FTW', 2162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [ 2192da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 'goog.scope(function() {', 2202da489cd246702bee5938545b18a6f710ed214bcJamie Gennis '}); // goog.scope', 2212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2232da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self._AssertFixes(original, expected) 2242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def _AssertFixes(self, original, expected): 2262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Asserts that the error fixer corrects original to expected.""" 2272da489cd246702bee5938545b18a6f710ed214bcJamie Gennis original = self._GetHeader() + original 2282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = self._GetHeader() + expected 2292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual = StringIO.StringIO() 2312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis style_checker = checker.JavaScriptStyleChecker( 2322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis error_fixer.ErrorFixer(actual)) 2332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis style_checker.CheckLines('testing.js', original, False) 2342da489cd246702bee5938545b18a6f710ed214bcJamie Gennis actual.seek(0) 2352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis expected = [x + '\n' for x in expected] 2372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertListEqual(actual.readlines(), expected) 2392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def _GetHeader(self): 2412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis """Returns a fake header for a JavaScript file.""" 2422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return [ 2432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "// Copyright 2011 Google Inc. All Rights Reserved.", 2442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "", 2452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "/**", 2462da489cd246702bee5938545b18a6f710ed214bcJamie Gennis " * @fileoverview Fake file overview.", 2472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis " * @author fake@google.com (Fake Person)", 2482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis " */", 2492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis "" 2502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ] 2512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 2532da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__': 2542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis googletest.main() 255