| // 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]); |
| } |