880f4d814a
Review URL: https://chromiumcodereview.appspot.com//10913125 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@12082 260f80e4-7a28-3924-810f-c04153c831b5
117 lines
2.7 KiB
Dart
117 lines
2.7 KiB
Dart
// 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.
|
|
|
|
#library('idlparser_test');
|
|
#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 (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 (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();
|
|
}
|