| Index: client/dom/scripts/idlparser_test.dart
|
| diff --git a/client/dom/scripts/idlparser_test.dart b/client/dom/scripts/idlparser_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..a8544c3c5d1038e77554ac73313b3b13ec640cbc
|
| --- /dev/null
|
| +++ b/client/dom/scripts/idlparser_test.dart
|
| @@ -0,0 +1,115 @@
|
| +// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +#import('../../../utils/peg/pegparser.dart');
|
| +#source('idlparser.dart');
|
| +#source('idlrenderer.dart');
|
| +
|
| +main() {
|
| + IDLParser parser = new IDLParser(FREMONTCUT_SYNTAX);
|
| + Grammar g = parser.grammar;
|
| +
|
| + var Type = g['Type'];
|
| +
|
| + show(g, Type, 'int');
|
| + show(g, Type, 'int ?');
|
| + show(g, Type, 'sequence<int?> ?');
|
| + show(g, Type, 'unsigned long long?');
|
| + show(g, Type, 'unsignedlonglong?');
|
| +
|
| +
|
| + var MaybeAnnotations = g['MaybeAnnotations'];
|
| +
|
| + show(g, MaybeAnnotations, '');
|
| + show(g, MaybeAnnotations, '@Foo');
|
| + show(g, MaybeAnnotations, '@Foo @Bar');
|
| + show(g, MaybeAnnotations, '@Foo(A,B=1) @Bar');
|
| +
|
| + var MaybeExtAttrs = g['MaybeExtAttrs'];
|
| + print(MaybeExtAttrs);
|
| +
|
| + show(g, MaybeExtAttrs, '');
|
| + show(g, MaybeExtAttrs, '[A]');
|
| +
|
| + var Module = g['Module'];
|
| +
|
| + show(g, Module, 'module Harry { const int bob = 30;};');
|
| + show(g, Module, """
|
| +module Harry { [X,Y,Z=99] const int bob = 30; typedef x y;
|
| +
|
| + interface Thing : SuperA, @Friendly SuperB {
|
| +
|
| + [Nice] const unsigned long long kFoo = 12345;
|
| + [A,B,C,D,E] attribute int attr1;
|
| + [F=f(int a),K=99,DartName=Bert] int smudge(int a, int b, double x);
|
| +
|
| + [X,Y,Z] int xyz([U,V] optional in optional int z);
|
| + [P,Q,R] int pqr();
|
| + int op1();
|
| + @Smurf @Beans(B=1,C,A=2) int op2();
|
| +
|
| + snippet { yadda
|
| + yadda
|
| + };
|
| + };
|
| +
|
| +//[A] const unsigned long long dweeb = 0xff;
|
| +
|
| +};
|
| +""");
|
| +}
|
| +
|
| +
|
| +
|
| +show(grammar, rule, input) {
|
| + print('show: "$input"');
|
| + var ast;
|
| + try {
|
| + ast = grammar.parse(rule, input);
|
| + } catch (var exception) {
|
| + if (exception is ParseError)
|
| + ast = exception;
|
| + else
|
| + throw;
|
| + }
|
| + print('${printList(ast)}');
|
| + print(render(ast));
|
| +}
|
| +
|
| +void check(grammar, rule, input, expected) {
|
| + // If [expected] is String then the result is coerced to string.
|
| + // If [expected] is !String, the result is compared directly.
|
| + print('check: "$input"');
|
| + var ast;
|
| + try {
|
| + ast = grammar.parse(rule, input);
|
| + } catch (var exception) {
|
| + ast = exception;
|
| + }
|
| +
|
| + var formatted = ast;
|
| + if (expected is String)
|
| + formatted = printList(ast);
|
| +
|
| + Expect.equals(expected, formatted, "parse: $input");
|
| +}
|
| +
|
| +// Prints the list in [1,2,3] notation, including nested lists.
|
| +void printList(item) {
|
| + if (item is List) {
|
| + StringBuffer sb = new StringBuffer();
|
| + sb.add('[');
|
| + var sep = '';
|
| + for (var x in item) {
|
| + sb.add(sep);
|
| + sb.add(printList(x));
|
| + sep = ',';
|
| + }
|
| + sb.add(']');
|
| + return sb.toString();
|
| + }
|
| + if (item == null)
|
| + return 'null';
|
| + return item.toString();
|
| +}
|
|
|