12da489cd246702bee5938545b18a6f710ed214bcJamie Gennis#!/usr/bin/env python 22da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Copyright 2011 The Closure Linter Authors. All Rights Reserved. 32da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 42da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Licensed under the Apache License, Version 2.0 (the "License"); 52da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# you may not use this file except in compliance with the License. 62da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# You may obtain a copy of the License at 72da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 82da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# http://www.apache.org/licenses/LICENSE-2.0 92da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# 102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# Unless required by applicable law or agreed to in writing, software 112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# distributed under the License is distributed on an "AS-IS" BASIS, 122da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# See the License for the specific language governing permissions and 142da489cd246702bee5938545b18a6f710ed214bcJamie Gennis# limitations under the License. 152da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 162da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 172da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 182da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 192da489cd246702bee5938545b18a6f710ed214bcJamie Gennisimport unittest as googletest 202da489cd246702bee5938545b18a6f710ed214bcJamie Gennisfrom closure_linter.common import tokens 212da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 222da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 232da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef _CreateDummyToken(): 242da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return tokens.Token('foo', None, 1, 1) 252da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 262da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 272da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef _CreateDummyTokens(count): 282da489cd246702bee5938545b18a6f710ed214bcJamie Gennis dummy_tokens = [] 292da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for _ in xrange(count): 302da489cd246702bee5938545b18a6f710ed214bcJamie Gennis dummy_tokens.append(_CreateDummyToken()) 312da489cd246702bee5938545b18a6f710ed214bcJamie Gennis return dummy_tokens 322da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 332da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 342da489cd246702bee5938545b18a6f710ed214bcJamie Gennisdef _SetTokensAsNeighbors(neighbor_tokens): 352da489cd246702bee5938545b18a6f710ed214bcJamie Gennis for i in xrange(len(neighbor_tokens)): 362da489cd246702bee5938545b18a6f710ed214bcJamie Gennis prev_index = i - 1 372da489cd246702bee5938545b18a6f710ed214bcJamie Gennis next_index = i + 1 382da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 392da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if prev_index >= 0: 402da489cd246702bee5938545b18a6f710ed214bcJamie Gennis neighbor_tokens[i].previous = neighbor_tokens[prev_index] 412da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 422da489cd246702bee5938545b18a6f710ed214bcJamie Gennis if next_index < len(neighbor_tokens): 432da489cd246702bee5938545b18a6f710ed214bcJamie Gennis neighbor_tokens[i].next = neighbor_tokens[next_index] 442da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 452da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 462da489cd246702bee5938545b18a6f710ed214bcJamie Gennisclass TokensTest(googletest.TestCase): 472da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 482da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsFirstInLine(self): 492da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 502da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # First token in file (has no previous). 512da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(_CreateDummyToken().IsFirstInLine()) 522da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 532da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a, b = _CreateDummyTokens(2) 542da489cd246702bee5938545b18a6f710ed214bcJamie Gennis _SetTokensAsNeighbors([a, b]) 552da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 562da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Tokens on same line 572da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a.line_number = 30 582da489cd246702bee5938545b18a6f710ed214bcJamie Gennis b.line_number = 30 592da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 602da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(b.IsFirstInLine()) 612da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 622da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Tokens on different lines 632da489cd246702bee5938545b18a6f710ed214bcJamie Gennis b.line_number = 31 642da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(b.IsFirstInLine()) 652da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 662da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsLastInLine(self): 672da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Last token in file (has no next). 682da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(_CreateDummyToken().IsLastInLine()) 692da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 702da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a, b = _CreateDummyTokens(2) 712da489cd246702bee5938545b18a6f710ed214bcJamie Gennis _SetTokensAsNeighbors([a, b]) 722da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 732da489cd246702bee5938545b18a6f710ed214bcJamie Gennis # Tokens on same line 742da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a.line_number = 30 752da489cd246702bee5938545b18a6f710ed214bcJamie Gennis b.line_number = 30 762da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(a.IsLastInLine()) 772da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 782da489cd246702bee5938545b18a6f710ed214bcJamie Gennis b.line_number = 31 792da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(a.IsLastInLine()) 802da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 812da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsType(self): 822da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a = tokens.Token('foo', 'fakeType1', 1, 1) 832da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(a.IsType('fakeType1')) 842da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(a.IsType('fakeType2')) 852da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 862da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIsAnyType(self): 872da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a = tokens.Token('foo', 'fakeType1', 1, 1) 882da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertTrue(a.IsAnyType(['fakeType1', 'fakeType2'])) 892da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertFalse(a.IsAnyType(['fakeType3', 'fakeType4'])) 902da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 912da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testRepr(self): 922da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a = tokens.Token('foo', 'fakeType1', 1, 1) 932da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertEquals('<Token: fakeType1, "foo", None, 1, None>', str(a)) 942da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 952da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testIter(self): 962da489cd246702bee5938545b18a6f710ed214bcJamie Gennis dummy_tokens = _CreateDummyTokens(5) 972da489cd246702bee5938545b18a6f710ed214bcJamie Gennis _SetTokensAsNeighbors(dummy_tokens) 982da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a, b, c, d, e = dummy_tokens 992da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1002da489cd246702bee5938545b18a6f710ed214bcJamie Gennis i = iter(a) 1012da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertListEqual([a, b, c, d, e], list(i)) 1022da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1032da489cd246702bee5938545b18a6f710ed214bcJamie Gennis def testReverseIter(self): 1042da489cd246702bee5938545b18a6f710ed214bcJamie Gennis dummy_tokens = _CreateDummyTokens(5) 1052da489cd246702bee5938545b18a6f710ed214bcJamie Gennis _SetTokensAsNeighbors(dummy_tokens) 1062da489cd246702bee5938545b18a6f710ed214bcJamie Gennis a, b, c, d, e = dummy_tokens 1072da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1082da489cd246702bee5938545b18a6f710ed214bcJamie Gennis ri = reversed(e) 1092da489cd246702bee5938545b18a6f710ed214bcJamie Gennis self.assertListEqual([e, d, c, b, a], list(ri)) 1102da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1112da489cd246702bee5938545b18a6f710ed214bcJamie Gennis 1122da489cd246702bee5938545b18a6f710ed214bcJamie Gennisif __name__ == '__main__': 1132da489cd246702bee5938545b18a6f710ed214bcJamie Gennis googletest.main() 114