Index: tests/language/src/GettersSetters2Test.dart |
diff --git a/tests/language/src/GettersSetters2Test.dart b/tests/language/src/GettersSetters2Test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..950630a829951bf287e8858e2cbdfa0c5d64eeb6 |
--- /dev/null |
+++ b/tests/language/src/GettersSetters2Test.dart |
@@ -0,0 +1,63 @@ |
+// Copyright (c) 2012, 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. |
+ |
+// Tests classes with getters and setters that do not have the same type. |
+ |
+class A { |
+ int a() { return 37;} |
+} |
+ |
+class B extends A{ |
+ int b() { return 38; } |
+} |
+ |
+class C {} |
+ |
+class T1 { |
+ A getterField; |
+ A get field() { return getterField; } |
+ // OK, B is assignable to A |
+ void set field(B arg) { getterField = arg; } |
+} |
+ |
+class T2 { |
+ A getterField; |
+ C setterField; |
+ A get field() { return getterField; } |
+ |
+ // Type C is not assignable to A |
+ void set field(C arg) { setterField = arg; } /// 01: static type error |
+} |
+ |
+class T3 { |
+ B getterField; |
+ B get field() { return getterField; } |
+ // OK, A is assignable to B |
+ void set field(A arg) { getterField = arg; } |
+} |
+ |
+ |
+main() { |
+ T1 instance1 = new T1(); |
+ T2 instance2 = new T2(); /// 01: continued |
+ T3 instance3 = new T3(); |
+ |
+ instance1.field = new B(); |
+ A resultA = instance1.field; |
+ instance1.field = new A(); /// 03: dynamic type error |
+ B resultB = instance1.field; |
+ |
+ int result; |
+ result = instance1.field.a(); |
+ Expect.equals(37, result); |
+ |
+ // Type 'A' has no method named 'b' |
+ instance1.field.b(); /// 02: static type error |
+ |
+ instance3.field = new B(); |
+ result = instance3.field.a(); |
+ Expect.equals(37, result); |
+ result = instance3.field.b(); |
+ Expect.equals(38, result); |
+} |