Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(473)

Unified Diff: tests/language/covariant_test.dart

Issue 2626843003: Implement 'covariant' modifier for dart2js. (Closed)
Patch Set: Update status file for dartk. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/language/covariant_override_test.dart ('k') | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/language/covariant_test.dart
diff --git a/tests/language/covariant_test.dart b/tests/language/covariant_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..b93c9017e78266c5bd6236b41dca5ca89d701670
--- /dev/null
+++ b/tests/language/covariant_test.dart
@@ -0,0 +1,378 @@
+// 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;
+
+// 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
+
+// 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;
+
+// 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;
+
+ // 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
+
+ // 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;
+}
+
+// All of the above as instance members in a class.
+class B {
+ covariant int x40;
+
+ // Getters may never have `covariant`.
+ covariant /// 41: compile-time error
+ int get x41 => 499;
+
+ void set x42(covariant 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
+
+ // Getters may never have `covariant`.
+ covariant /// 47: compile-time error
+ get x47 => 499;
+
+ void set x48(covariant 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 int x) => 499;
+
+ // `Covariant` must be in front of the types.
+ int f53(
+ int
+ covariant /// 53: compile-time error
+ x) => 499;
+
+ int f54(covariant final x) => 499;
+
+ // `Covariant` must be in front of modifiers.
+ int f55(
+ final
+ covariant /// 55: compile-time error
+ x) => 499;
+
+ int f56(covariant 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;
+}
+
+void use(x) {}
+
+main() {
+ x0 = 0;
+ use(x1);
+ x2 = 499;
+ use(x3);
+ use(x4);
+ x5 = 42;
+ x6 = 0; /// 06: 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));
+
+ A.x20 = 0;
+ use(A.x21);
+ use(A.x21b);
+ A.x22 = 499;
+ use(A.x23);
+ use(A.x24);
+ A.x25 = 42;
+ A.x26 = 0; /// 26: 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));
+
+ var b = new B();
+ b.x40 = 0;
+ use(b.x41);
+ b.x42 = 499;
+ use(b.x43);
+ use(b.x44);
+ b.x45 = 42;
+ b.x46 = 0; /// 46: 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));
+}
« no previous file with comments | « tests/language/covariant_override_test.dart ('k') | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698