| // Copyright (c) 2011, 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. | |
| // Dart test for testing super operator calls | |
| import "package:expect/expect.dart"; | |
| class A { | |
| String val = ""; | |
| List things; | |
| A() : things = ['D', 'a', 'r', 't', 42]; | |
| operator +(String s) { | |
| val = "${val}${s}"; | |
| return this; | |
| } | |
| operator [](i) { | |
| return things[i]; | |
| } | |
| operator []=(i, val) { | |
| return things[i] = val; | |
| } | |
| } | |
| class B extends A { | |
| operator +(String s) { | |
| super + ("${s}${s}"); // Call A.operator+(this, "${s}${s}"). | |
| return this; | |
| } | |
| operator [](i) { | |
| var temp = super[i]; | |
| if (temp is String) { | |
| return "$temp$temp"; | |
| } | |
| return temp + temp; | |
| } | |
| operator []=(i, val) { | |
| // Make sure the index expression is only evaluated | |
| // once in the presence of a compound assignment. | |
| return super[i++] += val; | |
| } | |
| } | |
| main() { | |
| var a = new A(); | |
| a = a + "William"; // operator + of class A. | |
| Expect.equals("William", a.val); | |
| Expect.equals("r", a[2]); // operator [] of class A. | |
| a = new B(); | |
| a += "Tell"; // operator + of class B. | |
| Expect.equals("TellTell", a.val); | |
| Expect.equals("rr", a[2]); // operator [] of class B. | |
| a[4] = 1; // operator []= of class B. | |
| Expect.equals(43, a.things[4]); | |
| Expect.equals(86, a[4]); | |
| } |