// 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();
}
