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

/**
 * @assertion A postfix expression of the form e1.v++ is equivalent to
 * (x){var r = x.v; x.v = r + 1; return r}(e1 ).
 * @description Checks that evaluation of an expression of the form e1.v++ is
 * equivalent to (x){var r = x.v; x.v = r + 1; return r;}(e1) in implementation
 * (basically, that postfix ++ works via operator+ in the described manner).
 * @author rodionov
 * @reviewer iefremov
 */
import '../../../Utils/expect.dart';

bool plusInvoked = false;

class A {
  final String value;

  A(this.value);

  operator +(var other) {
    plusInvoked = true;
    return new A("${value}${other}");
  }
}

class C {
  A v = A("");
  C(arg) {
    v = new A(arg);
  }
}

main() {
  var e1 = new C("foo");
  Expect.isFalse(plusInvoked);

  Expect.equals("foo", (e1.v++).value);
  Expect.isTrue(plusInvoked);
  Expect.equals("foo1", e1.v.value);
}
