// 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.

// Test various invalid super-invocations for mixin declarations.

abstract class UnaryInt {
  num foo(int x);
}

abstract class UnaryNum {
  num foo(num x);
}

abstract class UnaryOptionalNum {
  num foo([num x]);
}

// Mixins may contain super-invocations.
// The super-invocation must be valid against the combined super-interfaces
// (i.e., valid against the most specific of them for that method).

mixin M1 on UnaryNum {
  void bar() {
    super.foo(); //# 01: compile-time error
    super.foo(1, 2); //# 02: compile-time error
    super.foo("not num"); //# 03: compile-time error
    super.bar; //# 04: compile-time error
    super + 2; //# 05: compile-time error
  }
}

mixin M2 on UnaryNum, UnaryInt {
  void bar() {
    super.foo(4.2); // Allows most specific type.
    super.foo(1, 2); //# 06: compile-time error
    super.foo("not num"); //# 07: compile-time error
  }
}

mixin M3 on UnaryNum, UnaryOptionalNum {
  void bar() {
    super.foo(4.2);
    super.foo();
    super.foo(1, 2); //# 08: compile-time error
    super.foo("not num"); //# 09: compile-time error
  }
}

class C1 implements UnaryNum, UnaryInt, UnaryOptionalNum {
  num foo([num x]) => x ?? 37.0;
}

class A1 = C1 with M1;
class A2 = C1 with M2;
class A3 = C1 with M3;
main() {
  A1().bar();
  A2().bar();
  A3().bar();
}
