// 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.

// Test for the evaluation order of getters and setters.

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