blob: 2524aa5c5b28decbb04c47919e4ca94f30992fb5 [file] [log] [blame]
// 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.
import "package:expect/expect.dart";
class GettersSettersTest {
static int foo;
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);
A.foo = 43;
Expect.equals(43, A.foo);
new D().test();
OverrideField of = new OverrideField();
Expect.equals(27, of.getX_());
ReferenceField rf = new ReferenceField();
rf.x_ = 1;
Expect.equals(1, rf.getIt());
rf.setIt(2);
Expect.equals(2, rf.x_);
}
}
class 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 {}
class C extends A {
int y_;
C() : super() {
this.x_ = 0;
}
int get x {
return y_;
}
void set x(int value) {
y_ = value;
}
}
class D extends A {
var x2_;
set x(new_x) {
x2_ = new_x;
}
test() {
x = 87;
Expect.equals(87, x2_);
x = 42;
Expect.equals(42, x2_);
}
}
class OverrideField extends A {
int get x_ {
return 27;
}
}
class ReferenceField extends A {
setIt(a) {
super.x_ = a;
}
int getIt() {
return super.x_;
}
}
main() {
GettersSettersTest.testMain();
}