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

// Test that parameter default values are disallowed in a redirecting factory.

import "package:expect/expect.dart";

class A {
  A(this.a, [this.b = 0]);
  factory A.f(int a) = A;
  factory A.g(int a, [int b = 0]) = A;
  //                      ^
  // [analyzer] COMPILE_TIME_ERROR.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR
  //                          ^
  // [cfe] Can't have a default value here because any default values of 'A' would be used instead.
  factory A.h(int a, {int b: 0}) = A;
  //                      ^
  // [analyzer] COMPILE_TIME_ERROR.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR
  //                         ^
  // [cfe] Can't have a default value here because any default values of 'A' would be used instead.
  //                               ^
  // [analyzer] STATIC_WARNING.REDIRECT_TO_INVALID_FUNCTION_TYPE
  // [cfe] The constructor function type 'A Function(int, [int])' isn't a subtype of 'A Function(int, {int b})'.

  int a;
  int b;
}

main() {
  var x = new A.f(42);
  Expect.equals(x.a, 42);
  Expect.equals(x.b, 0);

  var y = new A.f(42, 43);
  //             ^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.EXTRA_POSITIONAL_ARGUMENTS
  // [cfe] Too many positional arguments: 1 allowed, but 2 found.
}
