// Copyright (c) 2011, 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.

/// @assertion It is a compile-time error if k explicitly specifies a default
/// value for an optional parameter.
/// @description Checks that it is not an error if redirecting factory
/// constructor has optional parameters with no defaults and that actual
/// arguments are passed as expected.
/// @author ilya

import "../../../../Utils/expect.dart";

List expect = [];

test(x, y) {
  Expect.listEquals(expect, [x, y]);
}

class F {
  factory F(int x, [int y]) = C;
  factory F.foo(int x, [int y]) = C.foo;
  factory F.bar(int x, {int y}) = C.bar;
}

class C implements F {
  C(int x, [int y = 0]) {
    test(x, y);
  }
  C.foo(int x, [int y = 0]) {
    test(x, y);
  }
  C.bar(int x, {int y = 0}) {
    test(x, y);
  }
}

main() {
  expect = [1, 0];
  new F(1);
  expect = [1, 1];
  new F(1, 1);
  expect = [1, 0];
  new F.foo(1);
  expect = [1, 1];
  new F.foo(1, 1);
  expect = [1, 0];
  new F.bar(1);
  expect = [1, 1];
  new F.bar(1, y: 1);
}
