| // 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.throwsNoSuchMethodError( |
| () => im.setField(#finalWithInheritedFinal, 23)); |
| 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); |
| } |