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