// Copyright (c) 2018, 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.
// dart2jsOptions=-Ddart.isdart2js=true

import "package:expect/expect.dart";

@NoInline()
List staticFn<T>([T a1, T a2, T a3, T a4, T a5]) => [T, a1, a2, a3, a4, a5];

class C {
  @NoInline()
  List memberFn<T>([T a1, T a2, T a3, T a4, T a5]) => [T, a1, a2, a3, a4, a5];

  @NoInline()
  // 'map' is implemented by native iterables. On dart2js, 'map' has interceptor
  // calling convention.
  List map<T>([T a1, T a2, T a3, T a4, T a5]) => [T, a1, a2, a3, a4, a5];
}

check(expected, actual) {
  print('a:  $expected');
  print('b:  $actual');
  if (((actual[0] == Object && expected[0] == dynamic) ||
          (actual[0] == dynamic && expected[0] == Object)) &&
      !const bool.fromEnvironment('dart.isdart2js')) {
    // TODO(32483): dartdevk sometimes defaults type to 'Object' when 'dynamic'
    // is required. Remove this hack when fixed.
    actual = actual.toList()..[0] = expected[0];
    print('b*: $actual');
  }
  Expect.equals(expected.toString(), actual.toString());
}

main() {
  check([dynamic, 1, 2, 3, null, null], staticFn(1 as dynamic, 2, 3));

  check([Object, 'Z', 2, 4, null, null], staticFn('Z', 2, 4));

  check([int, 3, 2, 1, null, null], staticFn(3, 2, 1));

  dynamic f1 = staticFn;

  check([dynamic, 4, 2, 3, null, null], f1(4 as dynamic, 2, 3));

  check([dynamic, 'Q', 2, 3, null, null], f1('Q', 2, 3));

  check([dynamic, 6, 2, 3, null, null], f1(6, 2, 3));

  check([int, 7, 2, null, null, null], f1<int>(7, 2));

  var c = new C();

  check([dynamic, 8, 2, 3, null, null], c.memberFn(8 as dynamic, 2, 3));

  check([Object, 'A', 2, 3, null, null], c.memberFn('A', 2, 3));

  check([int, 9, 2, 3, null, null], c.memberFn<int>(9, 2, 3));

  check([dynamic, 10, 2, 3, null, null], c.map(10 as dynamic, 2, 3));

  check([Object, 'B', 2, 3, null, null], c.map('B', 2, 3));

  check([int, 11, 2, 3, null, null], c.map(11, 2, 3));

  dynamic o = new C();

  check([dynamic, 12, 2, 3, null, null], o.memberFn(12 as dynamic, 2, 3));

  check([dynamic, 'C', 2, 3, null, null], o.memberFn('C', 2, 3));

  check([int, 13, 2, null, null, null], o.memberFn<int>(13, 2));

  check([dynamic, 14, 2, 3, null, null], o.map(14 as dynamic, 2, 3));

  check([dynamic, 'D', 2, 3, null, null], o.map('D', 2, 3));

  check([int, 15, null, null, null, null], o.map<int>(15));

  check([int, 16, 2, 3, 4, null], o.map<int>(16, 2, 3, 4));
}
