// Copyright (c) 2017, 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 `covariant` can be parsed (and ignored) by
// dart2js and the VM.
// This test only checks for non-strong mode behavior.
//
// Generally, `covariant` should be ignored, when it is used in the right
// places.

import 'package:expect/expect.dart';

// Top level field may not have a covariant.
// Would be considered a minor (acceptable) bug, if it was accepted here too.
covariant  /// 00: compile-time error
int x0;

covariant int covariant;  /// 00b: compile-time error

int covariant;  /// 00c: ok

// Getters may never have `covariant`. (Neither on the top-level nor as members)
covariant  /// 01: compile-time error
int get x1 => 499;

// Top level setters may not have a covariant.
// Would be considered a minor (acceptable) bug, if it was accepted here too.
void set x2(
    covariant /// 02: compile-time error
    int val) {}

// Same as above, but with `covariant` in different positions.
// The `covariant` is just wrong there.

int
covariant  /// 03: compile-time error
x3;

int
covariant  /// 04: compile-time error
get x4 => 499;

void set x5(
    int
    covariant /// 05: compile-time error
    val) {}


// Same without types.

// Since `covariant` is a built-in identifier, it is not allowed here.
covariant x6;  /// 06: compile-time error

covariant covariant;  /// 06b: compile-time error

// Getters may never have `covariant`.
covariant  /// 07: compile-time error
get x7 => 499;

// Top level setters may not have a covariant.
// Would be considered a minor (acceptable) bug, if it was accepted here too.
void set x8(
    covariant /// 08: compile-time error
    val) {}

// If there is no type, then `covariant` is simply the parameter name:
void set x9(covariant) {}

// Covariant won't work on return types.
covariant  /// 10: compile-time error
int f10() => 499;

// Covariant won't work as a return type.
covariant  /// 11: compile-time error
f11() => 499;

// Covariant should not work on top-level methods.
// It's a minor (acceptable) bug to not error out here.
int f12(
    covariant /// 12: compile-time error
    int x) => 499;

// `Covariant` must be in front of the types.
int f13(
    int
    covariant /// 13: compile-time error
    x) => 499;

// Covariant should not work on top-level methods.
// It's a minor (acceptable) bug to not error out here.
int f14(
    covariant /// 14: compile-time error
    final
    x) => 499;

// `Covariant` must be in front of modifiers.
int f15(
    final
    covariant /// 15: compile-time error
    x) => 499;

// Covariant should not work on top-level methods.
// It's a minor (acceptable) bug to not error out here.
int f16(
    covariant /// 16: compile-time error
    final
    int
    x) => 499;

// `Covariant` must be in front of modifiers.
int f17(
    final
    covariant /// 17: compile-time error
    int
    x) => 499;

// On its own, `covariant` is just a parameter name.
int f18(covariant) => covariant;

covariant;  /// 19: compile-time error

// All of the above as statics in a class.
class A {
  // Static fields may not have a covariant.
  // Would be considered a minor (acceptable) bug, if it was accepted here too.
  static
  covariant  /// 20: compile-time error
  int x20;

  static covariant int covariant  /// 20b: compile-time error

  static int covariant;  /// 20c: ok

  // Getters may never have `covariant`.
  static
  covariant  /// 21: compile-time error
  int get x21 => 499;

  // Getters may never have `covariant`.
  covariant  /// 21b: compile-time error
  static
  int get x21b => 499;

  // Static setters may not have a covariant.
  // Would be considered a minor (acceptable) bug, if it was accepted here too.
  static void set x22(
      covariant /// 22: compile-time error
      int val) {}

  // Same as above, but with `covariant` in different positions.
  // The `covariant` is just wrong there.

  static int
  covariant  /// 23: compile-time error
  x23;

  static int
  covariant  /// 24: compile-time error
  get x24 => 499;

  static void set x25(
    int
    covariant /// 25: compile-time error
    val) {}

  // Since `covariant` is a built-in identifier, it is not allowed here.
  static covariant x26; /// 26: compile-time error
  static covariant covariant; /// 26b: compile-time error

  // Getters may never have `covariant`.
  static
  covariant  /// 27: compile-time error
  get x27 => 499;

  covariant  /// 27b: compile-time error
  static
  get x27b => 499;

  // Static setters may not have a covariant.
  // Would be considered a minor (acceptable) bug, if it was accepted here too.
  static void set x28(
      covariant /// 28: compile-time error
      val) {}

  // If there is no type, then `covariant` is simply the parameter name:
  static void set x29(covariant) {}

  // Covariant won't work on return types.
  static
  covariant  /// 30: compile-time error
  int f30() => 499;

  covariant  /// 30b: compile-time error
  static
  int f30b() => 499;

  // Covariant won't work as a return type.
  static
  covariant  /// 31: compile-time error
  f31() => 499;

  covariant  /// 31b: compile-time error
  static
  f31b() => 499;

  // Covariant should not work on static methods.
  // It's a minor (acceptable) bug to not error out here.
  static int f32(
      covariant /// 32: compile-time error
      int x) => 499;

  // `Covariant` must be in front of the types.
  static int f33(
      int
      covariant /// 33: compile-time error
      x) => 499;

  // Covariant should not work on top-level methods.
  // It's a minor (acceptable) bug to not error out here.
  static int f34(
      covariant /// 34: compile-time error
      final
      x) => 499;

  // `Covariant` must be in front of modifiers.
  static int f35(
      final
      covariant /// 35: compile-time error
      x) => 499;

  // Covariant should not work on top-level methods.
  // It's a minor (acceptable) bug to not error out here.
  static int f36(
      covariant /// 36: compile-time error
      final
      int
      x) => 499;

  // `Covariant` must be in front of modifiers.
  static int f37(
      final
      covariant /// 37: compile-time error
      int
      x) => 499;

  // `Covariant` on its own is just a parameter name.
  static int f38(covariant) => covariant;

  static covariant;  /// 39: compile-time error

}

// All of the above as instance members in a class.
class B {
  covariant  /// 40: ok
  int x40;

  covariant int covariant;  /// 40b: ok

  int covariant;            /// 40c: ok

  // Getters may never have `covariant`.
  covariant  /// 41: compile-time error
  int get x41 => 499;

  void set x42(
      covariant  /// 42: ok
      int val) {}

  // `covariant` in the wrong position.
  int
  covariant  /// 43: compile-time error
  x43;

  // `covariant` in the wrong position.
  int
  covariant  /// 44: compile-time error
  get x44 => 499;

  void set x45(
    int
    covariant /// 45: compile-time error
    val) {}

  // Since `covariant` is a built-in identifier, it is not allowed here.
  covariant x46; /// 46: compile-time error
  covariant covariant; /// 46b: compile-time error

  // Getters may never have `covariant`.
  covariant  /// 47: compile-time error
  get x47 => 499;

  void set x48(
      covariant  /// 48: ok
      val) {}

  // If there is no type, then `covariant` is simply the parameter name:
  void set x49(covariant) {}

  // Covariant won't work on return types.
  covariant  /// 50: compile-time error
  int f50() => 499;

  // Covariant won't work as a return type.
  covariant  /// 51: compile-time error
  f51() => 499;

  int f52(
      covariant  /// 52: ok
      int x) => 499;

  // `Covariant` must be in front of the types.
  int f53(
      int
      covariant /// 53: compile-time error
      x) => 499;

  int f54(
      covariant  /// 54: ok
      final x) => 499;

  // `Covariant` must be in front of modifiers.
  int f55(
      final
      covariant /// 55: compile-time error
      x) => 499;

  int f56(
      covariant  /// 56: ok
      final int x) => 499;

  // `Covariant` must be in front of modifiers.
  int f57(
      final
      covariant /// 57: compile-time error
      int
      x) => 499;

  // `Covariant` on its own is just a parameter name.
  int f58(covariant) => covariant;

  covariant;  /// 59: compile-time error
}

void use(x) {}

main() {
  x0 = 0;
  covariant = 0;  /// 00b: continued
  covariant = 0;  /// 00c: continued
  use(x1);
  x2 = 499;
  use(x3);
  use(x4);
  x5 = 42;
  x6 = 0; /// 06: continued
  covariant = 0; /// 06b: continued
  use(x7);
  x8 = 11;
  x9 = 12;
  use(f10());
  use(f11());
  use(f12(2));
  use(f13(3));
  use(f14(3));
  use(f15(3));
  use(f16(3));
  use(f17(3));
  Expect.equals(123, f18(123));
  use(covariant);  /// 19: continued

  A.x20 = 0;
  A.covariant = 0;  /// 20b: continued
  A.covariant = 0;  /// 20c: continued
  use(A.x21);
  use(A.x21b);
  A.x22 = 499;
  use(A.x23);
  use(A.x24);
  A.x25 = 42;
  A.x26 = 0; /// 26: continued
  A.covariant = 0; /// 26b: continued
  use(A.x27);
  use(A.x27b);
  A.x28 = 11;
  A.x29 = 12;
  use(A.f30());
  use(A.f31());
  use(A.f31b());
  use(A.f32(2));
  use(A.f33(3));
  use(A.f34(3));
  use(A.f35(3));
  use(A.f36(3));
  use(A.f37(3));
  Expect.equals(1234, A.f38(1234));
  use(A.covariant);  /// 39: continued

  var b = new B();
  b.x40 = 0;
  b.covariant = 0;  /// 40b: continued
  b.covariant = 0;  /// 40c: continued
  use(b.x41);
  b.x42 = 499;
  use(b.x43);
  use(b.x44);
  b.x45 = 42;
  b.x46 = 0; /// 46: continued
  b.covariant = 0; /// 46b: continued
  use(b.x47);
  b.x48 = 11;
  b.x49 = 12;
  use(b.f50());
  use(b.f51());
  use(b.f52(2));
  use(b.f53(2));
  use(b.f54(3));
  use(b.f55(3));
  use(b.f56(3));
  use(b.f57(3));
  Expect.equals(12345, b.f58(12345));
  use(B.covariant);  /// 59: continued
}