#!/usr/bin/env python # Copyright (c) 2013 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. import os import unittest from idl_lexer import IDLLexer from idl_ppapi_lexer import IDLPPAPILexer # # FileToTokens # # From a source file generate a list of tokens. # def FileToTokens(lexer, filename): with open(filename, 'rb') as srcfile: lexer.Tokenize(srcfile.read(), filename) return lexer.GetTokens() # # TextToTokens # # From a source file generate a list of tokens. # def TextToTokens(lexer, text): lexer.Tokenize(text) return lexer.GetTokens() class WebIDLLexer(unittest.TestCase): def setUp(self): self.lexer = IDLLexer() cur_dir = os.path.dirname(os.path.realpath(__file__)) self.filenames = [ os.path.join(cur_dir, 'test_lexer/values.in'), os.path.join(cur_dir, 'test_lexer/keywords.in') ] # # testRebuildText # # From a set of tokens, generate a new source text by joining with a # single space. The new source is then tokenized and compared against the # old set. # def testRebuildText(self): for filename in self.filenames: tokens1 = FileToTokens(self.lexer, filename) to_text = '\n'.join(['%s' % t.value for t in tokens1]) tokens2 = TextToTokens(self.lexer, to_text) count1 = len(tokens1) count2 = len(tokens2) self.assertEqual(count1, count2) for i in range(count1): msg = 'Value %s does not match original %s on line %d of %s.' % ( tokens2[i].value, tokens1[i].value, tokens1[i].lineno, filename) self.assertEqual(tokens1[i].value, tokens2[i].value, msg) # # testExpectedType # # From a set of tokens pairs, verify the type field of the second matches # the value of the first, so that: # integer 123 float 1.1 ... # will generate a passing test, when the first token has both the type and # value of the keyword integer and the second has the type of integer and # value of 123 and so on. # def testExpectedType(self): for filename in self.filenames: tokens = FileToTokens(self.lexer, filename) count = len(tokens) self.assertTrue(count > 0) self.assertFalse(count & 1) index = 0 while index < count: expect_type = tokens[index].value actual_type = tokens[index + 1].type msg = 'Type %s does not match expected %s on line %d of %s.' % ( actual_type, expect_type, tokens[index].lineno, filename) index += 2 self.assertEqual(expect_type, actual_type, msg) class PepperIDLLexer(WebIDLLexer): def setUp(self): self.lexer = IDLPPAPILexer() cur_dir = os.path.dirname(os.path.realpath(__file__)) self.filenames = [ os.path.join(cur_dir, 'test_lexer/values_ppapi.in'), os.path.join(cur_dir, 'test_lexer/keywords_ppapi.in') ] if __name__ == '__main__': unittest.main()