blob: 8f3ff6bb87c8a4085b711539950a5093e2c34064 [file] [log] [blame]
// Copyright (c) 2013, 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 = 2.9
// Test for the evaluation order of getters and setters.
import 'package:expect/expect.dart';
var trace;
class X {
get b {
trace.add('get b');
return new X();
}
set c(value) {
trace.add('set c');
}
toString() {
trace.add('toString');
return 'X';
}
get c {
trace.add('get c');
return 42;
}
get d {
trace.add('get d');
return new X();
}
operator [](index) {
trace.add('index');
return 42;
}
operator []=(index, value) {
trace.add('indexSet');
}
}
main() {
var x = new X();
trace = [];
x.b.c = '$x';
Expect.listEquals(['get b', 'toString', 'set c'], trace);
trace = [];
x.b.c += '$x'.hashCode;
Expect.listEquals(['get b', 'get c', 'toString', 'set c'], trace);
trace = [];
x.b.c++;
Expect.listEquals(['get b', 'get c', 'set c'], trace);
trace = [];
x.b.d[42] = '$x';
Expect.listEquals(['get b', 'get d', 'toString', 'indexSet'], trace);
trace = [];
x.b.d[42] += '$x'.hashCode;
Expect.listEquals(['get b', 'get d', 'index', 'toString', 'indexSet'], trace);
trace = [];
x.b.d[42]++;
Expect.listEquals(['get b', 'get d', 'index', 'indexSet'], trace);
trace = [];
++x.b.d[42];
Expect.listEquals(['get b', 'get d', 'index', 'indexSet'], trace);
trace = [];
x.b.d[x.c] *= '$x'.hashCode;
Expect.listEquals(
['get b', 'get d', 'get c', 'index', 'toString', 'indexSet'], trace);
trace = [];
x.b.c = x.d.c = '$x';
Expect.listEquals([
'get b',
'get d',
'toString',
'set c',
'set c',
], trace);
trace = [];
x.b.c = x.d[42] *= '$x'.hashCode;
Expect.listEquals(
['get b', 'get d', 'index', 'toString', 'indexSet', 'set c'], trace);
trace = [];
x.b.c = ++x.d.c;
Expect.listEquals(['get b', 'get d', 'get c', 'set c', 'set c'], trace);
}