Index: test/codegen/lib/mirrors/set_field_with_final_inheritance_test.dart |
diff --git a/test/codegen/lib/mirrors/set_field_with_final_inheritance_test.dart b/test/codegen/lib/mirrors/set_field_with_final_inheritance_test.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6e1cd39b3ca874ddc196b74db580b634f4102c55 |
--- /dev/null |
+++ b/test/codegen/lib/mirrors/set_field_with_final_inheritance_test.dart |
@@ -0,0 +1,114 @@ |
+// Copyright (c) 2013, 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. |
+ |
+library test.set_field_with_final_inheritance; |
+ |
+import 'dart:mirrors'; |
+import 'package:expect/expect.dart'; |
+ |
+class S { |
+ var sideEffect = 0; |
+ |
+ var mutableWithInheritedMutable = 1; |
+ final mutableWithInheritedFinal = 2; |
+ set mutableWithInheritedSetter(x) => sideEffect = 3; |
+ |
+ var finalWithInheritedMutable = 4; |
+ final finalWithInheritedFinal = 5; |
+ set finalWithInheritedSetter(x) => sideEffect = 6; |
+ |
+ var setterWithInheritedMutable = 7; |
+ final setterWithInheritedFinal = 8; |
+ set setterWithInheritedSetter(x) => sideEffect = 9; |
+} |
+ |
+class C extends S { |
+ var mutableWithInheritedMutable = 10; |
+ var mutableWithInheritedFinal = 11; |
+ var mutableWithInheritedSetter = 12; |
+ |
+ final finalWithInheritedMutable = 13; |
+ final finalWithInheritedFinal = 14; |
+ final finalWithInheritedSetter = 15; |
+ |
+ set setterWithInheritedMutable(x) => sideEffect = 16; |
+ set setterWithInheritedFinal(x) => sideEffect = 17; |
+ set setterWithInheritedSetter(x) => sideEffect = 18; |
+ |
+ get superMutableWithInheritedMutable => super.mutableWithInheritedMutable; |
+ get superMutableWithInheritedFinal => super.mutableWithInheritedFinal; |
+ |
+ get superFinalWithInheritedMutable => super.finalWithInheritedMutable; |
+ get superFinalWithInheritedFinal => super.finalWithInheritedFinal; |
+ |
+ get superSetterWithInheritedMutable => super.setterWithInheritedMutable; |
+ get superSetterWithInheritedFinal => super.setterWithInheritedFinal; |
+} |
+ |
+main() { |
+ C c; |
+ InstanceMirror im; |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(19, im.setField(#mutableWithInheritedMutable, 19).reflectee); |
+ Expect.equals(19, c.mutableWithInheritedMutable); |
+ Expect.equals(1, c.superMutableWithInheritedMutable); |
+ Expect.equals(0, c.sideEffect); |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(20, im.setField(#mutableWithInheritedFinal, 20).reflectee); |
+ Expect.equals(20, c.mutableWithInheritedFinal); |
+ Expect.equals(2, c.superMutableWithInheritedFinal); |
+ Expect.equals(0, c.sideEffect); |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(21, im.setField(#mutableWithInheritedSetter, 21).reflectee); |
+ Expect.equals(21, c.mutableWithInheritedSetter); |
+ Expect.equals(0, c.sideEffect); |
+ |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(22, im.setField(#finalWithInheritedMutable, 22).reflectee); |
+ Expect.equals(13, c.finalWithInheritedMutable); |
+ Expect.equals(22, c.superFinalWithInheritedMutable); |
+ Expect.equals(0, c.sideEffect); |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.throws(() => im.setField(#finalWithInheritedFinal, 23), |
+ (e) => e is NoSuchMethodError); |
+ Expect.equals(14, c.finalWithInheritedFinal); |
+ Expect.equals(5, c.superFinalWithInheritedFinal); |
+ Expect.equals(0, c.sideEffect); |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(24, im.setField(#finalWithInheritedSetter, 24).reflectee); |
+ Expect.equals(15, c.finalWithInheritedSetter); |
+ Expect.equals(6, c.sideEffect); |
+ |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(25, im.setField(#setterWithInheritedMutable, 25).reflectee); |
+ Expect.equals(7, c.setterWithInheritedMutable); |
+ Expect.equals(7, c.superSetterWithInheritedMutable); |
+ Expect.equals(16, c.sideEffect); |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(26, im.setField(#setterWithInheritedFinal, 26).reflectee); |
+ Expect.equals(8, c.setterWithInheritedFinal); |
+ Expect.equals(8, c.superSetterWithInheritedFinal); |
+ Expect.equals(17, c.sideEffect); |
+ |
+ c = new C(); |
+ im = reflect(c); |
+ Expect.equals(27, im.setField(#setterWithInheritedSetter, 27).reflectee); |
+ Expect.equals(18, c.sideEffect); |
+} |