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