|  | // Copyright (c) 2012, 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 'package:expect/expect.dart'; | 
|  | import 'parser_helper.dart'; | 
|  | import 'package:compiler/src/tree/tree.dart'; | 
|  |  | 
|  | testUnparse(String statement) { | 
|  | Node node = parseStatement(statement); | 
|  | Expect.equals(statement, unparse(node)); | 
|  | } | 
|  |  | 
|  | testUnparseMember(String member) { | 
|  | Node node = parseMember(member); | 
|  | Expect.equals(member, unparse(node)); | 
|  | } | 
|  |  | 
|  | testUnparseUnit(String code) { | 
|  | Node node = fullParseUnit(code); | 
|  | Expect.equals(code, unparse(node)); | 
|  | } | 
|  |  | 
|  | testUnparseTopLevelWithMetadata(String code) { | 
|  | testUnparseUnit(code); | 
|  | // TODO(ahe): Enable when supported. | 
|  | // testUnparseUnit('@foo $code'); | 
|  | } | 
|  |  | 
|  | testSignedConstants() { | 
|  | testUnparse('var x=-42;'); | 
|  | testUnparse('var x=-.42;'); | 
|  | testUnparse('var x=-0;'); | 
|  | testUnparse('var x=-0.0;'); | 
|  | testUnparse('var x=-.0;'); | 
|  | } | 
|  |  | 
|  | testGenericTypes() { | 
|  | testUnparse('var x=new List<List<int>>();'); | 
|  | testUnparse('var x=new List<List<List<int>>>();'); | 
|  | testUnparse('var x=new List<List<List<List<int>>>>();'); | 
|  | testUnparse('var x=new List<List<List<List<List<int>>>>>();'); | 
|  | } | 
|  |  | 
|  | testForLoop() { | 
|  | testUnparse('for(;i<100;i++ ){}'); | 
|  | testUnparse('for(i=0;i<100;i++ ){}'); | 
|  | } | 
|  |  | 
|  | testEmptyList() { | 
|  | testUnparse('var x=[] ;'); | 
|  | } | 
|  |  | 
|  | testClosure() { | 
|  | testUnparse('var x=(var x)=>x;'); | 
|  | } | 
|  |  | 
|  | testIndexedOperatorDecl() { | 
|  | testUnparseMember('operator[](int i)=>null;'); | 
|  | testUnparseMember('operator[]=(int i,int j)=>null;'); | 
|  | } | 
|  |  | 
|  | testNativeMethods() { | 
|  | testUnparseMember('foo()native;'); | 
|  | testUnparseMember('foo()native "bar";'); | 
|  | testUnparseMember('foo()native "this.x = 41";'); | 
|  | } | 
|  |  | 
|  | testPrefixIncrements() { | 
|  | testUnparse(' ++i;'); | 
|  | testUnparse(' ++a[i];'); | 
|  | testUnparse(' ++a[ ++b[i]];'); | 
|  | } | 
|  |  | 
|  | testConstModifier() { | 
|  | testUnparse('foo([var a=const[] ]){}'); | 
|  | testUnparse('foo([var a=const{}]){}'); | 
|  | testUnparse('foo(){var a=const[] ;var b=const{};}'); | 
|  | testUnparse('foo([var a=const[const{"a":const[1,2,3]}]]){}'); | 
|  | } | 
|  |  | 
|  | testSimpleObjectInstantiation() { | 
|  | testUnparse('main(){new Object();}'); | 
|  | } | 
|  |  | 
|  | testLibraryName() { | 
|  | testUnparseTopLevelWithMetadata('library com;'); | 
|  | testUnparseTopLevelWithMetadata('library com.example;'); | 
|  | testUnparseTopLevelWithMetadata('library com.example.dart;'); | 
|  | } | 
|  |  | 
|  | testImport() { | 
|  | testUnparseTopLevelWithMetadata('import "søhest";'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest;'); | 
|  | } | 
|  |  | 
|  | testExport() { | 
|  | testUnparseTopLevelWithMetadata('export "søhest";'); | 
|  | } | 
|  |  | 
|  | testConditionalImport() { | 
|  | testUnparseTopLevelWithMetadata('import "søhest" if(some.dotted.id)"other";'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" if(id=="some str")"other";'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest"' | 
|  | ' if(id=="some str")"other"' | 
|  | ' if(id)"other2";'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" if(some.dotted.id)"other" as fiskehest;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" if(id=="some str")"other" as fiskehest;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest"' | 
|  | ' if(id=="some str")"other"' | 
|  | ' if(id)"other2"' | 
|  | ' as fiskehest;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" if(some.dotted.id)"other" deferred as fiskehest;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" if(id=="some str")"other" deferred as fiskehest;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest"' | 
|  | ' if(id=="some str")"other"' | 
|  | ' if(id)"other2"' | 
|  | ' deferred as fiskehest;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest"' | 
|  | ' if(id=="some str")"other"' | 
|  | ' if(id)"other2"' | 
|  | ' deferred as fiskehest' | 
|  | ' show foo,bar;'); | 
|  | } | 
|  |  | 
|  | testConditionalExport() { | 
|  | testUnparseTopLevelWithMetadata('export "søhest" if(some.dotted.id)"other";'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" if(id=="some str")"other";'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest"' | 
|  | ' if(id=="some str")"other"' | 
|  | ' if(id)"other2";'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest"' | 
|  | ' if(id=="some str")"other"' | 
|  | ' if(id)"other2"' | 
|  | ' show foo,bar;'); | 
|  | } | 
|  |  | 
|  | testPart() { | 
|  | testUnparseTopLevelWithMetadata('part "søhest";'); | 
|  | } | 
|  |  | 
|  | testPartOf() { | 
|  | testUnparseTopLevelWithMetadata('part of com;'); | 
|  | testUnparseTopLevelWithMetadata('part of com.example;'); | 
|  | testUnparseTopLevelWithMetadata('part of com.example.dart;'); | 
|  | } | 
|  |  | 
|  | testCombinators() { | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest show a;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest show hide;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest show show;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest show a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest show a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest hide a;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest hide hide;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest hide show;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest hide a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('import "søhest" as fiskehest hide a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show a hide a;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show hide hide hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show show hide show;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show a,hide hide a,hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show a,show hide a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide a show a;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide hide show hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide show show show;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide a,hide show a,hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide a,show show a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show a show a;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show hide show hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show show show show;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show a,hide show a,hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest show a,show show a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide a hide a;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide hide hide hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide show hide show;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide a,hide hide a,hide;'); | 
|  | testUnparseTopLevelWithMetadata( | 
|  | 'import "søhest" as fiskehest hide a,show hide a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show show;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide show;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a hide a;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show hide hide hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show show hide show;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a,hide hide a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a,show hide a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a show a;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide hide show hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide show show show;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a,hide show a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a,show show a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a show a;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show hide show hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show show show show;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a,hide show a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" show a,show show a,show;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a hide a;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide hide hide hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide show hide show;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a,hide hide a,hide;'); | 
|  | testUnparseTopLevelWithMetadata('export "søhest" hide a,show hide a,show;'); | 
|  | } | 
|  |  | 
|  | testDeferredImport() { | 
|  | testUnparseTopLevelWithMetadata('import "lib.dart" as a;'); | 
|  | testUnparseTopLevelWithMetadata('import "lib.dart" deferred as a;'); | 
|  | testUnparseTopLevelWithMetadata('import "lib.dart" deferred as a show b;'); | 
|  | testUnparseTopLevelWithMetadata('import "lib.dart" deferred as a hide b;'); | 
|  | } | 
|  |  | 
|  | testUnparseMemberAndAsMemberOfFoo(String code) { | 
|  | testUnparseMember(code); | 
|  | testUnparseTopLevelWithMetadata('class Foo{$code}'); | 
|  | } | 
|  |  | 
|  | testRedirectingFactoryConstructors() { | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=prefix.Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=prefix.Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=prefix.Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=prefix.Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=prefix.Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("factory Foo()=prefix.Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=prefix.Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=prefix.Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=prefix.Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "const factory Foo()=prefix.Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("const factory Foo()=prefix.Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "const factory Foo()=prefix.Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external factory Foo()=Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=prefix.Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=prefix.Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external factory Foo()=prefix.Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external factory Foo()=prefix.Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external factory Foo()=prefix.Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external factory Foo()=prefix.Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external const factory Foo()=Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external const factory Foo()=Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external const factory Foo()=Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external const factory Foo()=Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=Bar<List<T>,T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo("external const factory Foo()=prefix.Bar;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=prefix.Bar.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=prefix.Bar<T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=prefix.Bar<List<T>,T>;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=prefix.Bar<T>.baz;"); | 
|  | testUnparseMemberAndAsMemberOfFoo( | 
|  | "external const factory Foo()=prefix.Bar<List<T>,T>.baz;"); | 
|  | } | 
|  |  | 
|  | testClassDeclarations() { | 
|  | testUnparseTopLevelWithMetadata('class Foo{}'); | 
|  | testUnparseTopLevelWithMetadata('abstract class Foo{}'); | 
|  | testUnparseTopLevelWithMetadata('class Fisk{operator-(x){}}'); | 
|  | } | 
|  |  | 
|  | testMixinApplications() { | 
|  | testUnparseTopLevelWithMetadata('class C = S with M;'); | 
|  | testUnparseTopLevelWithMetadata('class C = S with M1,M2;'); | 
|  | testUnparseTopLevelWithMetadata('class C = S with M1,M2,M3;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('class C<A> = S with M;'); | 
|  | testUnparseTopLevelWithMetadata('class C<A,B> = S with M;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('class C = S<A> with M;'); | 
|  | testUnparseTopLevelWithMetadata('class C = S<A,B> with M;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('class C = S with M<A>;'); | 
|  | testUnparseTopLevelWithMetadata('class C = S with M<A,B>;'); | 
|  | testUnparseTopLevelWithMetadata('class C = S with M1<A>,M2;'); | 
|  | testUnparseTopLevelWithMetadata('class C = S with M1,M2<A,B>;'); | 
|  |  | 
|  | testUnparseTopLevelWithMetadata('abstract class C = S with M;'); | 
|  | testUnparseTopLevelWithMetadata('abstract class C<A> = S<A> with M<A>;'); | 
|  | } | 
|  |  | 
|  | testUnparseParameters(List<String> variableDeclarations) { | 
|  | var sb = new StringBuffer(); | 
|  | sb.write('Constructor('); | 
|  | int index = 0; | 
|  | for (String variableDeclaration in variableDeclarations) { | 
|  | if (index != 0) { | 
|  | sb.write(', '); | 
|  | } | 
|  | sb.write(variableDeclaration); | 
|  | index++; | 
|  | } | 
|  | sb.write(');'); | 
|  |  | 
|  | FunctionExpression node = parseMember(sb.toString()); | 
|  | index = 0; | 
|  | for (VariableDefinitions parameter in node.parameters.nodes) { | 
|  | Expect.equals(variableDeclarations[index], unparse(parameter)); | 
|  | index++; | 
|  | } | 
|  | } | 
|  |  | 
|  | testParameters() { | 
|  | testUnparseParameters(["foo", "bar=0", "int baz", "int boz=0"]); | 
|  | testUnparseParameters( | 
|  | ["this.foo", "this.bar=0", "int this.baz", "int this.boz=0"]); | 
|  | testUnparseParameters( | 
|  | ["foo()", "void bar()", "int baz(a)", "int boz(int a,int b)=null"]); | 
|  | testUnparseParameters([ | 
|  | "this.foo()", | 
|  | //"void this.bar()", // Commented out due to Issue 7852 | 
|  | //"int this.baz(a)", // Commented out due to Issue 7852 | 
|  | //"int this.boz(int a,int b)=null" // Commented out due to Issue 7852 | 
|  | ]); | 
|  | testUnparseParameters( | 
|  | ["@a foo", "@b @c bar=0", "@D(0) int baz", "@E([f],{g:h}) int boz=0"]); | 
|  | } | 
|  |  | 
|  | testSymbolLiterals() { | 
|  | testUnparse("#+;"); | 
|  | testUnparse("#-;"); | 
|  | testUnparse("#*;"); | 
|  | testUnparse("#/;"); | 
|  | testUnparse("#~/;"); | 
|  | testUnparse("#%;"); | 
|  | testUnparse("#<;"); | 
|  | testUnparse("#<=;"); | 
|  | testUnparse("#>;"); | 
|  | testUnparse("#>=;"); | 
|  | testUnparse("#==;"); | 
|  | testUnparse("#&;"); | 
|  | testUnparse("#|;"); | 
|  | testUnparse("#^;"); | 
|  |  | 
|  | testUnparse("#a;"); | 
|  | testUnparse("#a.b;"); | 
|  | testUnparse("#a.b.c;"); | 
|  | testUnparse("#aa.bb.cc.dd;"); | 
|  | } | 
|  |  | 
|  | main() { | 
|  | testSignedConstants(); | 
|  | testGenericTypes(); | 
|  | testForLoop(); | 
|  | testEmptyList(); | 
|  | testClosure(); | 
|  | testIndexedOperatorDecl(); | 
|  | testNativeMethods(); | 
|  | testPrefixIncrements(); | 
|  | testConstModifier(); | 
|  | testSimpleObjectInstantiation(); | 
|  | testLibraryName(); | 
|  | testImport(); | 
|  | testExport(); | 
|  | testConditionalImport(); | 
|  | testConditionalExport(); | 
|  | testPart(); | 
|  | testPartOf(); | 
|  | testCombinators(); | 
|  | testDeferredImport(); | 
|  | testRedirectingFactoryConstructors(); | 
|  | testClassDeclarations(); | 
|  | testMixinApplications(); | 
|  | testParameters(); | 
|  | testSymbolLiterals(); | 
|  | } |