| // Copyright (c) 2019, 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 compound assignment of the form C.v op= e is equivalent |
| /// to C.v=C.v op e. |
| /// @description Checks that an expression of the form C.v >>>= e is equivalent |
| /// to C.v = C.v >>> e. |
| /// @author iarkh |
| |
| |
| import '../../../../Utils/expect.dart'; |
| |
| class A { |
| operator >>>(val) { |
| return val.toString(); |
| } |
| } |
| |
| class C { |
| static get v { |
| ++getterInvocation; |
| return _v; |
| } |
| |
| static set v(val) { |
| ++setterInvocation; |
| _v = val; |
| } |
| |
| static var _v; |
| |
| static int setterInvocation = 0; |
| static int getterInvocation = 0; |
| } |
| |
| |
| main() { |
| C._v = new A(); |
| C.getterInvocation = 0; |
| C.setterInvocation = 0; |
| Expect.equals("1", C.v >>>= 1); |
| Expect.equals(1, C.getterInvocation); |
| Expect.equals(1, C.setterInvocation); |
| Expect.equals("1", C._v); |
| |
| C._v = new A(); |
| C.getterInvocation = 0; |
| C.setterInvocation = 0; |
| Expect.equals("null", C.v >>>= null); |
| Expect.equals(1, C.getterInvocation); |
| Expect.equals(1, C.setterInvocation); |
| Expect.equals("null", C._v); |
| |
| C._v = new A(); |
| C.getterInvocation = 0; |
| C.setterInvocation = 0; |
| Expect.equals("true", C.v >>>= true); |
| Expect.equals(1, C.getterInvocation); |
| Expect.equals(1, C.setterInvocation); |
| Expect.equals("true", C._v); |
| } |