Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(429)

Side by Side Diff: tools/dom/scripts/idlparser_test.py

Issue 609403004: Removed old IDL parser and peg parser code. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: More code cleanup Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/dom/scripts/idlparser.py ('k') | tools/dom/scripts/pegparser.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file.
5
6 import idlparser
7 import logging.config
8 import sys
9 import unittest
10
11
12 class IDLParserTestCase(unittest.TestCase):
13
14 def _run_test(self, syntax, content, expected):
15 """Utility for running a IDL parsing tests and comparing results.
16
17 Program exits (sys.exit) if expected does not match actual.
18
19 Args:
20 syntax -- IDL grammar to use (either idlparser.WEBKIT_SYNTAX,
21 WEBIDL_SYNTAX or FREMONTCUT_SYNTAX). If None, will run
22 multiple tests, each with a different syntax.
23 content -- input text for the parser.
24 expected -- expected parse result.
25 """
26
27 all_syntaxes = {idlparser.WEBIDL_SYNTAX: 'Web IDL',
28 idlparser.WEBKIT_SYNTAX: 'WebKit',
29 idlparser.FREMONTCUT_SYNTAX: 'FremontCut'}
30
31 if syntax is None:
32 for syntax in all_syntaxes:
33 self._run_test(syntax, content, expected)
34 return
35
36 if syntax not in all_syntaxes:
37 raise RuntimeError('Unexpected syntax %s' % syntax)
38
39 actual = None
40 error = None
41 try:
42 parser = idlparser.IDLParser(syntax)
43 actual = parser.parse(content)
44 except SyntaxError, e:
45 error = e
46 pass
47 if actual != expected:
48 self.fail('''
49 SYNTAX : %s
50 CONTENT :
51 %s
52 EXPECTED:
53 %s
54 ACTUAL :
55 %s
56 ERROR : %s''' % (all_syntaxes[syntax], content, expected, actual, error))
57
58 def test_empty_module(self):
59 self._run_test(
60 None,
61 'module M {};',
62 [('Module', [('Id', 'M')])])
63
64 def test_empty_interface(self):
65 self._run_test(
66 None,
67 'interface I {};',
68 [('Interface', [('Id', 'I')])])
69
70 def test_module_with_empty_interface(self):
71 self._run_test(
72 None,
73 'module M { interface I {}; };',
74 [('Module', [('Id', 'M'), ('Interface', [('Id', 'I')])])])
75
76 # testing the gcc pre-processing
77 def test_gcc_preprocessing(self):
78 self._run_test(
79 idlparser.WEBKIT_SYNTAX,
80 '''
81 #if 1
82 module M1 {};
83 #endif
84 #if 0
85 module M2 {};
86 #endif
87 ''',
88 [('Module', [('Id', 'M1')])])
89
90 def test_attribute_with_exceptoins(self):
91 self._run_test(
92 idlparser.WEBKIT_SYNTAX,
93 '''interface I {
94 attribute boolean A;
95 };''',
96 [('Interface', [('Id', 'I'), ('Attribute', [('Type', [('BooleanType', None )]), ('Id', 'A'), ('SetRaises', [('ScopedName', 'E')]), ('GetRaises', [('ScopedN ame', 'E')])])])])
97
98 def test_interface_with_extended_attributes(self):
99 self._run_test(
100 idlparser.WEBKIT_SYNTAX,
101 'interface [ExAt1, ExAt2] I {};',
102 [('Interface', [('ExtAttrs', [('ExtAttr', [('Id', 'ExAt1')]), ('ExtAttr', [('Id', 'ExAt2')])]), ('Id', 'I')])])
103
104 def test_implements_statement(self):
105 self._run_test(
106 idlparser.WEBIDL_SYNTAX,
107 'X implements Y;',
108 [('ImplStmt', [('ImplStmtImplementor', ('ScopedName', 'X')), ('ImplStmtImp lemented', ('ScopedName', 'Y'))])])
109
110 def test_operation(self):
111 self._run_test(
112 None,
113 'interface I { boolean func(); };',
114 [('Interface', [('Id', 'I'), ('Operation', [('ReturnType', [('BooleanType' , None)]), ('Id', 'func')])])])
115
116 def test_attribute_types(self):
117 self._run_test(
118 None,
119 '''interface I {
120 attribute boolean boolAttr;
121 attribute DOMString strAttr;
122 attribute SomeType someAttr;
123 };''',
124 [('Interface', [('Id', 'I'), ('Attribute', [('Type', [('BooleanType', None )]), ('Id', 'boolAttr')]), ('Attribute', [('Type', [('ScopedName', 'DOMString')] ), ('Id', 'strAttr')]), ('Attribute', [('Type', [('ScopedName', 'SomeType')]), ( 'Id', 'someAttr')])])])
125
126 def test_constants(self):
127 self._run_test(
128 None,
129 '''interface I {
130 const long c1 = 0;
131 const long c2 = 1;
132 const long c3 = 0x01;
133 const long c4 = 10;
134 const boolean b1 = true;
135 const boolean b1 = false;
136 };''',
137 [('Interface', [('Id', 'I'), ('Const', [('Type', [('LongType', None)]), (' Id', 'c1'), ('ConstExpr', '0')]), ('Const', [('Type', [('LongType', None)]), ('I d', 'c2'), ('ConstExpr', '1')]), ('Const', [('Type', [('LongType', None)]), ('Id ', 'c3'), ('ConstExpr', '0x01')]), ('Const', [('Type', [('LongType', None)]), (' Id', 'c4'), ('ConstExpr', '10')]), ('Const', [('Type', [('BooleanType', None)]), ('Id', 'b1'), ('ConstExpr', 'true')]), ('Const', [('Type', [('BooleanType', Non e)]), ('Id', 'b1'), ('ConstExpr', 'false')])])])
138
139 def test_inheritance(self):
140 self._run_test(
141 None,
142 '''
143 interface Shape {};
144 interface Rectangle : Shape {};
145 interface Square : Rectangle, Shape {};
146 ''',
147 [('Interface', [('Id', 'Shape')]), ('Interface', [('Id', 'Rectangle'), ('P arentInterface', [('InterfaceType', ('ScopedName', 'Shape'))])]), ('Interface', [('Id', 'Square'), ('ParentInterface', [('InterfaceType', ('ScopedName', 'Rectan gle'))]), ('ParentInterface', [('InterfaceType', ('ScopedName', 'Shape'))])])])
148
149 def test_annotations(self):
150 self._run_test(
151 idlparser.FREMONTCUT_SYNTAX,
152 '@Ano1 @Ano2() @Ano3(x) @Ano4(x=1,y=2) interface I {};',
153 [('Interface', [('Annotation', [('Id', 'Ano1')]), ('Annotation', [('Id', ' Ano2')]), ('Annotation', [('Id', 'Ano3'), ('AnnotationArg', [('Id', 'x')])]), (' Annotation', [('Id', 'Ano4'), ('AnnotationArg', [('Id', 'x'), ('AnnotationArgVal ue', '1')]), ('AnnotationArg', [('Id', 'y'), ('AnnotationArgValue', '2')])]), (' Id', 'I')])])
154
155
156 if __name__ == "__main__":
157 logging.config.fileConfig("logging.conf")
158 if __name__ == '__main__':
159 unittest.main()
OLDNEW
« no previous file with comments | « tools/dom/scripts/idlparser.py ('k') | tools/dom/scripts/pegparser.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698