1 #!/usr/bin/env python 2 # Copyright (c) 2013 The Chromium Authors. All rights reserved. 3 # Use of this source code is governed by a BSD-style license that can be 4 # found in the LICENSE file. 5 6 import unittest 7 8 from idl_lexer import IDLLexer 9 from idl_ppapi_lexer import IDLPPAPILexer 10 11 # 12 # FileToTokens 13 # 14 # From a source file generate a list of tokens. 15 # 16 def FileToTokens(lexer, filename): 17 with open(filename, 'rb') as srcfile: 18 lexer.Tokenize(srcfile.read(), filename) 19 return lexer.GetTokens() 20 21 22 # 23 # TextToTokens 24 # 25 # From a source file generate a list of tokens. 26 # 27 def TextToTokens(lexer, text): 28 lexer.Tokenize(text) 29 return lexer.GetTokens() 30 31 32 class WebIDLLexer(unittest.TestCase): 33 def setUp(self): 34 self.lexer = IDLLexer() 35 self.filenames = [ 36 'test_lexer/values.in', 37 'test_lexer/keywords.in' 38 ] 39 40 # 41 # testRebuildText 42 # 43 # From a set of tokens, generate a new source text by joining with a 44 # single space. The new source is then tokenized and compared against the 45 # old set. 46 # 47 def testRebuildText(self): 48 for filename in self.filenames: 49 tokens1 = FileToTokens(self.lexer, filename) 50 to_text = '\n'.join(['%s' % t.value for t in tokens1]) 51 tokens2 = TextToTokens(self.lexer, to_text) 52 53 count1 = len(tokens1) 54 count2 = len(tokens2) 55 self.assertEqual(count1, count2) 56 57 for i in range(count1): 58 msg = 'Value %s does not match original %s on line %d of %s.' % ( 59 tokens2[i].value, tokens1[i].value, tokens1[i].lineno, filename) 60 self.assertEqual(tokens1[i].value, tokens2[i].value, msg) 61 62 # 63 # testExpectedType 64 # 65 # From a set of tokens pairs, verify the type field of the second matches 66 # the value of the first, so that: 67 # integer 123 float 1.1 ... 68 # will generate a passing test, when the first token has both the type and 69 # value of the keyword integer and the second has the type of integer and 70 # value of 123 and so on. 71 # 72 def testExpectedType(self): 73 for filename in self.filenames: 74 tokens = FileToTokens(self.lexer, filename) 75 count = len(tokens) 76 self.assertTrue(count > 0) 77 self.assertFalse(count & 1) 78 79 index = 0 80 while index < count: 81 expect_type = tokens[index].value 82 actual_type = tokens[index + 1].type 83 msg = 'Type %s does not match expected %s on line %d of %s.' % ( 84 actual_type, expect_type, tokens[index].lineno, filename) 85 index += 2 86 self.assertEqual(expect_type, actual_type, msg) 87 88 89 class PepperIDLLexer(WebIDLLexer): 90 def setUp(self): 91 self.lexer = IDLPPAPILexer() 92 self.filenames = [ 93 'test_lexer/values_ppapi.in', 94 'test_lexer/keywords_ppapi.in' 95 ] 96 97 98 if __name__ == '__main__': 99 unittest.main() 100