|  | // 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. | 
|  |  | 
|  | import 'dart:mirrors'; | 
|  |  | 
|  | import "package:expect/expect.dart"; | 
|  |  | 
|  | class A { | 
|  | var missingSetterField; | 
|  | var missingGetterField; | 
|  | var getterInSuperClassField; | 
|  | var setterInSuperClassField; | 
|  | var getterSetterField; | 
|  | var missingAllField; | 
|  | var indexField = new List(2); | 
|  |  | 
|  | set setterInSuperClass(a) { | 
|  | setterInSuperClassField = a; | 
|  | } | 
|  |  | 
|  | get getterInSuperClass => getterInSuperClassField; | 
|  | } | 
|  |  | 
|  | class B extends A { | 
|  | get missingSetter => missingSetterField; | 
|  | get setterInSuperClass => setterInSuperClassField; | 
|  |  | 
|  | set missingGetter(a) { | 
|  | missingGetterField = a; | 
|  | } | 
|  |  | 
|  | set getterInSuperClass(a) { | 
|  | getterInSuperClassField = a; | 
|  | } | 
|  |  | 
|  | get getterSetter => getterSetterField; | 
|  | set getterSetter(a) { | 
|  | getterSetterField = a; | 
|  | } | 
|  |  | 
|  | operator [](index) => indexField[index]; | 
|  | operator []=(index, value) { | 
|  | indexField[index] = value; | 
|  | } | 
|  |  | 
|  | noSuchMethod(Invocation im) { | 
|  | String name = MirrorSystem.getName(im.memberName); | 
|  | if (name.startsWith('missingSetter')) { | 
|  | Expect.isTrue(im.isSetter); | 
|  | missingSetterField = im.positionalArguments[0]; | 
|  | } else if (name.startsWith('missingGetter')) { | 
|  | Expect.isTrue(im.isGetter); | 
|  | return missingGetterField; | 
|  | } else if (name.startsWith('missingAll') && im.isGetter) { | 
|  | return missingAllField; | 
|  | } else if (name.startsWith('missingAll') && im.isSetter) { | 
|  | missingAllField = im.positionalArguments[0]; | 
|  | } else { | 
|  | Expect.fail('Should not reach here'); | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | class C extends B { | 
|  | test() { | 
|  | Expect.equals(42, super.missingSetter = 42); | 
|  | Expect.equals(42, super.missingSetter); | 
|  | Expect.equals(43, super.missingSetter += 1); | 
|  | Expect.equals(43, super.missingSetter); | 
|  | Expect.equals(43, super.missingSetter++); | 
|  | Expect.equals(44, super.missingSetter); | 
|  |  | 
|  | Expect.equals(42, super.missingGetter = 42); | 
|  | Expect.equals(42, super.missingGetter); | 
|  | Expect.equals(43, super.missingGetter += 1); | 
|  | Expect.equals(43, super.missingGetter); | 
|  | Expect.equals(43, super.missingGetter++); | 
|  | Expect.equals(44, super.missingGetter); | 
|  |  | 
|  | Expect.equals(42, super.setterInSuperClass = 42); | 
|  | Expect.equals(42, super.setterInSuperClass); | 
|  | Expect.equals(43, super.setterInSuperClass += 1); | 
|  | Expect.equals(43, super.setterInSuperClass); | 
|  | Expect.equals(43, super.setterInSuperClass++); | 
|  | Expect.equals(44, super.setterInSuperClass); | 
|  |  | 
|  | Expect.equals(42, super.getterInSuperClass = 42); | 
|  | Expect.equals(42, super.getterInSuperClass); | 
|  | Expect.equals(43, super.getterInSuperClass += 1); | 
|  | Expect.equals(43, super.getterInSuperClass); | 
|  | Expect.equals(43, super.getterInSuperClass++); | 
|  | Expect.equals(44, super.getterInSuperClass); | 
|  |  | 
|  | Expect.equals(42, super.missingAll = 42); | 
|  | Expect.equals(42, super.missingAll); | 
|  | Expect.equals(43, super.missingAll += 1); | 
|  | Expect.equals(43, super.missingAll); | 
|  | Expect.equals(43, super.missingAll++); | 
|  | Expect.equals(44, super.missingAll); | 
|  |  | 
|  | Expect.equals(42, super[0] = 42); | 
|  | Expect.equals(42, super[0]); | 
|  | Expect.equals(43, super[0] += 1); | 
|  | Expect.equals(43, super[0]); | 
|  | Expect.equals(43, super[0]++); | 
|  | Expect.equals(44, super[0]); | 
|  |  | 
|  | Expect.equals(2, super[0] = 2); | 
|  | Expect.equals(2, super[0]); | 
|  | Expect.equals(3, super[0] += 1); | 
|  | Expect.equals(3, super[0]); | 
|  | Expect.equals(3, super[0]++); | 
|  | Expect.equals(4, super[0]); | 
|  | } | 
|  | } | 
|  |  | 
|  | main() { | 
|  | new C().test(); | 
|  | } |