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