| // 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. |
| |
| import "package:expect/expect.dart"; |
| |
| class GettersSettersTest { |
| static int? foo; |
| |
| static get bar { |
| return foo; |
| } |
| |
| static set bar(newValue) { |
| foo = newValue; |
| } |
| |
| static testMain() { |
| A a = new A(); |
| a.x = 2; |
| Expect.equals(2, a.x); |
| Expect.equals(2, a.x_); |
| |
| // Test inheritance. |
| a = new B(); |
| a.x = 4; |
| Expect.equals(4, a.x); |
| Expect.equals(4, a.x_); |
| |
| // Test overriding. |
| C c = new C(); |
| c.x = 8; |
| Expect.equals(8, c.x); |
| Expect.equals(0, c.x_); |
| Expect.equals(8, c.y_); |
| |
| // Test keyed getters and setters. |
| a.x_ = 0; |
| Expect.equals(2, a[2]); |
| a[2] = 4; |
| Expect.equals(6, a[0]); |
| |
| // Test assignment operators. |
| a.x_ = 0; |
| a[2] += 8; |
| Expect.equals(12, a[0]); |
| |
| // Test calling a function that internally uses getters. |
| Expect.equals(true, a.isXPositive()); |
| |
| // Test static fields. |
| foo = 42; |
| Expect.equals(42, foo); |
| Expect.equals(42, bar); |
| A.foo = 43; |
| Expect.equals(43, A.foo); |
| Expect.equals(43, A.bar); |
| |
| bar = 42; |
| Expect.equals(42, foo); |
| Expect.equals(42, bar); |
| A.bar = 43; |
| Expect.equals(43, A.foo); |
| Expect.equals(43, A.bar); |
| } |
| } |
| |
| class A { |
| A(); |
| int? x_; |
| static int? foo; |
| |
| static get bar { |
| return foo; |
| } |
| |
| static set bar(newValue) { |
| foo = newValue; |
| } |
| |
| int get x { |
| return x_!; |
| } |
| |
| void set x(int value) { |
| x_ = value; |
| } |
| |
| bool isXPositive() { |
| return x > 0; |
| } |
| |
| int operator [](int index) { |
| return x_! + index; |
| } |
| |
| void operator []=(int index, int value) { |
| x_ = index + value; |
| } |
| |
| int getX_() { |
| return x_!; |
| } |
| } |
| |
| class B extends A { |
| B(); |
| } |
| |
| class C extends A { |
| int? y_; |
| |
| C() { |
| this.x_ = 0; |
| } |
| |
| int get x { |
| return y_!; |
| } |
| |
| void set x(int value) { |
| y_ = value; |
| } |
| } |
| |
| main() { |
| GettersSettersTest.testMain(); |
| } |