|  | #!/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 glob | 
|  | import unittest | 
|  |  | 
|  | from idl_lexer import IDLLexer | 
|  | from idl_parser import IDLParser, ParseFile | 
|  | from idl_ppapi_lexer import IDLPPAPILexer | 
|  | from idl_ppapi_parser import IDLPPAPIParser | 
|  |  | 
|  | def ParseCommentTest(comment): | 
|  | comment = comment.strip() | 
|  | comments = comment.split(None, 1) | 
|  | return comments[0], comments[1] | 
|  |  | 
|  |  | 
|  | class WebIDLParser(unittest.TestCase): | 
|  | def setUp(self): | 
|  | self.parser = IDLParser(IDLLexer(), mute_error=True) | 
|  | self.filenames = glob.glob('test_parser/*_web.idl') | 
|  |  | 
|  | def _TestNode(self, node): | 
|  | comments = node.GetListOf('Comment') | 
|  | for comment in comments: | 
|  | check, value = ParseCommentTest(comment.GetName()) | 
|  | if check == 'BUILD': | 
|  | msg = 'Expecting %s, but found %s.\n' % (value, str(node)) | 
|  | self.assertEqual(value, str(node), msg) | 
|  |  | 
|  | if check == 'ERROR': | 
|  | msg = node.GetLogLine('Expecting\n\t%s\nbut found \n\t%s\n' % ( | 
|  | value, str(node))) | 
|  | self.assertEqual(value, node.GetName(), msg) | 
|  |  | 
|  | if check == 'PROP': | 
|  | key, expect = value.split('=') | 
|  | actual = str(node.GetProperty(key)) | 
|  | msg = 'Mismatched property %s: %s vs %s.\n' % (key, expect, actual) | 
|  | self.assertEqual(expect, actual, msg) | 
|  |  | 
|  | if check == 'TREE': | 
|  | quick = '\n'.join(node.Tree()) | 
|  | lineno = node.GetProperty('LINENO') | 
|  | msg = 'Mismatched tree at line %d:\n%sVS\n%s' % (lineno, value, quick) | 
|  | self.assertEqual(value, quick, msg) | 
|  |  | 
|  | def testExpectedNodes(self): | 
|  | for filename in self.filenames: | 
|  | filenode = ParseFile(self.parser, filename) | 
|  | children = filenode.GetChildren() | 
|  | self.assertTrue(len(children) > 2, 'Expecting children in %s.' % | 
|  | filename) | 
|  |  | 
|  | for node in filenode.GetChildren()[2:]: | 
|  | self._TestNode(node) | 
|  |  | 
|  |  | 
|  | class PepperIDLParser(unittest.TestCase): | 
|  | def setUp(self): | 
|  | self.parser = IDLPPAPIParser(IDLPPAPILexer(), mute_error=True) | 
|  | self.filenames = glob.glob('test_parser/*_ppapi.idl') | 
|  |  | 
|  | def _TestNode(self, filename, node): | 
|  | comments = node.GetListOf('Comment') | 
|  | for comment in comments: | 
|  | check, value = ParseCommentTest(comment.GetName()) | 
|  | if check == 'BUILD': | 
|  | msg = '%s - Expecting %s, but found %s.\n' % ( | 
|  | filename, value, str(node)) | 
|  | self.assertEqual(value, str(node), msg) | 
|  |  | 
|  | if check == 'ERROR': | 
|  | msg = node.GetLogLine('%s - Expecting\n\t%s\nbut found \n\t%s\n' % ( | 
|  | filename, value, str(node))) | 
|  | self.assertEqual(value, node.GetName(), msg) | 
|  |  | 
|  | if check == 'PROP': | 
|  | key, expect = value.split('=') | 
|  | actual = str(node.GetProperty(key)) | 
|  | msg = '%s - Mismatched property %s: %s vs %s.\n' % ( | 
|  | filename, key, expect, actual) | 
|  | self.assertEqual(expect, actual, msg) | 
|  |  | 
|  | if check == 'TREE': | 
|  | quick = '\n'.join(node.Tree()) | 
|  | lineno = node.GetProperty('LINENO') | 
|  | msg = '%s - Mismatched tree at line %d:\n%sVS\n%s' % ( | 
|  | filename, lineno, value, quick) | 
|  | self.assertEqual(value, quick, msg) | 
|  |  | 
|  | def testExpectedNodes(self): | 
|  | for filename in self.filenames: | 
|  | filenode = ParseFile(self.parser, filename) | 
|  | children = filenode.GetChildren() | 
|  | self.assertTrue(len(children) > 2, 'Expecting children in %s.' % | 
|  | filename) | 
|  |  | 
|  | for node in filenode.GetChildren()[2:]: | 
|  | self._TestNode(filename, node) | 
|  |  | 
|  | if __name__ == '__main__': | 
|  | unittest.main(verbosity=2) | 
|  |  |