// 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.options,
        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() {
      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();"""),
      ]));
}
