| // Copyright (c) 2012, 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. |
| // Test correct instance compound assignment operator. |
| |
| import "package:expect/expect.dart"; |
| |
| class A { |
| A() : f = 2 {} |
| var f; |
| operator [](index) => f; |
| operator []=(index, value) => f = value; |
| |
| var _g = 0; |
| var gGetCount = 0; |
| var gSetCount = 0; |
| get g { |
| gGetCount++; |
| return _g; |
| } |
| |
| set g(value) { |
| gSetCount++; |
| _g = value; |
| } |
| } |
| |
| class B { |
| B() |
| : _a = new A(), |
| count = 0 {} |
| get a { |
| count++; |
| return _a; |
| } |
| |
| var _a; |
| var count; |
| } |
| |
| var globalA; |
| var fooCounter = 0; |
| foo() { |
| fooCounter++; |
| return globalA; |
| } |
| |
| main() { |
| B b = new B(); |
| Expect.equals(0, b.count); |
| Expect.equals(2, b.a.f); |
| Expect.equals(1, b.count); |
| var o = b.a; |
| Expect.equals(2, b.count); |
| b.a.f = 1; |
| Expect.equals(3, b.count); |
| Expect.equals(1, b._a.f); |
| b.a.f += 1; |
| Expect.equals(4, b.count); |
| Expect.equals(2, b._a.f); |
| |
| b.count = 0; |
| b._a.f = 2; |
| Expect.equals(0, b.count); |
| Expect.equals(2, b.a[0]); |
| Expect.equals(1, b.count); |
| o = b.a; |
| Expect.equals(2, b.count); |
| b.a[0] = 1; |
| Expect.equals(3, b.count); |
| Expect.equals(1, b._a.f); |
| b.a[0] += 1; |
| Expect.equals(4, b.count); |
| Expect.equals(2, b._a.f); |
| |
| b._a.g++; |
| Expect.equals(1, b._a.gGetCount); |
| Expect.equals(1, b._a.gSetCount); |
| Expect.equals(1, b._a._g); |
| |
| globalA = b._a; |
| globalA.f = 0; |
| foo().f += 1; |
| Expect.equals(1, fooCounter); |
| Expect.equals(1, globalA.f); |
| } |