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