// Copyright (c) 2014, 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 'dart:async';
import 'package:expect/expect.dart';
import 'package:async_helper/async_helper.dart';
import 'mock_compiler.dart';
import 'package:compiler/src/js/js.dart' as jsAst;
import 'package:compiler/src/js/js.dart' show js;

Future testStatement(String statement, arguments, String expect) {
  jsAst.Node node = js.statement(statement, arguments);
  return MockCompiler.create((MockCompiler compiler) {
    String jsText =
        jsAst.prettyPrint(node, compiler, allowVariableMinification: false);

    Expect.stringEquals(expect.trim(), jsText.trim());
  });
}

Future testError(String statement, arguments, [String expect = ""]) {
  return new Future.sync(() {
    bool doCheck(exception) {
      String message = '$exception';
      Expect.isTrue(message.contains(expect), '"$message" contains "$expect"');
      return true;
    }

    void action() {
      jsAst.Node node = js.statement(statement, arguments);
    }

    Expect.throws(action, doCheck);
  });
}

// Function declaration and named function.
const NAMED_FUNCTION_1 = r'''
function foo/*function declaration*/() {
  return function harry/*named function*/() { return #; }
}''';

const NAMED_FUNCTION_1_NAMED_HOLE = r'''
function foo/*function declaration*/() {
  return function harry/*named function*/() { return #hole; }
}''';

const NAMED_FUNCTION_1_ONE = r'''
function foo() {
  return function harry() {
    return 1;
  };
}''';

const MISC_1 = r'''
function foo() {
  /a/;
  #;
}''';

const MISC_1_NAMED_HOLE = r'''
function foo() {
  /a/;
  #hole;
}''';

const MISC_1_1 = r'''
function foo() {
  /a/;
  1;
  2;
}''';

void main() {
  var eOne = js('1');
  var eTwo = js('2');
  var eTrue = js('true');
  var eVar = js('x');
  var block12 = js.statement('{ 1; 2; }');
  var stm = js.statement('foo();');
  var seq1 = js('1, 2, 3');

  Expect.isTrue(eOne is jsAst.LiteralNumber);
  Expect.isTrue(eTrue is jsAst.LiteralBool);
  Expect.isTrue(block12 is jsAst.Block);

  asyncTest(() => Future.wait([
        // Interpolated Expressions are upgraded to ExpressionStatements.
        testStatement('{ #; #; }', [eOne, eOne], '{\n  1;\n  1;\n}'),
        testStatement(
            '{ #a; #b; }', {'a': eOne, 'b': eOne}, '{\n  1;\n  1;\n}'),

        // Interpolated sub-blocks are spliced.
        testStatement(
            '{ #; #; }', [block12, block12], '{\n  1;\n  2;\n  1;\n  2;\n}\n'),
        testStatement('{ #a; #b; }', {'a': block12, 'b': block12},
            '{\n  1;\n  2;\n  1;\n  2;\n}\n'),

        // If-condition.  Dart booleans are evaluated, JS Expression booleans are
        // substituted.
        testStatement('if (#) #', [eOne, block12], 'if (1) {\n  1;\n  2;\n}'),
        testStatement(
            'if (#) #;', [eTrue, block12], 'if (true) {\n  1;\n  2;\n}'),
        testStatement('if (#) #;', [eVar, block12], 'if (x) {\n  1;\n  2;\n}'),
        testStatement('if (#) #;', ['a', block12], 'if (a) {\n  1;\n  2;\n}'),
        testStatement('if (#) #;', [true, block12], '{\n  1;\n  2;\n}'),
        testStatement('if (#) #;', [false, block12], ';'),
        testStatement('if (#) 3; else #;', [true, block12], '3;'),
        testStatement(
            'if (#) 3; else #;', [false, block12], '{\n  1;\n  2;\n}'),
        testStatement(
            'if (#a) #b', {'a': eOne, 'b': block12}, 'if (1) {\n  1;\n  2;\n}'),
        testStatement('if (#a) #b;', {'a': eTrue, 'b': block12},
            'if (true) {\n  1;\n  2;\n}'),
        testStatement('if (#a) #b;', {'a': eVar, 'b': block12},
            'if (x) {\n  1;\n  2;\n}'),
        testStatement(
            'if (#a) #b;', {'a': 'a', 'b': block12}, 'if (a) {\n  1;\n  2;\n}'),
        testStatement(
            'if (#a) #b;', {'a': true, 'b': block12}, '{\n  1;\n  2;\n}'),
        testStatement('if (#a) #b;', {'a': false, 'b': block12}, ';'),
        testStatement('if (#a) 3; else #b;', {'a': true, 'b': block12}, '3;'),
        testStatement('if (#a) 3; else #b;', {'a': false, 'b': block12},
            '{\n  1;\n  2;\n}'),

        testStatement(
            'while (#) #', [eOne, block12], 'while (1) {\n  1;\n  2;\n}'),
        testStatement(
            'while (#) #;', [eTrue, block12], 'while (true) {\n  1;\n  2;\n}'),
        testStatement(
            'while (#) #;', [eVar, block12], 'while (x) {\n  1;\n  2;\n}'),
        testStatement(
            'while (#) #;', ['a', block12], 'while (a) {\n  1;\n  2;\n}'),
        testStatement('while (#) #;', ['a', stm], 'while (a)\n  foo();'),

        testStatement(
            'do { {print(1);} do while(true); while (false) } while ( true )',
            [],
            '''
do {
  print(1);
  do
    while (true)
      ;
  while (false);
} while (true);
'''),
        testStatement('do #; while ( # )', [block12, eOne],
            'do {\n  1;\n  2;\n} while (1); '),
        testStatement('do #; while ( # )', [block12, eTrue],
            'do {\n  1;\n  2;\n} while (true); '),
        testStatement('do #; while ( # );', [block12, eVar],
            'do {\n  1;\n  2;\n} while (x);'),
        testStatement('do { # } while ( # )', [block12, 'a'],
            'do {\n  1;\n  2;\n} while (a);'),
        testStatement(
            'do #; while ( # )', [stm, 'a'], 'do\n  foo();\nwhile (a);'),

        testStatement('switch (#) {}', [eOne], 'switch (1) {\n}'),
        testStatement(
            '''
        switch (#) {
          case #: { # }
        }''',
            [eTrue, eOne, block12],
            'switch (true) {\n  case 1:\n    1;\n    2;\n}'),
        testStatement(
            '''
        switch (#) {
          case #: { # }
            break;
          case #: { # }
          default: { # }
        }''',
            [eTrue, eOne, block12, eTwo, block12, stm],
            '''
switch (true) {
  case 1:
    1;
    2;
    break;
  case 2:
    1;
    2;
  default:
    foo();
}'''),

        testStatement(NAMED_FUNCTION_1, [eOne], NAMED_FUNCTION_1_ONE),
        testStatement(
            NAMED_FUNCTION_1_NAMED_HOLE, {'hole': eOne}, NAMED_FUNCTION_1_ONE),

        testStatement(MISC_1, [block12], MISC_1_1),
        testStatement(MISC_1_NAMED_HOLE, {'hole': block12}, MISC_1_1),

        // Argument list splicing.
        testStatement('foo(#)', [[]], 'foo();'),
        testStatement(
            'foo(#)',
            [
              [eOne]
            ],
            'foo(1);'),
        testStatement('foo(#)', [eOne], 'foo(1);'),
        testStatement(
            'foo(#)',
            [
              [eTrue, eOne]
            ],
            'foo(true, 1);'),
        testStatement('foo(#a)', {'a': []}, 'foo();'),
        testStatement(
            'foo(#a)',
            {
              'a': [eOne]
            },
            'foo(1);'),
        testStatement('foo(#a)', {'a': eOne}, 'foo(1);'),
        testStatement(
            'foo(#a)',
            {
              'a': [eTrue, eOne]
            },
            'foo(true, 1);'),

        testStatement('foo(2,#)', [[]], 'foo(2);'),
        testStatement(
            'foo(2,#)',
            [
              [eOne]
            ],
            'foo(2, 1);'),
        testStatement('foo(2,#)', [eOne], 'foo(2, 1);'),
        testStatement(
            'foo(2,#)',
            [
              [eTrue, eOne]
            ],
            'foo(2, true, 1);'),
        testStatement('foo(2,#a)', {'a': []}, 'foo(2);'),
        testStatement(
            'foo(2,#a)',
            {
              'a': [eOne]
            },
            'foo(2, 1);'),
        testStatement('foo(2,#a)', {'a': eOne}, 'foo(2, 1);'),
        testStatement(
            'foo(2,#a)',
            {
              'a': [eTrue, eOne]
            },
            'foo(2, true, 1);'),

        testStatement('foo(#,3)', [[]], 'foo(3);'),
        testStatement(
            'foo(#,3)',
            [
              [eOne]
            ],
            'foo(1, 3);'),
        testStatement('foo(#,3)', [eOne], 'foo(1, 3);'),
        testStatement(
            'foo(#,3)',
            [
              [eTrue, eOne]
            ],
            'foo(true, 1, 3);'),
        testStatement('foo(#a,3)', {'a': []}, 'foo(3);'),
        testStatement(
            'foo(#a,3)',
            {
              'a': [eOne]
            },
            'foo(1, 3);'),
        testStatement('foo(#a,3)', {'a': eOne}, 'foo(1, 3);'),
        testStatement(
            'foo(#a,3)',
            {
              'a': [eTrue, eOne]
            },
            'foo(true, 1, 3);'),

        testStatement('foo(2,#,3)', [[]], 'foo(2, 3);'),
        testStatement(
            'foo(2,#,3)',
            [
              [eOne]
            ],
            'foo(2, 1, 3);'),
        testStatement('foo(2,#,3)', [eOne], 'foo(2, 1, 3);'),
        testStatement(
            'foo(2,#,3)',
            [
              [eTrue, eOne]
            ],
            'foo(2, true, 1, 3);'),
        testStatement('foo(2,#a,3)', {'a': []}, 'foo(2, 3);'),
        testStatement(
            'foo(2,#a,3)',
            {
              'a': [eOne]
            },
            'foo(2, 1, 3);'),
        testStatement('foo(2,#a,3)', {'a': eOne}, 'foo(2, 1, 3);'),
        testStatement(
            'foo(2,#a,3)',
            {
              'a': [eTrue, eOne]
            },
            'foo(2, true, 1, 3);'),

        // Interpolated Literals
        testStatement('a = {#: 1}', [eOne], 'a = {1: 1};'),
        testStatement('a = {#a: 1}', {'a': eOne}, 'a = {1: 1};'),
        // Maybe we should make this work?
        testError('a = {#: 1}', [1], 'is not a Literal: 1'),
        testError('a = {#a: 1}', {'a': 1}, 'is not a Literal: 1'),

        // Interpolated parameter splicing.
        testStatement('function foo(#){}', [new jsAst.Parameter('x')],
            'function foo(x) {\n}'),
        testStatement('function foo(#){}', ['x'], 'function foo(x) {\n}'),
        testStatement('function foo(#){}', [[]], 'function foo() {\n}'),
        testStatement(
            'function foo(#){}',
            [
              ['x']
            ],
            'function foo(x) {\n}'),
        testStatement(
            'function foo(#){}',
            [
              ['x', 'y']
            ],
            'function foo(x, y) {\n}'),
        testStatement('function foo(#a){}', {'a': new jsAst.Parameter('x')},
            'function foo(x) {\n}'),
        testStatement('function foo(#a){}', {'a': 'x'}, 'function foo(x) {\n}'),
        testStatement('function foo(#a){}', {'a': []}, 'function foo() {\n}'),
        testStatement(
            'function foo(#a){}',
            {
              'a': ['x']
            },
            'function foo(x) {\n}'),
        testStatement(
            'function foo(#a){}',
            {
              'a': ['x', 'y']
            },
            'function foo(x, y) {\n}'),

        testStatement(
            'function foo() async {}', [], 'function foo() async {\n}'),
        testStatement(
            'function foo() sync* {}', [], 'function foo() sync* {\n}'),
        testStatement(
            'function foo() async* {}', [], 'function foo() async* {\n}'),

        testStatement('a = #.#', [eVar, eOne], 'a = x[1];'),
        testStatement('a = #.#', [eVar, 'foo'], 'a = x.foo;'),
        testStatement('a = #a.#b', {'a': eVar, 'b': eOne}, 'a = x[1];'),
        testStatement('a = #a.#b', {'a': eVar, 'b': 'foo'}, 'a = x.foo;'),

        testStatement('function f(#) { return #.#; }', ['x', eVar, 'foo'],
            'function f(x) {\n  return x.foo;\n}'),
        testStatement(
            'function f(#a) { return #b.#c; }',
            {'a': 'x', 'b': eVar, 'c': 'foo'},
            'function f(x) {\n  return x.foo;\n}'),

        testStatement(
            '#.prototype.# = function(#) { return #.# };',
            [
              'className',
              'getterName',
              ['r', 'y'],
              'r',
              'fieldName'
            ],
            'className.prototype.getterName = function(r, y) {\n'
            '  return r.fieldName;\n'
            '};'),
        testStatement(
            '#a.prototype.#b = function(#c) { return #d.#e };',
            {
              'a': 'className',
              'b': 'getterName',
              'c': ['r', 'y'],
              'd': 'r',
              'e': 'fieldName'
            },
            'className.prototype.getterName = function(r, y) {\n'
            '  return r.fieldName;\n'
            '};'),

        testStatement(
            'function foo(r, #) { return #[r](#) }',
            [
              ['a', 'b'],
              'g',
              ['b', 'a']
            ],
            'function foo(r, a, b) {\n  return g[r](b, a);\n}'),
        testStatement(
            'function foo(r, #a) { return #b[r](#c) }',
            {
              'a': ['a', 'b'],
              'b': 'g',
              'c': ['b', 'a']
            },
            'function foo(r, a, b) {\n  return g[r](b, a);\n}'),

        // Sequence is printed flattened
        testStatement('x = #', [seq1], 'x = (1, 2, 3);'),
        testStatement('x = (#, #)', [seq1, seq1], 'x = (1, 2, 3, 1, 2, 3);'),
        testStatement('x = #, #', [seq1, seq1], 'x = (1, 2, 3), 1, 2, 3;'),
        testStatement('for (i = 0, j = #, k = 0; ; ++i, ++j, ++k){}', [seq1],
            'for (i = 0, j = (1, 2, 3), k = 0;; ++i, ++j, ++k) {\n}'),
        testStatement('x = #a', {'a': seq1}, 'x = (1, 2, 3);'),
        testStatement(
            'x = (#a, #b)', {'a': seq1, 'b': seq1}, 'x = (1, 2, 3, 1, 2, 3);'),
        testStatement(
            'x = #a, #b', {'a': seq1, 'b': seq1}, 'x = (1, 2, 3), 1, 2, 3;'),
        testStatement(
            'for (i = 0, j = #a, k = 0; ; ++i, ++j, ++k){}',
            {'a': seq1},
            'for (i = 0, j = (1, 2, 3), k = 0;; ++i, ++j, ++k) {\n}'),

        // Use the same name several times.
        testStatement(
            '#a.prototype.#a = function(#b) { return #c.#c };',
            {
              'a': 'name1_2',
              'b': ['r', 'y'],
              'c': 'name4_5'
            },
            'name1_2.prototype.name1_2 = function(r, y) {\n'
            '  return name4_5.name4_5;\n'
            '};'),

        testStatement('label: while (a) { label2: break label;}', [],
            'label:\n  while (a)\n    label2:\n      break label;\n  '),

        testStatement('var # = 3', ['x'], 'var x = 3;'),
        testStatement(
            'var # = 3', [new jsAst.VariableDeclaration('x')], 'var x = 3;'),
        testStatement(
            'var # = 3, # = #', ['x', 'y', js.number(2)], 'var x = 3, y = 2;'),
        testStatement('var #a = 3, #b = #c',
            {"a": 'x', "b": 'y', "c": js.number(2)}, 'var x = 3, y = 2;'),
        testStatement('function #() {}', ['x'], 'function x() {\n}'),
        testStatement('function #() {}', [new jsAst.VariableDeclaration('x')],
            'function x() {\n}'),
        testStatement('try {} catch (#) {}', ['x'], 'try {\n} catch (x) {\n}'),
        testStatement(
            'try {} catch (#a) {}', {"a": 'x'}, 'try {\n} catch (x) {\n}'),
        testStatement(
            'try {} catch (#a) {}',
            {"a": new jsAst.VariableDeclaration('x')},
            'try {\n} catch (x) {\n}'),

        // Test that braces around a single-statement block are removed by printer.
        testStatement('while (a) {foo()}', [], 'while (a)\n  foo();'),
        testStatement('if (a) {foo();}', [], 'if (a)\n  foo();'),
        testStatement('if (a) {foo();} else {foo2();}', [],
            'if (a)\n  foo();\nelse\n  foo2();'),
        testStatement('if (a) foo(); else {foo2();}', [],
            'if (a)\n  foo();\nelse\n  foo2();'),
        testStatement('do {foo();} while(a);', [], 'do\n  foo();\nwhile (a);'),
        testStatement('label: {foo();}', [], 'label:\n  foo();'),
        testStatement(
            'for (var key in a) {foo();}', [], 'for (var key in a)\n  foo();'),
        // `label: break label;` gives problems on IE. Test that it is avoided.
        testStatement('label: {break label;}', [], ';'),
        // This works on IE:
        testStatement('label: {label2: {break label;}}', [],
            'label:\n  label2:\n    break label;\n'),
        // Test dangling else:
        testStatement(
            'if (a) {if (b) {foo1();}} else {foo2();}',
            [],
            """
if (a) {
  if (b)
    foo1();
} else
  foo2();"""),
        testStatement(
            'if (a) {if (b) {foo1();} else {foo2();}}',
            [],
            """
if (a)
  if (b)
    foo1();
  else
    foo2();
"""),
        testStatement(
            'if (a) {if (b) {foo1();} else {foo2();}} else {foo3();}',
            [],
            """
if (a)
  if (b)
    foo1();
  else
    foo2();
else
  foo3();"""),
        testStatement(
            'if (a) {while (true) if (b) {foo1();}} else {foo2();}',
            [],
            """
if (a) {
  while (true)
    if (b)
      foo1();
} else
  foo2();"""),
      ]));
}
